Version 2.15.0-70.0.dev

Merge commit '3ff52042ea43566862ddb647c2397c4182af129d' into 'dev'
diff --git a/DEPS b/DEPS
index f73aea5..e2ed777 100644
--- a/DEPS
+++ b/DEPS
@@ -73,7 +73,7 @@
 
   # Revisions of /third_party/* dependencies.
   "args_rev": "bf4c8796881b62fd5d3f6d86ab43014f9651eb20",
-  "async_rev": "88cc6079037da08dcb31cf8dcd62173c2ddf1e89",
+  "async_rev": "ecb3835c5b746f7762327d5f57bdc92e0a2e0450",
   "bazel_worker_rev": "0885637b037979afbf5bcd05fd748b309fd669c0",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
   "boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
@@ -153,7 +153,7 @@
   "source_maps-0.9.4_rev": "38524",
   "source_maps_rev": "53eb92ccfe6e64924054f83038a534b959b12b3e",
   "source_span_rev": "1be3c44045a06dff840d2ed3a13e6082d7a03a23",
-  "sse_rev": "d505b383768889a1e3e90097684e929a9e6d6b8f",
+  "sse_rev": "9084339389eb441d0c0518cddac211a097e78657",
   "stack_trace_rev": "6788afc61875079b71b3d1c3e65aeaa6a25cbc2f",
   "stream_channel_rev": "d7251e61253ec389ee6e045ee1042311bced8f1d",
   "string_scanner_rev": "1b63e6e5db5933d7be0a45da6e1129fe00262734",
diff --git a/build/fuchsia/dart.cmx b/build/fuchsia/dart.cmx
index 0bd0e668..45ba397 100644
--- a/build/fuchsia/dart.cmx
+++ b/build/fuchsia/dart.cmx
@@ -17,7 +17,6 @@
             "fuchsia.feedback.CrashReporter",
             "fuchsia.intl.PropertyProvider",
             "fuchsia.logger.LogSink",
-            "fuchsia.net.NameLookup",
             "fuchsia.net.name.Lookup",
             "fuchsia.posix.socket.Provider",
             "fuchsia.sysmem.Allocator",
diff --git a/docs/process/breaking-changes.md b/docs/process/breaking-changes.md
index cee804e..64a0df4 100644
--- a/docs/process/breaking-changes.md
+++ b/docs/process/breaking-changes.md
@@ -43,8 +43,7 @@
   not intended to be used as a mixin).
 
 Compatibility is only considered between stable releases (i.e. releases from the
-[Dart stable
-channel](https://dart.dev/tools/sdk/archive#stable-channel)).
+[Dart stable channel](https://dart.dev/tools/sdk/archive#stable-channel)).
 
 ## Breaking change notification
 
@@ -78,8 +77,8 @@
   * A request that developers may leave comments in the linked issue, if this
     breaking change poses a severe problem.
 
-* Once you have sent the announce email, please let 'frankyow@google.com` know
-as he will help drive the request through approval review process.
+Once you have sent the announce email, please let @devoncarew know in order
+to start the review and approval process.
 
 ### Step 2: Approval
 
@@ -88,6 +87,7 @@
 Adequate time must be allowed after step 1, at a minimum 24 hours during the
 work week for smaller impact changes, and proportionally longer for higher
 impact changes.
+
 ### Step 3: Execution
 
 If approved, the change may be made.
@@ -107,6 +107,7 @@
 
 * Reply to the original announcement email, and make a note that the change is
   has been rejected, with a quick summary of the rationale for that.
+
 ## Unexpected breaking changes & roll-back requests
 
 If a developer notices a breaking change has been made in the dev or stable
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/options.dart b/pkg/_fe_analyzer_shared/lib/src/util/options.dart
index bf26a66..7837865 100644
--- a/pkg/_fe_analyzer_shared/lib/src/util/options.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/util/options.dart
@@ -199,8 +199,8 @@
   }
 }
 
-class BoolValue extends ValueSpecification<bool> {
-  final bool defaultValue;
+class BoolValue extends ValueSpecification<bool?> {
+  final bool? defaultValue;
 
   const BoolValue(this.defaultValue);
 
diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_server/benchmark/benchmarks.dart
index 3816e5f..c319053 100644
--- a/pkg/analysis_server/benchmark/benchmarks.dart
+++ b/pkg/analysis_server/benchmark/benchmarks.dart
@@ -129,8 +129,10 @@
     var o = other as CompoundBenchMarkResult;
 
     var combined = CompoundBenchMarkResult(name);
-    var keys =
-        (<String>{}..addAll(results.keys)..addAll(o.results.keys)).toList();
+    var keys = (<String>{}
+          ..addAll(results.keys)
+          ..addAll(o.results.keys))
+        .toList();
 
     for (var key in keys) {
       combined.add(key, _combine(results[key], o.results[key]));
diff --git a/pkg/analysis_server/doc/tutorial/quick_fix.md b/pkg/analysis_server/doc/tutorial/quick_fix.md
index be98c06..3085dd9 100644
--- a/pkg/analysis_server/doc/tutorial/quick_fix.md
+++ b/pkg/analysis_server/doc/tutorial/quick_fix.md
@@ -1,21 +1,46 @@
 # Writing a quick fix
 
-This document outlines the basic steps for writing a quick fix.
+This document describes what a quick fix is and outlines the basic steps for
+writing a quick fix.
 
 ## Overview
 
 A quick fix is an automated code edit that's associated with a diagnostic. The
-intent is to automate the work required to fix the issue being reported. When
-the client asks for quick fixes, server computes the relevant diagnostics based
-on the cursor location. Then, for each diagnostic, it computes one or more
-fixes. The list of computed fixes is then returned to the client.
+intent is to automate the work required to fix the issue being reported by the
+diagnostic.
+
+There are three ways for users to apply quick fixes: single-site, fix-in-file,
+and bulk. We'll discuss how to implement the support for each of these usages in
+its own section below. The sections build on each other, so we recommend reading
+them in order.
 
 Through most of this document we'll use a simple example. We'll assume you wrote
 a new lint named `could_be_final` that flags fields that could be marked final
 but aren't, and that you're adding a fix for it. The fix will simply add the
 keyword `final` to the field declaration.
 
-## Describing the fix
+## Single-site fixes
+
+A single-site fix is one in which a single fix can be applied to a single
+location at which the associated diagnostic is reported.
+
+When the client asks for quick fixes, the analysis server computes the relevant
+diagnostics based on the cursor location. Then, for each diagnostic, it computes
+one or more fixes. It then returns the list of computed fixes to the client. The
+client typically allows the user to choose a single fix to be applied.
+
+### Design considerations
+
+Because quick fixes are computed on demand, they need to be computed quickly.
+(Some clients request quick fixes every time the user repositions the cursor.)
+That places a performance requirement on quick fixes, one that requires that the
+code to compute a quick fix can't perform any potentially lengthy computations
+such as searching all of the user's code or accessing the network. That, in
+turn, generally means that fixes can only support localized changes. They can
+add or remove text in the file in which the diagnostic was reported, but
+generally can't do more than that. 
+
+### Describing the fix
 
 Each fix has an instance of the class `FixKind` associated with it. The existing
 fixes for Dart diagnostics are defined in the class `DartFixKind`, fixes for the
@@ -28,9 +53,10 @@
 pattern seen in the existing fix kinds.
 
 The priority is used to order the list of fixes when presented to the user. The
-larger the value the closer to the top of the list it will appear. You should
-use one of the constants defined in `DartFixKindPriority` (typically
-`DartFixKindPriority.DEFAULT`), or add a new constant if there's a need for it.
+larger the value the closer to the top of the list it will appear. If you're
+implementing a fix for Dart files, you should use one of the constants defined
+in `DartFixKindPriority` (typically `DartFixKindPriority.DEFAULT`), or add a new
+constant if there's a need for it.
 
 The message is what will be displayed to the user by the client. This should be
 a sentence fragment (no terminating period) that would be appropriate as a label
@@ -49,10 +75,10 @@
 );
 ```
 
-## Implementing the fix, part 1
+### Implementing the fix, part 1
 
-To implement the fix you'll create a subclass of `CorrectionProducer`. The
-existing correction producers are in the directory
+To implement the fix you'll create a subclass of `CorrectionProducer`. Most of
+the existing correction producers are in the directory
 `analysis_server/lib/src/services/correction/dart`, so we'll start by creating
 a file named `add_final.dart` in that directory that contains the following:
 
@@ -87,7 +113,25 @@
 
 The static `newInstance` method will be used later in "Registering the fix".
 
-## Testing the fix
+There's another getter you might need to override. The message associated with
+the fix kind is actually a template that can be filled in at runtime. The
+placeholders in the message are denoted by integers inside curly braces (such as
+`{0}`). The integers are indexes into a list of replacement values, and the
+getter `fixArguments` returns the list of replacement values. The message we
+used above doesn't have any placeholders, but if we'd written the message as
+`"Add '{0}' modifier"`, then we could return the replacement values by
+implementing:
+
+```dart
+@override
+List<Object> get fixArguments => ['final'];
+```
+
+If you don't implement this getter, then the inherited getter will return an
+empty list. The number of elements in the list must match the largest index used
+in the message.
+
+### Testing the fix
 
 Before we look at implementing the `compute` method, we should probably write
 some tests. Even if you don't normally use a test-driven approach to coding, we
@@ -153,7 +197,7 @@
 fix to the file, and textually compare the results with the second piece of
 code.
 
-## Registering the fix
+### Registering the fix
 
 Before we can run the test, we need to register the correction producer so that
 it can be run.
@@ -187,7 +231,7 @@
 
 At this point you should be able to run the test and see it failing.
 
-## Implementing the fix, part 2
+### Implementing the fix, part 2
 
 We're now at a point where we can finish the implementation of the fix by
 implementing the `compute` method.
@@ -197,7 +241,7 @@
 construct the fix that will be sent back to the client.
 
 The first step in the implementation of any fix is to find the location in the
-AST where the diagnostic was reported and verify that all of the conditions on
+AST where the diagnostic was reported and verify that all the conditions on
 which the fix is predicated are valid. Assuming that the lint has been written
 and tested correctly, there's no need to test that the conditions that caused
 the lint rule to generate a diagnostic are still true. However, sometimes there
@@ -337,7 +381,7 @@
 diagnostic's error code. Second, the test class would be a subclass of
 `FixProcessorTest` and wouldn't specify the name of the lint.
 
-## Multi-fix producers
+### Multi-fix producers
 
 We skipped over the map named `nonLintMultiProducerMap` earlier, promising that
 we'd return to it later. You'll probably never have a need for it, but in case
@@ -348,18 +392,172 @@
 you need to use a single correction producer to produce multiple fixes. This is
 generally only needed when you can't know in advance the maximum number of
 fixes that might need to be produced. For example, if there is an undefined
-identifier and it might be possible to add an import to fix the problem, there's
-no way to know in advance how many different libraries might define the name.
+identifier, and it might be possible to add an import to fix the problem,
+there's no way to know in advance how many libraries might define the name, but
+we'd want to proposing adding an import for each such library.
 
 If you are able to enumerate the possible fixes ahead of time, then you're
 better off to create one subclass of `CorrectionProducer` for each of the fixes.
 For example, taking the case of an undefined identifier again, another way to
 fix the problem is to add a declaration of the name. There are a finite number
 of kinds of declarations a user might want: class, mixin, variable, etc. Even
-though some of the declarations might not make sense because of how the
+though some kinds of declarations might not make sense because of how the
 identifier is being used, it's better to have a separate correction producer for
 each kind of declaration and have each one determine whether to generate a fix.
 
 And, we don't currently have support for associating a `MultiCorrectionProducer`
 with a lint, so if you're writing fixes for a lint then this option isn't
 available to you.
+
+## Fix-in-file fixes
+
+A fix-in-file fix is one in which a single fix can be applied that will fix all
+the locations within a single file at which a single kind of diagnostic has been
+reported.
+
+When the client asks for quick fixes, in addition to computing the single-site
+fixes, the analysis server looks to see whether any of the diagnostics at the
+cursor location are also reported at other places in the same file. If any of
+them are, and if the fix supports being used as a fix-in-file fix, then the
+analysis server will attempt to apply the fix in each of those locations and to
+build another fix that will apply edits to all the locations at which the
+diagnostic was reported.
+
+The fix-in-file fix will only be shown when there is more than one diagnostic
+for which your fix is able to produce an edit. For example, if there are three
+fields that could all be made final, but the fix only produces an edit for one
+of those places (maybe because the other two are in lists of fields), then the
+fix-in-file fix won't be shown.
+
+If a fix-in-file fix can be created then it will be returned along with any of
+the single-site fixes computed at the cursor location.
+
+In other words, most of the support for doing this comes for free; the only
+requirement is that you declare that your fix can be used this way.
+
+### Design considerations
+
+So why isn't this the default? Because it isn't always appropriate to support a
+fix-in-file fix. We believe that it's better for users to sometimes not have a
+fix-in-file fix that would have been appropriate than it is for them to have one
+that isn't appropriate. While there isn't a complete list of situations in which
+a fix-in-file fix isn't appropriate, let's look at a couple of the cases to
+consider.
+
+First, some fixes, by nature, should only be applied after due consideration.
+For example, there's a fix that will create a class declaration in response to
+seeing a reference to an undefined name. While it's useful to have a way to
+declare the name, how the name should be defined depends on the user's intent,
+so it probably isn't appropriate to create class declarations for all undefined
+identifiers without considering each case.
+
+Second, some fixes cause changes that impact other diagnostics of the same kind.
+In such a case the automated support for fix-in-file fixes might well cause an
+invalid edit to be produced, and fixes should never corrupt the user's code. For
+example, there's a fix to add `const ` before a constructor invocation. If some
+arguments to the invocation are also constructor invocations then the framework
+could add an unnecessary keyword, which would be undesirable.
+
+### Enabling the fix
+
+If it _is_ appropriate for your fix to be used as a fix-in-file fix, then there
+are two things you'll need to do to enable the fix-in-file support. The first
+step is to define another `FixKind` (in the same file in which you defined the
+first fix kind) that looks something like the following:
+
+```dart
+static const ADD_FINAL_MULTI = FixKind(
+  'dart.fix.add.final.multi',
+  DartFixKindPriority.IN_FILE,
+  "Add 'final' modifier everywhere in file",
+);
+```
+
+This is different than the original fix kind in the following ways:
+- both the name of the field and the identifier have a suffix added,
+- the priority is lower than the single location fixes, and
+- the message is worded in a way that makes it clear that multiple locations
+  will be changed.
+
+The second step is to implement a couple of additional getters in your
+`CorrectionProducer`. First, let the framework know that your fix can be used in
+this way:
+
+```dart
+@override
+bool get canBeAppliedToFile => true;
+```
+
+Then specify the fix kind associated with the fix-in-file fix:
+
+```dart
+@override
+FixKind get multiFixKind => DartFixKind.ADD_FINAL_MULTI;
+```
+
+And, if the message takes arguments (which the example above doesn't), provide
+them using something like the following:
+
+```dart
+@override
+List<Object> get multiFixArguments => ['first', 'second'];
+```
+
+That's it; the fix-in-file fix should now appear.
+
+You should, of course, write tests for the fix. Those tests will be similar in
+structure to those written to test the single application use case, but will be
+in a subclass of `FixInFileProcessorTest`. They should be added to the test file
+you created earlier for the single-site fixes
+(`analysis_server/test/src/services/correction/fix/add_final_test.dart`).
+
+The most important distinction between the two is that for the fix-in-file tests
+you'll need to ensure that there are at least two diagnostics produced for the
+test code. If possible, those two diagnostics ought to be overlapping in terms
+of the region of code impacted by the fix. For example, if the fix reverses the
+order of two arguments in an argument list (such as by converting `m(a, b)` to
+`m(b, a)`), then make one of the arguments be an invocation of `m` whose
+arguments would also need to be swapped (such as `m(a, m(b, c)`).
+
+## Bulk fixes
+
+A bulk fix is one in which all of the fixes for all of the diagnostics that have
+been reported in one or more files, such as an entire package, are applied in a
+single operation. This kind of fix is currently available through the `dart fix`
+command-line tool.
+
+A bulk fix is computed in a manner similar to the way a fix-in-file fix is
+computed except that all of the diagnostics across all of the specified files
+are iterated over. Unlike the fix-in-file fixes, when bulk fixes are requested
+only the one bulk fix that was computed is returned.
+
+### Design considerations
+
+The considerations for why you might not want to enable the fix for bulk
+application using `dart fix` include all of those given above for fix-in-file
+fixes, but there are a couple of other considerations to keep in mind.
+
+First, `dart fix` is a command-line tool, so unlike changes made in an editor
+there is no support for rolling back the changes it makes (other than whatever
+support the user has from their source control system).
+
+Second, the tool applies fixes to more than just a single diagnostic, so there
+are likely to be more edits applied. That means that there's an even higher
+probability of having conflicts between edits. The framework handles some kinds
+of conflicts automatically, but can't handle everything.
+
+### Enabling the fix
+
+If you decide that you do want your fix to be supported by `dart fix`, the only
+change that's required is to implement the following getter:
+
+```dart
+@override
+bool get canBeAppliedInBulk => true;
+```
+
+You should, of course, write tests for bulk application of the fix. Those tests
+will be identical in nature to those written to test the fix-in-file use case,
+but will be in a subclass of `BulkFixProcessorTest`. They should also be added
+to the test file you created earlier for the single-site and fix-in-file fixes
+(`analysis_server/test/src/services/correction/fix/add_final_test.dart`).
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 71e8148..6ff6528 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -61,7 +61,8 @@
     return null;
   }
 
-  CheckNameResponse? checkNewName(String filePath, int line, int column, String name) {
+  CheckNameResponse? checkNewName(
+      String filePath, int line, int column, String name) {
     var resolvedUnit = _fileResolver.resolve(path: filePath);
     var lineInfo = resolvedUnit.lineInfo;
     var offset = lineInfo.getOffsetOfLine(line) + column;
@@ -81,7 +82,7 @@
     } else if (element is FunctionElement) {
       status = validateFunctionName(name);
     }
-    if (status == null){
+    if (status == null) {
       return null;
     }
     return CheckNameResponse(lineInfo, status, element.displayName);
diff --git a/pkg/analysis_server/lib/src/lsp/client_configuration.dart b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
index 9093676..d5786cc 100644
--- a/pkg/analysis_server/lib/src/lsp/client_configuration.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
@@ -124,8 +124,22 @@
   bool get previewCommitCharacters =>
       _settings['previewCommitCharacters'] as bool? ?? false;
 
-  /// Whether diagnostics should be generated for TODO comments.
-  bool get showTodos => _settings['showTodos'] as bool? ?? false;
+  /// Whether diagnostics should be generated for all TODO comments.
+  bool get showAllTodos =>
+      _settings['showTodos'] is bool ? _settings['showTodos'] as bool : false;
+
+  /// A specific set of TODO comments that should generate diagnostics.
+  ///
+  /// Codes are all forced UPPERCASE regardless of what the client supplies.
+  ///
+  /// [showAllTodos] should be checked first, as this will return an empty
+  /// set if `showTodos` is a boolean.
+  Set<String> get showTodoTypes => _settings['showTodos'] is List
+      ? (_settings['showTodos'] as List)
+          .cast<String>()
+          .map((kind) => kind.toUpperCase())
+          .toSet()
+      : const {};
 }
 
 /// Wraps the client (editor) configuration for a specific resource.
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
index 1195c9b..68e112e 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
@@ -56,13 +56,17 @@
       if (hover.isDeprecated ?? false) {
         content.write('(deprecated) ');
       }
-      content..writeln(hover.elementDescription)..writeln('```');
+      content
+        ..writeln(hover.elementDescription)
+        ..writeln('```');
     }
 
     // Source library.
     final containingLibraryName = hover.containingLibraryName;
     if (containingLibraryName != null && containingLibraryName.isNotEmpty) {
-      content..writeln('*$containingLibraryName*')..writeln();
+      content
+        ..writeln('*$containingLibraryName*')
+        ..writeln();
     }
 
     // Doc comments.
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 2dcd219..7098d09 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -920,7 +920,14 @@
     }
   }
 
-  bool _shouldSendError(protocol.AnalysisError error) =>
-      error.code != ErrorType.TODO.name.toLowerCase() ||
-      analysisServer.clientConfiguration.global.showTodos;
+  bool _shouldSendError(protocol.AnalysisError error) {
+    if (error.type.name != ErrorType.TODO.name) {
+      return true;
+    }
+    if (analysisServer.clientConfiguration.global.showAllTodos) {
+      return true;
+    }
+    return analysisServer.clientConfiguration.global.showTodoTypes
+        .contains(error.code.toUpperCase());
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
index d674907..8ec13f6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -30,6 +31,22 @@
       return;
     }
 
+    DartType? getFunctionReturnType() {
+      var parent = body.parent;
+      if (parent is MethodDeclaration) {
+        return parent.declaredElement?.returnType;
+      } else if (parent is ConstructorDeclaration) {
+        return parent.declaredElement?.returnType;
+      } else if (parent is FunctionExpression) {
+        return parent.declaredElement?.returnType;
+      }
+      return null;
+    }
+
+    var functionReturnType = getFunctionReturnType();
+    if (functionReturnType == null) {
+      return;
+    }
     var returnValueType = returnValue.typeOrThrow;
     var returnValueCode = utils.getNodeText(returnValue);
     // prepare prefix
@@ -42,7 +59,9 @@
           builder.write('async ');
         }
         builder.write('{$eol$prefix$indent');
-        if (!returnValueType.isVoid && !returnValueType.isBottom) {
+        if (!returnValueType.isVoid &&
+            !returnValueType.isBottom &&
+            !functionReturnType.isVoid) {
           builder.write('return ');
         }
         builder.write(returnValueCode);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
index abe052d..dee927b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
@@ -65,8 +65,7 @@
 
       var indent = utils.getNodePrefix(statement);
       var name = variable.name.name;
-      builder.addSimpleInsertion(
-          variable.name.end, ';' + eol + indent + name);
+      builder.addSimpleInsertion(variable.name.end, ';' + eol + indent + name);
     });
   }
 
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 257fa24..ced0ca3 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -1379,7 +1379,9 @@
       buffer.write(e.name);
     }
     if (enclosingElt is ExecutableElement) {
-      buffer..write('@')..write(e.nameOffset - enclosingElt.nameOffset);
+      buffer
+        ..write('@')
+        ..write(e.nameOffset - enclosingElt.nameOffset);
     }
     return buffer;
   }
@@ -1394,6 +1396,8 @@
     // It is legal to have a named constructor with the same name as a type
     // parameter.  So we distinguish them by using '.' between the class (or
     // typedef) name and the type parameter name.
-    return e.enclosingElement!.accept(this)!..write('.')..write(e.name);
+    return e.enclosingElement!.accept(this)!
+      ..write('.')
+      ..write(e.name);
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index ebb50c0..3e9ead3 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -658,7 +658,8 @@
     var originalSource = utils.getText(range.offset, range.length);
     var pattern = _SourcePattern();
     var replaceEdits = <SourceEdit>[];
-    resolveResult.unit.accept(_GetSourcePatternVisitor(range, pattern, replaceEdits));
+    resolveResult.unit
+        .accept(_GetSourcePatternVisitor(range, pattern, replaceEdits));
     replaceEdits = replaceEdits.reversed.toList();
     var source = SourceEdit.applySequence(originalSource, replaceEdits);
     pattern.normalizedSource =
diff --git a/pkg/analysis_server/test/client/impl/abstract_client.dart b/pkg/analysis_server/test/client/impl/abstract_client.dart
index ac1a33c..caa0386 100644
--- a/pkg/analysis_server/test/client/impl/abstract_client.dart
+++ b/pkg/analysis_server/test/client/impl/abstract_client.dart
@@ -44,7 +44,7 @@
     required this.testFilePath,
     required String sdkPath,
     required this.serverOptions,
-  })   : serverChannel = MockServerChannel(),
+  })  : serverChannel = MockServerChannel(),
         pluginManager = TestPluginManager() {
     server = createAnalysisServer(sdkPath);
     var notificationStream = serverChannel.notificationController.stream;
diff --git a/pkg/analysis_server/test/client/impl/completion_driver.dart b/pkg/analysis_server/test/client/impl/completion_driver.dart
index 48a7ef0..60083d6 100644
--- a/pkg/analysis_server/test/client/impl/completion_driver.dart
+++ b/pkg/analysis_server/test/client/impl/completion_driver.dart
@@ -82,7 +82,7 @@
     required MemoryResourceProvider resourceProvider,
     required String projectPath,
     required String testFilePath,
-  })   : _resourceProvider = resourceProvider,
+  })  : _resourceProvider = resourceProvider,
         super(
             serverOptions: serverOptions ?? AnalysisServerOptions(),
             projectPath: resourceProvider.convertPath(projectPath),
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index 0e63271..04c6b0f 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -192,14 +192,18 @@
       if (badPoints.isNotEmpty) {
         err.write('No test location for tests:');
         for (var ch in badPoints) {
-          err..write(' ')..write(ch);
+          err
+            ..write(' ')
+            ..write(ch);
         }
         err.write(' ');
       }
       if (badResults.isNotEmpty) {
         err.write('No results for tests:');
         for (var ch in badResults) {
-          err..write(' ')..write(ch);
+          err
+            ..write(' ')
+            ..write(ch);
         }
       }
       throw StateError(err.toString());
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 96c7f5a..fc6dffe 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -378,10 +378,11 @@
     }
   }
 
-  Future<void> test_todos() async {
+  Future<void> test_todos_boolean() async {
     // TODOs only show up if there's also some code in the file.
     const contents = '''
     // TODO: This
+    // FIXME: This
     String a = "";
     ''';
     newFile(mainFilePath, content: contents);
@@ -394,7 +395,7 @@
       {'showTodos': true},
     );
     final initialDiagnostics = await firstDiagnosticsUpdate;
-    expect(initialDiagnostics, hasLength(1));
+    expect(initialDiagnostics, hasLength(2));
   }
 
   Future<void> test_todos_disabled() async {
@@ -439,4 +440,33 @@
     final updatedDiagnostics = await secondDiagnosticsUpdate;
     expect(updatedDiagnostics, hasLength(1));
   }
+
+  Future<void> test_todos_specific() async {
+    // TODOs only show up if there's also some code in the file.
+    const contents = '''
+    // TODO: This
+    // HACK: This
+    // FIXME: This
+    String a = "";
+    ''';
+    newFile(mainFilePath, content: contents);
+
+    final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
+    await provideConfig(
+      () => initialize(
+          workspaceCapabilities:
+              withConfigurationSupport(emptyWorkspaceClientCapabilities)),
+      {
+        // Include both casings, since this comes from the user we should handle
+        // either.
+        'showTodos': ['TODO', 'fixme']
+      },
+    );
+    final initialDiagnostics = (await firstDiagnosticsUpdate)!;
+    expect(initialDiagnostics, hasLength(2));
+    expect(
+      initialDiagnostics.map((e) => e.code!),
+      containsAll(['todo', 'fixme']),
+    );
+  }
 }
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
index 3a72bfd..303d1e8 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
@@ -162,6 +162,5 @@
 
 class Builder {
   final WidgetBuilder builder;
-  const Builder(
-      {Key key, @required this.builder});
+  const Builder({Key key, @required this.builder});
 }
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
index fc933c1..d524c70 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
@@ -146,7 +146,6 @@
     await assertNoAssistAt('{}');
   }
 
-
   Future<void> test_syncStar() async {
     await resolveTestCode('''
 Iterable<String> f() sync* {}
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
index db04588..c135fc2 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
@@ -163,4 +163,23 @@
 }
 ''');
   }
+
+  Future<void> test_void() async {
+    await resolveTestCode('''
+class C {
+  String? _s;
+
+  set s(String s) => _s = s;
+}
+''');
+    await assertHasAssistAt('=>', '''
+class C {
+  String? _s;
+
+  set s(String s) {
+    _s = s;
+  }
+}
+''');
+  }
 }
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 d3c41f7..da085a6 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
@@ -90,7 +90,8 @@
   }
 }
 ''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
     });
   }
 
@@ -130,7 +131,8 @@
   B m() => this;
 }
 ''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
     });
   }
 
@@ -204,7 +206,8 @@
   return 2.4;
 }
 ''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
     });
   }
 
@@ -229,7 +232,8 @@
   }
 }
 ''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
     });
   }
 }
diff --git a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
index 5698c0b..0aecc40 100644
--- a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
+++ b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
@@ -861,7 +861,9 @@
   } else if (type is MapType) {
     buffer.write('($valueCode is Map');
     if (fullDartType != 'Object?') {
-      buffer..write(' && (')..write('$valueCode.keys.every((item) => ');
+      buffer
+        ..write(' && (')
+        ..write('$valueCode.keys.every((item) => ');
       _writeTypeCheckCondition(
           buffer, interface, 'item', type.indexType, reporter);
       buffer.write('&& $valueCode.values.every((item) => ');
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 4a5235a..d11b587 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -890,6 +890,9 @@
   StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
   StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION,
   TodoCode.TODO,
+  TodoCode.FIXME,
+  TodoCode.HACK,
+  TodoCode.UNDONE,
 ];
 
 /// The lazy initialized map from [ErrorCode.uniqueName] to the [ErrorCode]
diff --git a/pkg/analyzer/lib/instrumentation/service.dart b/pkg/analyzer/lib/instrumentation/service.dart
index 617644f..4269a99 100644
--- a/pkg/analyzer/lib/instrumentation/service.dart
+++ b/pkg/analyzer/lib/instrumentation/service.dart
@@ -89,6 +89,6 @@
   InstrumentationServiceAttachment.string({
     required String id,
     required String value,
-  })   : id = id,
+  })  : id = id,
         stringValue = value;
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
index 9f3a4db..5a9400a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
@@ -28,7 +28,7 @@
     required FeatureSet packageDefaultFeatureSet,
     required Version nonPackageDefaultLanguageVersion,
     required FeatureSet nonPackageDefaultFeatureSet,
-  })   : _sdkLanguageVersion = sdkLanguageVersion,
+  })  : _sdkLanguageVersion = sdkLanguageVersion,
         _allowedExperiments = allowedExperiments,
         _resourceProvider = resourceProvider,
         _packages = packages,
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 3050f37..af436f5 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -428,8 +428,10 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_expression)..add(asOperator)..add(_type);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_expression)
+    ..add(asOperator)
+    ..add(_type);
 
   @override
   Token get endToken => _type.endToken;
@@ -641,8 +643,10 @@
   Token get beginToken => _leftHandSide.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_leftHandSide)..add(operator)..add(_rightHandSide);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_leftHandSide)
+    ..add(operator)
+    ..add(_rightHandSide);
 
   @override
   Token get endToken => _rightHandSide.endToken;
@@ -838,8 +842,9 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(awaitKeyword)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(awaitKeyword)
+    ..add(_expression);
 
   @override
   Token get endToken => _expression.endToken;
@@ -897,8 +902,10 @@
   Token get beginToken => _leftOperand.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_leftOperand)..add(operator)..add(_rightOperand);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_leftOperand)
+    ..add(operator)
+    ..add(_rightOperand);
 
   @override
   Token get endToken => _rightOperand.endToken;
@@ -973,8 +980,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(keyword)..add(star)..add(_block);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(keyword)
+    ..add(star)
+    ..add(_block);
 
   @override
   Token get endToken => _block.endToken;
@@ -1115,8 +1124,10 @@
   Token get beginToken => breakKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(breakKeyword)..add(_label)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(breakKeyword)
+    ..add(_label)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -1864,8 +1875,9 @@
   Token get beginToken => newKeyword ?? _identifier.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(newKeyword)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(newKeyword)
+    ..add(_identifier);
 
   @override
   Token get endToken => _identifier.endToken;
@@ -1985,7 +1997,9 @@
   Iterable<SyntacticEntity> get childEntities {
     ChildEntities result = ChildEntities()..add(_scriptTag);
     if (_directivesAreBeforeDeclarations) {
-      result..addAll(_directives)..addAll(_declarations);
+      result
+        ..addAll(_directives)
+        ..addAll(_declarations);
     } else {
       result.addAll(sortedDirectivesAndDeclarations);
     }
@@ -2604,8 +2618,10 @@
   Token get beginToken => _type.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_type)..add(period)..add(_name);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_type)
+    ..add(period)
+    ..add(_name);
 
   @override
   Token get endToken {
@@ -2718,8 +2734,10 @@
   Token get beginToken => continueKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(continueKeyword)..add(_label)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(continueKeyword)
+    ..add(_label)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -2781,8 +2799,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(keyword)..add(_type)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(keyword)
+    ..add(_type)
+    ..add(_identifier);
 
   @override
   LocalVariableElement? get declaredElement {
@@ -2883,8 +2903,10 @@
   Token get beginToken => _parameter.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_parameter)..add(separator)..add(_defaultValue);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_parameter)
+    ..add(separator)
+    ..add(_defaultValue);
 
   @override
   Token? get covariantKeyword => null;
@@ -3566,8 +3588,9 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_expression)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_expression)
+    ..add(semicolon);
 
   @override
   Token get endToken {
@@ -3618,8 +3641,9 @@
   Token get beginToken => extendsKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(extendsKeyword)..add(_superclass);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(extendsKeyword)
+    ..add(_superclass);
 
   @override
   Token get endToken => _superclass.endToken;
@@ -3899,8 +3923,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(staticKeyword)..add(_fieldList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(staticKeyword)
+    ..add(_fieldList)
+    ..add(semicolon);
 
   @override
   Element? get declaredElement => null;
@@ -4092,8 +4118,9 @@
   Token get beginToken => inKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(inKeyword)..add(_iterable);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(inKeyword)
+    ..add(_iterable);
 
   @override
   Token get endToken => _iterable.endToken;
@@ -4393,7 +4420,9 @@
       }
       result.add(parameter);
     }
-    return result..add(rightDelimiter)..add(rightParenthesis);
+    return result
+      ..add(rightDelimiter)
+      ..add(rightParenthesis);
   }
 
   @override
@@ -4868,8 +4897,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_typeParameters)..add(_parameters)..add(_body);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_typeParameters)
+    ..add(_parameters)
+    ..add(_body);
 
   @override
   Token get endToken {
@@ -4934,8 +4965,9 @@
   Token get beginToken => _function.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_function)..add(_argumentList);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_function)
+    ..add(_argumentList);
 
   @override
   Token get endToken => _argumentList.endToken;
@@ -4989,8 +5021,9 @@
   Token get beginToken => function.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(function)..add(typeArguments);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(function)
+    ..add(typeArguments);
 
   @override
   Token get endToken => typeArguments?.endToken ?? function.endToken;
@@ -5167,8 +5200,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_returnType)..add(identifier)..add(parameters);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_returnType)
+    ..add(identifier)
+    ..add(parameters);
 
   @override
   Token get endToken => question ?? _parameters.endToken;
@@ -6208,8 +6243,10 @@
   Token get beginToken => leftBracket;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(leftBracket)..add(_expression)..add(rightBracket);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(leftBracket)
+    ..add(_expression)
+    ..add(rightBracket);
 
   @override
   Token get endToken => rightBracket ?? _expression.endToken;
@@ -6462,8 +6499,9 @@
   Token get beginToken => _label.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_label)..add(colon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_label)
+    ..add(colon);
 
   @override
   Token get endToken => colon;
@@ -6510,8 +6548,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(libraryKeyword)..add(_name)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(libraryKeyword)
+    ..add(_name)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -6725,8 +6765,10 @@
   Token get beginToken => _key.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_key)..add(separator)..add(_value);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_key)
+    ..add(separator)
+    ..add(_value);
 
   @override
   Token get endToken => _value.endToken;
@@ -7213,8 +7255,9 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_name)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_name)
+    ..add(_expression);
 
   @override
   ParameterElement? get element {
@@ -7337,8 +7380,9 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(nativeKeyword)..add(_name);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(nativeKeyword)
+    ..add(_name);
 
   @override
   Token get endToken {
@@ -7391,8 +7435,10 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(nativeKeyword)..add(_stringLiteral)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(nativeKeyword)
+    ..add(_stringLiteral)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -7612,7 +7658,9 @@
     } else {
       result.addAll(sortedCommentAndAnnotations);
     }
-    result..add(requiredKeyword)..add(covariantKeyword);
+    result
+      ..add(requiredKeyword)
+      ..add(covariantKeyword);
     return result;
   }
 
@@ -7828,8 +7876,10 @@
       : super(comment, metadata, partUri);
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(partKeyword)..add(_uri)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(partKeyword)
+    ..add(_uri)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -7959,8 +8009,9 @@
   Token get beginToken => _operand.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_operand)..add(operator);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_operand)
+    ..add(operator);
 
   @override
   Token get endToken => operator;
@@ -8032,8 +8083,10 @@
   Token get beginToken => _prefix.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_prefix)..add(period)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_prefix)
+    ..add(period)
+    ..add(_identifier);
 
   @override
   Token get endToken => _identifier.endToken;
@@ -8116,8 +8169,9 @@
   Token get beginToken => operator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(operator)..add(_operand);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(operator)
+    ..add(_operand);
 
   @override
   Token get endToken => _operand.endToken;
@@ -8199,8 +8253,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_target)..add(operator)..add(_propertyName);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_target)
+    ..add(operator)
+    ..add(_propertyName);
 
   @override
   Token get endToken => _propertyName.endToken;
@@ -8414,8 +8470,10 @@
   Token get beginToken => returnKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(returnKeyword)..add(_expression)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(returnKeyword)
+    ..add(_expression)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -8655,8 +8713,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(keyword)..add(_type)..add(identifier);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(keyword)
+    ..add(_type)
+    ..add(identifier);
 
   @override
   Token get endToken => identifier?.endToken ?? type!.endToken;
@@ -8996,8 +9056,9 @@
   Token get beginToken => spreadOperator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(spreadOperator)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(spreadOperator)
+    ..add(_expression);
 
   @override
   Token get endToken => _expression.endToken;
@@ -9659,8 +9720,9 @@
   Token get beginToken => throwKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(throwKeyword)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(throwKeyword)
+    ..add(_expression);
 
   @override
   Token get endToken {
@@ -9717,8 +9779,9 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_variableList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_variableList)
+    ..add(semicolon);
 
   @override
   Element? get declaredElement => null;
@@ -9957,8 +10020,9 @@
     _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?);
   }
 
-  ChildEntities get _childEntities =>
-      ChildEntities()..add(constKeyword)..add(_typeArguments);
+  ChildEntities get _childEntities => ChildEntities()
+    ..add(constKeyword)
+    ..add(_typeArguments);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -10044,8 +10108,10 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_name)..add(_typeArguments)..add(question);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_name)
+    ..add(_typeArguments)
+    ..add(question);
 
   @override
   Token get endToken => question ?? _typeArguments?.endToken ?? _name.endToken;
@@ -10128,8 +10194,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_name)..add(extendsKeyword)..add(_bound);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_name)
+    ..add(extendsKeyword)
+    ..add(_bound);
 
   @override
   TypeParameterElement? get declaredElement =>
@@ -10345,8 +10413,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_name)..add(equals)..add(_initializer);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_name)
+    ..add(equals)
+    ..add(_initializer);
 
   @override
   VariableElement? get declaredElement =>
@@ -10538,8 +10608,9 @@
   Token get beginToken => _variableList.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_variableList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_variableList)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
diff --git a/pkg/analyzer/lib/src/dart/error/todo_codes.dart b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
index ef128be..6b3d5c9 100644
--- a/pkg/analyzer/lib/src/dart/error/todo_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
@@ -14,11 +14,33 @@
  */
 class TodoCode extends ErrorCode {
   /**
-   * The single enum of TodoCode.
+   * A standard TODO comment marked as TODO.
    */
   static const TodoCode TODO = TodoCode('TODO');
 
   /**
+   * A TODO comment marked as FIXME.
+   */
+  static const TodoCode FIXME = TodoCode('FIXME');
+
+  /**
+   * A TODO comment marked as HACK.
+   */
+  static const TodoCode HACK = TodoCode('HACK');
+
+  /**
+   * A TODO comment marked as UNDONE.
+   */
+  static const TodoCode UNDONE = TodoCode('UNDONE');
+
+  static const _codes = {
+    'TODO': TODO,
+    'FIXME': FIXME,
+    'HACK': HACK,
+    'UNDONE': UNDONE,
+  };
+
+  /**
    * This matches the two common Dart task styles
    *
    * * TODO:
@@ -37,9 +59,16 @@
    *    * TODO(username): This line is
    *    *  wrapped onto the next line
    *    */
+   *
+   * The matched kind of the TODO (TODO, FIXME, etc.) is returned in named
+   * captures of "kind1", "kind2" (since it is not possible to reuse a name
+   * across different parts of the regex).
    */
   static RegExp TODO_REGEX = RegExp(
-      "([\\s/\\*])((TODO[^\\w\\d][^\\r\\n]*(?:\\n\\s*\\*  [^\\r\\n]*)*)|(TODO:?\$))");
+      '([\\s/\\*])(((?<kind1>$_TODO_KIND_PATTERN)[^\\w\\d][^\\r\\n]*(?:\\n\\s*\\*  [^\\r\\n]*)*)'
+      '|((?<kind2>$_TODO_KIND_PATTERN):?\$))');
+
+  static final _TODO_KIND_PATTERN = _codes.keys.join('|');
 
   /**
    * Initialize a newly created error code to have the given [name].
@@ -56,4 +85,7 @@
 
   @override
   ErrorType get type => ErrorType.TODO;
+
+  /// Returns the TodoCode for [kind], falling back to [TODO].
+  static TodoCode forKind(String kind) => _codes[kind] ?? TODO;
 }
diff --git a/pkg/analyzer/lib/src/dart/micro/library_graph.dart b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
index 0947549..cbee620 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
@@ -347,7 +347,9 @@
       ..addAll(importedFiles)
       ..addAll(exportedFiles)
       ..addAll(partedFiles);
-    directReferencedLibraries..addAll(importedFiles)..addAll(exportedFiles);
+    directReferencedLibraries
+      ..addAll(importedFiles)
+      ..addAll(exportedFiles);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
index beb8e4f..d243983 100644
--- a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
@@ -130,8 +130,7 @@
     }
 
     if (loopVariable != null) {
-      _resolver.flowAnalysis.flow
-          ?.declare(loopVariable.declaredElement!, true);
+      _resolver.flowAnalysis.flow?.declare(loopVariable.declaredElement!, true);
     }
 
     _resolver.flowAnalysis.flow?.forEach_bodyBegin(node);
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
index 599eda3..be1eec6 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
@@ -23,7 +23,7 @@
   FunctionExpressionResolver({
     required ResolverVisitor resolver,
     required MigrationResolutionHooks? migrationResolutionHooks,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _migrationResolutionHooks = migrationResolutionHooks,
         _inferenceHelper = resolver.inferenceHelper;
 
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 2927a58..376a9d7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
@@ -27,7 +27,7 @@
 
   PostfixExpressionResolver({
     required ResolverVisitor resolver,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _typePropertyResolver = resolver.typePropertyResolver,
         _inferenceHelper = resolver.inferenceHelper,
         _assignmentShared = AssignmentExpressionShared(
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 4f5a2d4..87aa6c6 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
@@ -27,7 +27,7 @@
 
   PrefixExpressionResolver({
     required ResolverVisitor resolver,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _typePropertyResolver = resolver.typePropertyResolver,
         _inferenceHelper = resolver.inferenceHelper,
         _assignmentShared = AssignmentExpressionShared(
@@ -210,8 +210,7 @@
         if (operand is SimpleIdentifier) {
           var element = operand.staticElement;
           if (element is PromotableElement) {
-            _resolver.flowAnalysis.flow
-                ?.write(node, element, staticType, null);
+            _resolver.flowAnalysis.flow?.write(node, element, staticType, null);
           }
         }
       }
diff --git a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
index b1a079a..2978a39 100644
--- a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
+++ b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
@@ -32,7 +32,7 @@
   ConstructorFieldsVerifier({
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeSystem = typeSystem,
+  })  : _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
   void enterClass(ClassDeclaration node) {
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
index 7970e6f..e16cad4 100644
--- a/pkg/analyzer/lib/src/error/correct_override.dart
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -26,7 +26,7 @@
   CorrectOverrideHelper({
     required LibraryElementImpl library,
     required ExecutableElement thisMember,
-  })   : _library = library,
+  })  : _library = library,
         _typeSystem = library.typeSystem,
         _thisMember = thisMember {
     _computeThisTypeForSubtype();
@@ -106,7 +106,7 @@
 
   CovariantParametersVerifier({
     required ExecutableElement thisMember,
-  })   : _session = thisMember.library.session as AnalysisSessionImpl,
+  })  : _session = thisMember.library.session as AnalysisSessionImpl,
         _typeSystem = thisMember.library.typeSystem as TypeSystemImpl,
         _thisMember = thisMember;
 
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 933fe37..76860af 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -21,7 +21,7 @@
   GetterSetterTypesVerifier({
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeSystem = typeSystem,
+  })  : _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
   ErrorCode get _errorCode {
diff --git a/pkg/analyzer/lib/src/error/return_type_verifier.dart b/pkg/analyzer/lib/src/error/return_type_verifier.dart
index b222820..a4e5fe9 100644
--- a/pkg/analyzer/lib/src/error/return_type_verifier.dart
+++ b/pkg/analyzer/lib/src/error/return_type_verifier.dart
@@ -26,7 +26,7 @@
     required TypeProviderImpl typeProvider,
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeProvider = typeProvider,
+  })  : _typeProvider = typeProvider,
         _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
diff --git a/pkg/analyzer/lib/src/error/todo_finder.dart b/pkg/analyzer/lib/src/error/todo_finder.dart
index f3e536c..cbb1d38 100644
--- a/pkg/analyzer/lib/src/error/todo_finder.dart
+++ b/pkg/analyzer/lib/src/error/todo_finder.dart
@@ -65,7 +65,7 @@
   /// Returns the next comment token to begin searching from (skipping over
   /// any continuations).
   Token? _scrapeTodoComment(Token commentToken, LineInfo lineInfo) {
-    Iterable<Match> matches =
+    Iterable<RegExpMatch> matches =
         TodoCode.TODO_REGEX.allMatches(commentToken.lexeme);
     // Track the comment that will be returned for looking for the next todo.
     // This will be moved along if additional comments are consumed by multiline
@@ -73,11 +73,12 @@
     var nextComment = commentToken.next;
     final commentLocation = lineInfo.getLocation(commentToken.offset);
 
-    for (Match match in matches) {
+    for (RegExpMatch match in matches) {
       int offset = commentToken.offset + match.start + match.group(1)!.length;
       int column =
           commentLocation.columnNumber + match.start + match.group(1)!.length;
       String todoText = match.group(2)!;
+      String todoKind = match.namedGroup('kind1') ?? match.namedGroup('kind2')!;
       int end = offset + todoText.length;
 
       if (commentToken.type == TokenType.MULTI_LINE_COMMENT) {
@@ -126,7 +127,7 @@
       }
 
       _errorReporter.reportErrorForOffset(
-          TodoCode.TODO, offset, end - offset, [todoText]);
+          TodoCode.forKind(todoKind), offset, end - offset, [todoText]);
     }
 
     return nextComment;
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
index cf6fd54..18fe9b0 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
@@ -16,8 +16,7 @@
 @reflectiveTest
 class FfiArrayMultiNonPositiveInput extends PubPackageResolutionTest {
   test_multi() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -32,8 +31,7 @@
   }
 
   test_negative() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -48,8 +46,7 @@
   }
 
   test_non_error() async {
-    await assertNoErrorsInCode(
-'''
+    await assertNoErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -62,8 +59,7 @@
   }
 
   test_zero() async {
-    await assertErrorsInCode(
-'''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
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 4e8d01c..518858a 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
@@ -41,8 +41,11 @@
 class C { const C(int i); }
 @C(a.x) main () {}
 ''', [
-      error(CompileTimeErrorCode
-          .INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY, 79, 3),
+      error(
+          CompileTimeErrorCode
+              .INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY,
+          79,
+          3),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/todo_test.dart b/pkg/analyzer/test/src/diagnostics/todo_test.dart
index f61b675..a72d8b3 100644
--- a/pkg/analyzer/test/src/diagnostics/todo_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/todo_test.dart
@@ -15,6 +15,26 @@
 
 @reflectiveTest
 class TodoTest extends PubPackageResolutionTest {
+  test_fixme() async {
+    await assertErrorsInCode(r'''
+main() {
+  // FIXME: Implement
+}
+''', [
+      error(TodoCode.FIXME, 14, 16, text: 'FIXME: Implement'),
+    ]);
+  }
+
+  test_hack() async {
+    await assertErrorsInCode(r'''
+main() {
+  // HACK: This is a hack
+}
+''', [
+      error(TodoCode.HACK, 14, 20, text: 'HACK: This is a hack'),
+    ]);
+  }
+
   test_todo_multiLineComment() async {
     await assertErrorsInCode(r'''
 main() {
@@ -162,4 +182,14 @@
           text: 'TODO: Implement something that is too long for one line'),
     ]);
   }
+
+  test_undone() async {
+    await assertErrorsInCode(r'''
+main() {
+  // UNDONE: This was undone
+}
+''', [
+      error(TodoCode.UNDONE, 14, 23, text: 'UNDONE: This was undone'),
+    ]);
+  }
 }
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 946343c..0707033 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
@@ -28,8 +28,7 @@
   /// types.
   ///
   /// The logic is the same as the one used in [writeType]
-  bool canWriteType(DartType? type,
-      {ExecutableElement? methodBeingCopied});
+  bool canWriteType(DartType? type, {ExecutableElement? methodBeingCopied});
 
   /// Write the code for a declaration of a class with the given [name]. If a
   /// list of [interfaces] is provided, then the class will implement those
@@ -316,8 +315,7 @@
   /// 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.
-  bool canWriteType(DartType? type,
-      {ExecutableElement? methodBeingCopied});
+  bool canWriteType(DartType? type, {ExecutableElement? methodBeingCopied});
 
   /// Create one or more edits that will convert the given function [body] from
   /// being synchronous to be asynchronous. This includes adding the `async`
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 d190e3d..185d382 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
@@ -52,8 +52,7 @@
   /// Update the completion [target] and [dotTarget] based on the given [unit].
   Expression? _computeDotTarget(
       DartCompletionRequest request, AstNode? entryPoint) {
-    var target = CompletionTarget.forOffset(
-        request.result.unit, request.offset,
+    var target = CompletionTarget.forOffset(request.result.unit, request.offset,
         entryPoint: entryPoint);
     var node = target.containingNode;
     if (node is MethodInvocation) {
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 57ecf0f..434091d 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -143,6 +143,9 @@
   /// Flag to stop after splitting the program.
   static const String stopAfterProgramSplit = '--stop-after-program-split';
 
+  static const String writeProgramSplit = '--write-program-split';
+  static const String readProgramSplit = '--read-program-split';
+
   // The syntax-only level of support for generic methods is included in the
   // 1.50 milestone for Dart. It is not experimental, but also not permanent:
   // a full implementation is expected in the future. Hence, the
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index b3f137b..024488f 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -20,6 +20,9 @@
 import 'common_elements.dart' show ElementEnvironment;
 import 'deferred_load/deferred_load.dart' show DeferredLoadTask;
 import 'deferred_load/output_unit.dart' show OutputUnitData;
+import 'deferred_load/program_split_constraints/nodes.dart' as psc
+    show ConstraintData;
+import 'deferred_load/program_split_constraints/parser.dart' as psc show Parser;
 import 'diagnostics/code_location.dart';
 import 'diagnostics/messages.dart' show Message, MessageTemplate;
 import 'dump_info.dart' show DumpInfoTask;
@@ -121,6 +124,8 @@
 
   bool compilationFailed = false;
 
+  psc.ConstraintData programSplitConstraintsData;
+
   // Callback function used for testing resolution enqueuing.
   void Function() onResolutionQueueEmptyForTesting;
 
@@ -242,6 +247,12 @@
     assert(uri != null);
     reporter.log('Compiling $uri (${options.buildId})');
 
+    if (options.readProgramSplit != null) {
+      var constraintParser = psc.Parser();
+      programSplitConstraintsData =
+          await constraintParser.read(provider, options.readProgramSplit);
+    }
+
     if (onlyPerformGlobalTypeInference) {
       ir.Component component =
           await serializationTask.deserializeComponentAndUpdateOptions();
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index f506091..5b95d9e 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -554,6 +554,8 @@
     new OptionHandler(Flags.disableRtiOptimization, passThrough),
     new OptionHandler(Flags.terse, passThrough),
     new OptionHandler('--deferred-map=.+', passThrough),
+    new OptionHandler('${Flags.writeProgramSplit}=.+', passThrough),
+    new OptionHandler('${Flags.readProgramSplit}=.+', passThrough),
     new OptionHandler('${Flags.dumpInfo}|${Flags.dumpInfo}=.+', setDumpInfo),
     new OptionHandler('--disallow-unsafe-eval', ignoreOption),
     new OptionHandler(Option.showPackageWarnings, passThrough),
diff --git a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
index 69cd2c4..fca24eb 100644
--- a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
+++ b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
@@ -100,7 +100,7 @@
       // all deferred roots.
       info.deferredRoots.forEach((entity, imports) {
         for (ImportEntity deferredImport in imports) {
-          queue.addEntityData(entity, importSets.singleton(deferredImport));
+          queue.addEntityData(entity, importSets.initialSetOf(deferredImport));
         }
       });
     }
diff --git a/pkg/compiler/lib/src/deferred_load/deferred_load.dart b/pkg/compiler/lib/src/deferred_load/deferred_load.dart
index 360d33e..1d21d68 100644
--- a/pkg/compiler/lib/src/deferred_load/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load/deferred_load.dart
@@ -268,6 +268,8 @@
 // contains a bigger delta.)
 library deferred_load;
 
+import 'program_split_constraints/builder.dart' as psc show Builder;
+
 import 'algorithm_state.dart';
 import 'entity_data.dart';
 import 'import_set.dart';
@@ -525,6 +527,14 @@
           }
         });
       }
+
+      // If program split constraints are provided, then parse and interpret
+      // them now.
+      if (compiler.programSplitConstraintsData != null) {
+        var builder = psc.Builder(compiler.programSplitConstraintsData);
+        var transitions = builder.buildTransitionsMap(_allDeferredImports);
+        importSets.buildInitialSets(transitions);
+      }
     });
   }
 
diff --git a/pkg/compiler/lib/src/deferred_load/import_set.dart b/pkg/compiler/lib/src/deferred_load/import_set.dart
index 2d24a747..0327d27 100644
--- a/pkg/compiler/lib/src/deferred_load/import_set.dart
+++ b/pkg/compiler/lib/src/deferred_load/import_set.dart
@@ -31,6 +31,9 @@
 /// specific order. This ensures that we have a unique and canonical
 /// representation for each subset.
 class ImportSetLattice {
+  /// A map of [ImportEntity] to its initial [ImportSet].
+  final Map<ImportEntity, ImportSet> initialSets = {};
+
   /// Index of deferred imports that defines the canonical order used by the
   /// operations below.
   Map<ImportEntity, _DeferredImport> _importIndex = {};
@@ -42,12 +45,34 @@
   /// implemented as an empty set in our algorithm.
   ImportSet get mainSet => _emptySet;
 
-  /// Get the singleton import set that only contains [import].
-  ImportSet singleton(ImportEntity import) {
+  /// Get the smallest [ImportSet] that contains [import]. When
+  /// unconstrained, this [ImportSet] is a singleton [ImportSet] containing
+  /// only the supplied [ImportEntity]. However, when constrained the returned
+  /// [ImportSet] may contain multiple [ImportEntity]s.
+  ImportSet initialSetOf(ImportEntity import) =>
+      initialSets[import] ??= _singleton(import);
+
+  /// A private method to generate a true singleton [ImportSet] for a given
+  /// [ImportEntity].
+  ImportSet _singleton(ImportEntity import) {
     // Ensure we have import in the index.
     return _emptySet._add(_wrap(import));
   }
 
+  /// Initializes the [initialSet] map.
+  void buildInitialSets(
+      Map<ImportEntity, Set<ImportEntity>> initialTransitions) {
+    initialTransitions.forEach((import, setOfImports) {
+      List<_DeferredImport> imports = setOfImports.map(_wrap).toList();
+      imports.sort((a, b) => a.index - b.index);
+      var result = _emptySet;
+      for (var import in imports) {
+        result = result._add(import);
+      }
+      initialSets[import] = result;
+    });
+  }
+
   /// Get the import set that includes the union of [a] and [b].
   ImportSet union(ImportSet a, ImportSet b) {
     if (a == null || a.isEmpty) return b;
diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart
new file mode 100644
index 0000000..c270a19
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart
@@ -0,0 +1,167 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:collection';
+
+import 'nodes.dart';
+
+import '../../elements/entities.dart';
+
+/// A [Constraint] is a node in a constraint graph which wraps an
+/// [ImportEntity].
+class Constraint {
+  /// The name of the [NamedNode] this [Constraint] was created to
+  /// represent.
+  final String name;
+
+  /// The [CombinerType] which should be used to combine [imports]. Either
+  /// [imports] will be a singleton, or [combinerType] will be non-null.
+  final CombinerType combinerType;
+
+  /// The [ImportEntity]s underlying this [Constraint].
+  final Set<ImportEntity> imports;
+
+  /// Imports which load after [import].
+  final Set<Constraint> successors = {};
+
+  /// Imports which load before [import].
+  final Set<Constraint> predecessors = {};
+
+  Constraint(this.name, this.imports, this.combinerType) {
+    assert((this.imports.length == 1 && combinerType == null) ||
+        (this.imports.length > 1 && combinerType != null));
+  }
+
+  @override
+  String toString() {
+    var predecessorNames =
+        predecessors.map((constraint) => constraint.name).join(', ');
+    var successorNames =
+        successors.map((constraint) => constraint.name).join(', ');
+    return 'Constraint(imports=$imports, predecessors={$predecessorNames}, '
+        'successors={$successorNames})';
+  }
+}
+
+/// [_WorkItem] is an private class used to compute the transitive closure of
+/// transitions.
+class _WorkItem {
+  /// The [Constraint] to process.
+  final Constraint child;
+
+  /// The set of [ImportEntity]s guaranteed to be loaded after [child]
+  /// transitively.
+  final Set<ImportEntity> transitiveChildren;
+
+  _WorkItem(this.child, {this.transitiveChildren = const {}});
+}
+
+/// [Builder] is converts parsed [Node] objects into transitions which
+/// can be applied while splitting a program.
+class Builder {
+  /// The [ConstraintData] object which result from parsing json constraints.
+  final ConstraintData nodes;
+
+  Builder(this.nodes);
+
+  /// Builds a map of transitions which can be applied by an [ImportSetLattice]
+  /// when generating [ImportSet]s.
+  Map<ImportEntity, Set<ImportEntity>> buildTransitionsMap(
+      Iterable<ImportEntity> imports) {
+    // 1) Create a map of uri#prefix to [ImportEntity].
+    Map<Uri, Map<String, ImportEntity>> importsByUriAndPrefix = {};
+    for (var import in imports) {
+      var libraryUri = import.enclosingLibraryUri;
+      var prefix = import.name;
+      var uriNodes = importsByUriAndPrefix[libraryUri] ??= {};
+      uriNodes[prefix] = import;
+    }
+
+    // A helper function for looking up an [ImportEntity] from a
+    // [ReferenceNode].
+    ImportEntity _lookupReference(ReferenceNode node) {
+      var uri = node.uri;
+      if (!importsByUriAndPrefix.containsKey(uri)) {
+        throw 'Uri for constraint not found $uri';
+      }
+      var prefix = node.prefix;
+      if (!importsByUriAndPrefix[uri].containsKey(prefix)) {
+        throw 'Prefix: $prefix not found for uri: $uri';
+      }
+      return importsByUriAndPrefix[uri][prefix];
+    }
+
+    // 2) Create a [Constraint] for each [NamedNode]. Also,
+    // index each [Constraint] by [NamedNode].
+    Map<NamedNode, Constraint> nodeToConstraintMap = {};
+    for (var constraint in nodes.named) {
+      CombinerType combinerType = null;
+      Set<ImportEntity> imports = {};
+      if (constraint is ReferenceNode) {
+        imports.add(_lookupReference(constraint));
+      } else if (constraint is CombinerNode) {
+        combinerType = constraint.type;
+        for (var child in constraint.nodes) {
+          imports.add(_lookupReference(child));
+        }
+      } else {
+        throw 'Unexpected Node Type $constraint';
+      }
+
+      nodeToConstraintMap[constraint] =
+          Constraint(constraint.name, imports, combinerType);
+    }
+
+    // 3) Build a graph of [Constraint]s by processing user constraints and
+    // intializing each [Constraint]'s predecessor / successor members.
+    for (var constraint in nodes.ordered) {
+      var successor = nodeToConstraintMap[constraint.successor];
+      var predecessor = nodeToConstraintMap[constraint.predecessor];
+      successor.predecessors.add(predecessor);
+      predecessor.successors.add(successor);
+    }
+
+    // 4) Compute the transitive closure of constraints. This gives us a map of
+    // transitiveTransitions, where each key is a parent [ImportEntity] and each
+    // value represents the transitive set of child [ImportEntity]s which are
+    // always loaded after the parent.
+    Map<ImportEntity, Set<ImportEntity>> transitiveTransitions = {};
+    Queue<_WorkItem> queue = Queue.from(nodeToConstraintMap.values
+        .where((node) => node.successors.isEmpty)
+        .map((node) => _WorkItem(node)));
+    while (queue.isNotEmpty) {
+      var item = queue.removeFirst();
+      var constraint = item.child;
+      var imports = constraint.imports;
+
+      // Update [transitiveTransitions] with reachable transitions for this
+      // [_WorkItem]
+      var transitiveChildren = item.transitiveChildren;
+      for (var import in imports) {
+        // We insert an implicit 'self' transition for every import.
+        var transitions = transitiveTransitions[import] ??= {import};
+
+        // In the case of [CombinerType.fuse], the nodes in the
+        // [Constraint] form a strongly connected component,
+        // i.e. [ImportEntity]s that are always part of a
+        // single [ImportSet].
+        if (constraint.combinerType == CombinerType.fuse) {
+          transitions.addAll(imports);
+        }
+        transitions.addAll(transitiveChildren);
+      }
+
+      // Propagate constraints transitively to the parent.
+      var predecessorTransitiveChildren = {
+        ...imports,
+        ...transitiveChildren,
+      };
+      for (var predecessor in constraint.predecessors) {
+        queue.add(_WorkItem(predecessor,
+            transitiveChildren: predecessorTransitiveChildren));
+      }
+    }
+    return transitiveTransitions;
+  }
+}
diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
new file mode 100644
index 0000000..ea8a9d6
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
@@ -0,0 +1,73 @@
+// 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.
+
+/// A [Node] is an abstract base class for all [Node]s parsed from json
+/// constraints.
+abstract class Node {}
+
+/// A [NamedNode] is an abstract base class for all [Node]s that have a name.
+abstract class NamedNode extends Node {
+  final String name;
+
+  NamedNode(this.name);
+}
+
+/// A [ReferenceNode] is a [NamedNode] with a uri and prefix.
+class ReferenceNode extends NamedNode {
+  final Uri uri;
+  final String prefix;
+
+  ReferenceNode(name, this.uri, this.prefix) : super(name);
+
+  @override
+  String toString() {
+    return 'ReferenceNode(name=$name, uri=$uri, prefix=$prefix)';
+  }
+}
+
+/// A [CombinerType] defines how to combine multiple [ReferenceNode]s in a
+/// single step.
+enum CombinerType { fuse, and }
+
+/// A [CombinerNode] is a [NamedNode] with a list of [ReferenceNode] children
+/// and a [CombinerType] for combining them.
+class CombinerNode extends NamedNode {
+  final CombinerType type;
+  final Set<ReferenceNode> nodes;
+
+  CombinerNode(name, this.type, this.nodes) : super(name);
+
+  @override
+  String toString() {
+    var nodeNames = nodes.map((node) => node.name).join(', ');
+    return 'CombinerNode(name=$name, type=$type, nodes=$nodeNames)';
+  }
+}
+
+/// A [RelativeOrderNode] is an unnamed [Node] which defines a relative
+/// load order between two [NamedNode]s.
+class RelativeOrderNode extends Node {
+  final NamedNode predecessor;
+  final NamedNode successor;
+
+  RelativeOrderNode({this.predecessor, this.successor}) {
+    // TODO(joshualitt) make these both required parameters.
+    assert(this.predecessor != null && this.successor != null);
+  }
+
+  @override
+  String toString() {
+    return 'RelativeOrderNode(predecessor=${predecessor.name}, '
+        'successor=${successor.name})';
+  }
+}
+
+/// [ConstraintData] is a data object which contains the results of parsing json
+/// program split constraints.
+class ConstraintData {
+  final List<NamedNode> named;
+  final List<RelativeOrderNode> ordered;
+
+  ConstraintData(this.named, this.ordered);
+}
diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/parser.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/parser.dart
new file mode 100644
index 0000000..3333d8a
--- /dev/null
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/parser.dart
@@ -0,0 +1,111 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+
+import 'nodes.dart';
+
+import '../../../compiler_new.dart' as api;
+import '../../kernel/front_end_adapter.dart' show CompilerFileSystem;
+
+/// [Parser] parsers a program split constraints json file and returns a
+/// [ConstraintData] object.
+class Parser {
+  final Map<String, NamedNode> nameMap = {};
+  final List<RelativeOrderNode> orderedNodes = [];
+
+  T _lookup<T>(Map<String, dynamic> nodeJson, String key) {
+    var value = nodeJson[key];
+    if (value == null) {
+      throw 'Missing "$key" key in $nodeJson';
+    }
+    return value;
+  }
+
+  void parseReference(Map<String, dynamic> nodeJson) {
+    String name = _lookup(nodeJson, 'name');
+    String uriAndPrefixString = _lookup(nodeJson, 'import');
+    var uriAndPrefix = uriAndPrefixString.split('#');
+    if (uriAndPrefix.length != 2) {
+      throw 'Invalid "import" "uri#prefix" value in $nodeJson';
+    }
+    var uri = Uri.parse(uriAndPrefix[0]);
+    var prefix = uriAndPrefix[1];
+    var referenceNode = ReferenceNode(name, uri, prefix);
+    nameMap[name] = referenceNode;
+  }
+
+  CombinerType parseCombinerType(Map<String, dynamic> nodeJson) {
+    String type = nodeJson['type'];
+    switch (type) {
+      case 'fuse':
+        return CombinerType.fuse;
+      case 'and':
+        return CombinerType.and;
+      default:
+        throw 'Unrecognized Combiner $nodeJson';
+    }
+  }
+
+  void parseCombiner(Map<String, dynamic> nodeJson) {
+    String name = _lookup(nodeJson, 'name');
+    List<dynamic> referencesJson = _lookup(nodeJson, 'nodes');
+    Set<ReferenceNode> references = {};
+    for (String reference in referencesJson) {
+      references.add(nameMap[reference]);
+    }
+    var combinerNode =
+        CombinerNode(name, parseCombinerType(nodeJson), references);
+    nameMap[name] = combinerNode;
+  }
+
+  NamedNode _lookupNode(Map<String, dynamic> nodeJson, String key) {
+    var node = nameMap[_lookup(nodeJson, key)];
+    if (node == null) {
+      throw 'Invalid "$key" name in $nodeJson';
+    }
+    return node;
+  }
+
+  void parseOrder(Map<String, dynamic> nodeJson) {
+    var predecessor = _lookupNode(nodeJson, 'predecessor');
+    var successor = _lookupNode(nodeJson, 'successor');
+    var orderNode =
+        RelativeOrderNode(predecessor: predecessor, successor: successor);
+    orderedNodes.add(orderNode);
+  }
+
+  /// Reads a program split constraints json file and returns a [Nodes] object
+  /// reflecting the parsed constraints.
+  Future<ConstraintData> read(api.CompilerInput provider, Uri path) async {
+    String programSplitJson =
+        await CompilerFileSystem(provider).entityForUri(path).readAsString();
+    List<dynamic> doc = json.decode(programSplitJson);
+    List<Map<String, dynamic>> referenceConstraints = [];
+    List<Map<String, dynamic>> combinerConstraints = [];
+    List<Map<String, dynamic>> orderConstraints = [];
+    for (Map<String, dynamic> constraint in doc) {
+      switch (constraint['type']) {
+        case 'reference':
+          referenceConstraints.add(constraint);
+          break;
+        case 'and':
+        case 'fuse':
+          combinerConstraints.add(constraint);
+          break;
+        case 'order':
+          orderConstraints.add(constraint);
+          break;
+        default:
+          throw 'Unrecognized constraint type in $constraint';
+      }
+    }
+
+    // Parse references, than combiners, than finally sequences.
+    referenceConstraints.forEach(parseReference);
+    combinerConstraints.forEach(parseCombiner);
+    orderConstraints.forEach(parseOrder);
+    return ConstraintData(nameMap.values.toList(), orderedNodes);
+  }
+}
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index c57ab1c..a51c0d0 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -179,8 +179,9 @@
           break;
         case TypeUseKind.TYPE_LITERAL:
           _customElementsResolutionAnalysis.registerTypeLiteral(type);
-          var typeWithoutNullability = type.withoutNullability;
-          if (typeWithoutNullability is TypeVariableType) {
+          type.forEachTypeVariable((TypeVariableType variable) {
+            TypeVariableType typeWithoutNullability =
+                variable.withoutNullability;
             Entity typeDeclaration =
                 typeWithoutNullability.element.typeDeclaration;
             if (typeDeclaration is ClassEntity) {
@@ -194,7 +195,7 @@
                   typeDeclaration);
             }
             registerImpact(_impacts.typeVariableExpression);
-          }
+          });
           hasTypeLiteral = true;
           break;
         case TypeUseKind.RTI_VALUE:
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 3598ad3..8e07e11 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -268,6 +268,10 @@
   // Whether or not to stop compilation after splitting the
   bool stopAfterProgramSplit = false;
 
+  /// Reads a program split json file and applies the parsed constraints to
+  /// deferred loading.
+  Uri? readProgramSplit;
+
   /// Diagnostic option: If `true`, warnings cause the compilation to fail.
   @override
   bool fatalWarnings = false;
@@ -631,6 +635,8 @@
       ..showInternalProgress = _hasOption(options, Flags.progress)
       ..dillDependencies =
           _extractUriListOption(options, '${Flags.dillDependencies}')
+      ..readProgramSplit =
+          _extractUriOption(options, '${Flags.readProgramSplit}=')
       ..readDataUri = _extractUriOption(options, '${Flags.readData}=')
       ..writeDataUri = _extractUriOption(options, '${Flags.writeData}=')
       ..noClosedWorldInData = _hasOption(options, Flags.noClosedWorldInData)
diff --git a/pkg/compiler/test/analysis_options.yaml b/pkg/compiler/test/analysis_options.yaml
index efa1621..ca57e09 100644
--- a/pkg/compiler/test/analysis_options.yaml
+++ b/pkg/compiler/test/analysis_options.yaml
@@ -9,6 +9,7 @@
 
   exclude:
     - '**/data/*'
+    - 'rti/emission/*'
     - '**/model_data/*'
     - 'deferred_loading/libs/*'
 
diff --git a/pkg/compiler/test/custom_split/custom_split_test.dart b/pkg/compiler/test/custom_split/custom_split_test.dart
new file mode 100644
index 0000000..3411e25
--- /dev/null
+++ b/pkg/compiler/test/custom_split/custom_split_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
+import 'dart:io' hide Link;
+import 'package:async_helper/async_helper.dart';
+import '../equivalence/id_equivalence_helper.dart';
+import '../deferred_loading/deferred_loading_test_helper.dart';
+
+///  Add in options to pass to the compiler like
+/// `Flags.disableTypeInference` or `Flags.disableInlining`
+const List<String> compilerOptions = const [];
+
+const List<String> tests = [
+  'diamond',
+  'diamond_and',
+  'diamond_fuse',
+  'two_step',
+  'two_branch',
+];
+
+Map<String, List<String>> createPerTestOptions() {
+  Map<String, List<String>> perTestOptions = {};
+  for (var test in tests) {
+    Uri dir = Platform.script.resolve('data/$test/constraints.json');
+    perTestOptions['$test'] = ['--read-program-split=$dir'];
+  }
+  return perTestOptions;
+}
+
+/// Compute the [OutputUnit]s for all source files involved in the test, and
+/// ensure that the compiler is correctly calculating what is used and what is
+/// not. We expect all test entry points to be in the `data` directory and any
+/// or all supporting libraries to be in the `libs` folder, starting with the
+/// same name as the original file in `data`.
+main(List<String> args) {
+  asyncTest(() async {
+    Directory dataDir = Directory.fromUri(Platform.script.resolve('data'));
+    await checkTests(dataDir, const OutputUnitDataComputer(),
+        options: compilerOptions,
+        perTestOptions: createPerTestOptions(),
+        args: args, setUpFunction: () {
+      importPrefixes.clear();
+    }, testedConfigs: allSpecConfigs);
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.json b/pkg/compiler/test/custom_split/data/diamond/constraints.json
new file mode 100644
index 0000000..19bc46e
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.json
@@ -0,0 +1,42 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2a"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2b"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2a",
+    "successor": "s3"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2b",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond/main.dart b/pkg/compiler/test/custom_split/data/diamond/main.dart
new file mode 100644
index 0000000..910949d
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/main.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [5{step3}], usedBy: [], needs: []},
+  p2: {units: [2{step2a, step3}], usedBy: [], needs: []},
+  p3: {units: [4{step2b, step3}], usedBy: [], needs: []},
+  p4: {units: [3{step2a, step2b, step3}], usedBy: [], needs: []},
+  p5: {units: [1{step1, step2a, step2b, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [5{step3}],
+  f2: [2{step2a, step3}],
+  f3: [4{step2b, step3}],
+  f4: [3{step2a, step2b, step3}],
+  f5: [1{step1, step2a, step2b, step3}]],
+ c_steps=[
+  step1=(f5),
+  step2a=(f5, f4, f2),
+  step2b=(f5, f4, f3),
+  step3=(f5, f4, f3, f2, f1)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond/shared.dart b/pkg/compiler/test/custom_split/data/diamond/shared.dart
new file mode 100644
index 0000000..716a9ac
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/shared.dart
@@ -0,0 +1,47 @@
+// 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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b, step3}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12a3:member_unit=1{step1, step2a, step2b, step3}*/
+step12a3() => '12a3';
+
+@pragma('dart2js:noInline')
+/*member: step2a3:member_unit=2{step2a, step3}*/
+step2a3() => '2a3';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b, step3}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12b3:member_unit=1{step1, step2a, step2b, step3}*/
+step12b3() => '12b3';
+
+@pragma('dart2js:noInline')
+/*member: step2b3:member_unit=4{step2b, step3}*/
+step2b3() => '2b3';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=3{step2a, step2b, step3}*/
+step2ab() => '2ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab3:member_unit=3{step2a, step2b, step3}*/
+step2ab3() => '2ab3';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2a, step2b, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step12ab3:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab3() => '12ab3';
diff --git a/pkg/compiler/test/custom_split/data/diamond/step1.dart b/pkg/compiler/test/custom_split/data/diamond/step1.dart
new file mode 100644
index 0000000..d87a15b
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/step1.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12b(),
+      step13(),
+      step12ab(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond/step2a.dart b/pkg/compiler/test/custom_split/data/diamond/step2a.dart
new file mode 100644
index 0000000..e5f2dce
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/step2a.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a, step3}*/
+step() => [
+      step12a(),
+      step12a3(),
+      step12ab(),
+      step12ab3(),
+      step2a3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond/step2b.dart b/pkg/compiler/test/custom_split/data/diamond/step2b.dart
new file mode 100644
index 0000000..e733005
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/step2b.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=4{step2b, step3}*/
+step() => [
+      step12b(),
+      step12b3(),
+      step12ab(),
+      step12ab3(),
+      step2b3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond/step3.dart b/pkg/compiler/test/custom_split/data/diamond/step3.dart
new file mode 100644
index 0000000..05cc4af
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond/step3.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=5{step3}*/
+step() => [
+      step2a3(),
+      step2b3(),
+      step13(),
+      step2ab3(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/constraints.json b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
new file mode 100644
index 0000000..72d7e25
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
@@ -0,0 +1,40 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "and",
+    "name": "s2",
+    "nodes": [
+      "s2a",
+      "s2b"
+    ]
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/main.dart b/pkg/compiler/test/custom_split/data/diamond_and/main.dart
new file mode 100644
index 0000000..910949d
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/main.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [5{step3}], usedBy: [], needs: []},
+  p2: {units: [2{step2a, step3}], usedBy: [], needs: []},
+  p3: {units: [4{step2b, step3}], usedBy: [], needs: []},
+  p4: {units: [3{step2a, step2b, step3}], usedBy: [], needs: []},
+  p5: {units: [1{step1, step2a, step2b, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [5{step3}],
+  f2: [2{step2a, step3}],
+  f3: [4{step2b, step3}],
+  f4: [3{step2a, step2b, step3}],
+  f5: [1{step1, step2a, step2b, step3}]],
+ c_steps=[
+  step1=(f5),
+  step2a=(f5, f4, f2),
+  step2b=(f5, f4, f3),
+  step3=(f5, f4, f3, f2, f1)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/shared.dart b/pkg/compiler/test/custom_split/data/diamond_and/shared.dart
new file mode 100644
index 0000000..716a9ac
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/shared.dart
@@ -0,0 +1,47 @@
+// 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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b, step3}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12a3:member_unit=1{step1, step2a, step2b, step3}*/
+step12a3() => '12a3';
+
+@pragma('dart2js:noInline')
+/*member: step2a3:member_unit=2{step2a, step3}*/
+step2a3() => '2a3';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b, step3}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12b3:member_unit=1{step1, step2a, step2b, step3}*/
+step12b3() => '12b3';
+
+@pragma('dart2js:noInline')
+/*member: step2b3:member_unit=4{step2b, step3}*/
+step2b3() => '2b3';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=3{step2a, step2b, step3}*/
+step2ab() => '2ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab3:member_unit=3{step2a, step2b, step3}*/
+step2ab3() => '2ab3';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2a, step2b, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step12ab3:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab3() => '12ab3';
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/step1.dart b/pkg/compiler/test/custom_split/data/diamond_and/step1.dart
new file mode 100644
index 0000000..d87a15b
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/step1.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12b(),
+      step13(),
+      step12ab(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/step2a.dart b/pkg/compiler/test/custom_split/data/diamond_and/step2a.dart
new file mode 100644
index 0000000..e5f2dce
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/step2a.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a, step3}*/
+step() => [
+      step12a(),
+      step12a3(),
+      step12ab(),
+      step12ab3(),
+      step2a3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/step2b.dart b/pkg/compiler/test/custom_split/data/diamond_and/step2b.dart
new file mode 100644
index 0000000..e733005
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/step2b.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=4{step2b, step3}*/
+step() => [
+      step12b(),
+      step12b3(),
+      step12ab(),
+      step12ab3(),
+      step2b3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/step3.dart b/pkg/compiler/test/custom_split/data/diamond_and/step3.dart
new file mode 100644
index 0000000..05cc4af
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_and/step3.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=5{step3}*/
+step() => [
+      step2a3(),
+      step2b3(),
+      step13(),
+      step2ab3(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
new file mode 100644
index 0000000..9fbb3cd
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
@@ -0,0 +1,40 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "fuse",
+    "name": "s2",
+    "nodes": [
+      "s2a",
+      "s2b"
+    ]
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/main.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/main.dart
new file mode 100644
index 0000000..1067c37
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/main.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [3{step3}], usedBy: [], needs: []},
+  p2: {units: [2{step2a, step2b, step3}], usedBy: [], needs: []},
+  p3: {units: [1{step1, step2a, step2b, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [3{step3}],
+  f2: [2{step2a, step2b, step3}],
+  f3: [1{step1, step2a, step2b, step3}]],
+ c_steps=[
+  step1=(f3),
+  step2a=(f3, f2),
+  step2b=(f3, f2),
+  step3=(f3, f2, f1)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/shared.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/shared.dart
new file mode 100644
index 0000000..102c8ae1
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/shared.dart
@@ -0,0 +1,47 @@
+// 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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b, step3}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12a3:member_unit=1{step1, step2a, step2b, step3}*/
+step12a3() => '12a3';
+
+@pragma('dart2js:noInline')
+/*member: step2a3:member_unit=2{step2a, step2b, step3}*/
+step2a3() => '2a3';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b, step3}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12b3:member_unit=1{step1, step2a, step2b, step3}*/
+step12b3() => '12b3';
+
+@pragma('dart2js:noInline')
+/*member: step2b3:member_unit=2{step2a, step2b, step3}*/
+step2b3() => '2b3';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=2{step2a, step2b, step3}*/
+step2ab() => '2ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab3:member_unit=2{step2a, step2b, step3}*/
+step2ab3() => '2ab3';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2a, step2b, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step12ab3:member_unit=1{step1, step2a, step2b, step3}*/
+step12ab3() => '12ab3';
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/step1.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/step1.dart
new file mode 100644
index 0000000..d87a15b
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/step1.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12b(),
+      step13(),
+      step12ab(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/step2a.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/step2a.dart
new file mode 100644
index 0000000..c669534
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/step2a.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a, step2b, step3}*/
+step() => [
+      step12a(),
+      step12a3(),
+      step12ab(),
+      step12ab3(),
+      step2a3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/step2b.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/step2b.dart
new file mode 100644
index 0000000..d543265
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/step2b.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a, step2b, step3}*/
+step() => [
+      step12b(),
+      step12b3(),
+      step12ab(),
+      step12ab3(),
+      step2b3(),
+      step2ab(),
+      step2ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/step3.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/step3.dart
new file mode 100644
index 0000000..f924158
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/step3.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=3{step3}*/
+step() => [
+      step2a3(),
+      step2b3(),
+      step13(),
+      step2ab3(),
+      step12a3(),
+      step12b3(),
+      step12ab3(),
+    ];
diff --git a/pkg/compiler/test/custom_split/data/marker.options b/pkg/compiler/test/custom_split/data/marker.options
new file mode 100644
index 0000000..957a9d86
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/marker.options
@@ -0,0 +1 @@
+spec=pkg/compiler/test/custom_split/custom_split_test.dart
diff --git a/pkg/compiler/test/custom_split/data/two_branch/constraints.json b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
new file mode 100644
index 0000000..542cf85
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
@@ -0,0 +1,27 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2a",
+    "import": "memory:sdk/tests/web/native/main.dart#step2a"
+  },
+  {
+    "type": "reference",
+    "name": "s2b",
+    "import": "memory:sdk/tests/web/native/main.dart#step2b"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2a"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2b"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/two_branch/main.dart b/pkg/compiler/test/custom_split/data/two_branch/main.dart
new file mode 100644
index 0000000..84b2505
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/main.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [2{step2a}], usedBy: [], needs: []},
+  p2: {units: [4{step2b}], usedBy: [], needs: []},
+  p3: {units: [3{step2a, step2b}], usedBy: [], needs: []},
+  p4: {units: [1{step1, step2a, step2b}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [2{step2a}],
+  f2: [4{step2b}],
+  f3: [3{step2a, step2b}],
+  f4: [1{step1, step2a, step2b}]],
+ c_steps=[
+  step1=(f4),
+  step2a=(f4, f3, f1),
+  step2b=(f4, f3, f2)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2a.dart' deferred as step2a;
+import 'step2b.dart' deferred as step2b;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2a.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2a.step());
+    });
+    step2b.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2b.step());
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/two_branch/shared.dart b/pkg/compiler/test/custom_split/data/two_branch/shared.dart
new file mode 100644
index 0000000..04d26c4
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/shared.dart
@@ -0,0 +1,19 @@
+// 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.
+
+@pragma('dart2js:noInline')
+/*member: step12a:member_unit=1{step1, step2a, step2b}*/
+step12a() => '12a';
+
+@pragma('dart2js:noInline')
+/*member: step12b:member_unit=1{step1, step2a, step2b}*/
+step12b() => '12b';
+
+@pragma('dart2js:noInline')
+/*member: step12ab:member_unit=1{step1, step2a, step2b}*/
+step12ab() => '12ab';
+
+@pragma('dart2js:noInline')
+/*member: step2ab:member_unit=3{step2a, step2b}*/
+step2ab() => '2ab';
diff --git a/pkg/compiler/test/custom_split/data/two_branch/step1.dart b/pkg/compiler/test/custom_split/data/two_branch/step1.dart
new file mode 100644
index 0000000..e178701
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/step1.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2a, step2b}*/
+step() => [step12a(), step12b(), step12ab()];
diff --git a/pkg/compiler/test/custom_split/data/two_branch/step2a.dart b/pkg/compiler/test/custom_split/data/two_branch/step2a.dart
new file mode 100644
index 0000000..7b29726
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/step2a.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2a}*/
+step() => [step12a(), step12ab(), step2ab()];
diff --git a/pkg/compiler/test/custom_split/data/two_branch/step2b.dart b/pkg/compiler/test/custom_split/data/two_branch/step2b.dart
new file mode 100644
index 0000000..e9847b6
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_branch/step2b.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=4{step2b}*/
+step() => [step12b(), step12ab(), step2ab()];
diff --git a/pkg/compiler/test/custom_split/data/two_step/constraints.json b/pkg/compiler/test/custom_split/data/two_step/constraints.json
new file mode 100644
index 0000000..31c29a1
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.json
@@ -0,0 +1,27 @@
+[
+  {
+    "type": "reference",
+    "name": "s1",
+    "import": "memory:sdk/tests/web/native/main.dart#step1"
+  },
+  {
+    "type": "reference",
+    "name": "s2",
+    "import": "memory:sdk/tests/web/native/main.dart#step2"
+  },
+  {
+    "type": "reference",
+    "name": "s3",
+    "import": "memory:sdk/tests/web/native/main.dart#step3"
+  },
+  {
+    "type": "order",
+    "predecessor": "s1",
+    "successor": "s2"
+  },
+  {
+    "type": "order",
+    "predecessor": "s2",
+    "successor": "s3"
+  }
+]
diff --git a/pkg/compiler/test/custom_split/data/two_step/main.dart b/pkg/compiler/test/custom_split/data/two_step/main.dart
new file mode 100644
index 0000000..4692179
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/main.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [3{step3}], usedBy: [], needs: []},
+  p2: {units: [2{step2, step3}], usedBy: [], needs: []},
+  p3: {units: [1{step1, step2, step3}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [3{step3}],
+  f2: [2{step2, step3}],
+  f3: [1{step1, step2, step3}]],
+ c_steps=[
+  step1=(f3),
+  step2=(f3, f2),
+  step3=(f3, f2, f1)]
+*/
+import 'step1.dart' deferred as step1;
+import 'step2.dart' deferred as step2;
+import 'step3.dart' deferred as step3;
+
+/*member: main:member_unit=main{}*/
+main() {
+  step1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+    print(step1.step());
+    step2.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+      print(step2.step());
+      step3.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+        print(step3.step());
+      });
+    });
+  });
+}
diff --git a/pkg/compiler/test/custom_split/data/two_step/shared.dart b/pkg/compiler/test/custom_split/data/two_step/shared.dart
new file mode 100644
index 0000000..2d487df
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/shared.dart
@@ -0,0 +1,19 @@
+// 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.
+
+@pragma('dart2js:noInline')
+/*member: step12:member_unit=1{step1, step2, step3}*/
+step12() => '12';
+
+@pragma('dart2js:noInline')
+/*member: step13:member_unit=1{step1, step2, step3}*/
+step13() => '13';
+
+@pragma('dart2js:noInline')
+/*member: step23:member_unit=2{step2, step3}*/
+step23() => '23';
+
+@pragma('dart2js:noInline')
+/*member: step123:member_unit=1{step1, step2, step3}*/
+step123() => '123';
diff --git a/pkg/compiler/test/custom_split/data/two_step/step1.dart b/pkg/compiler/test/custom_split/data/two_step/step1.dart
new file mode 100644
index 0000000..e6377fe
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/step1.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=1{step1, step2, step3}*/
+step() => [step12(), step13(), step123()];
diff --git a/pkg/compiler/test/custom_split/data/two_step/step2.dart b/pkg/compiler/test/custom_split/data/two_step/step2.dart
new file mode 100644
index 0000000..85baeb5
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/step2.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=2{step2, step3}*/
+step() => [step12(), step23(), step123()];
diff --git a/pkg/compiler/test/custom_split/data/two_step/step3.dart b/pkg/compiler/test/custom_split/data/two_step/step3.dart
new file mode 100644
index 0000000..5f84ee6
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/two_step/step3.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'shared.dart';
+
+/*member: step:member_unit=3{step3}*/
+step() => [step13(), step23(), step123()];
diff --git a/pkg/compiler/test/equivalence/id_equivalence_helper.dart b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
index a6423eb..20993eb 100644
--- a/pkg/compiler/test/equivalence/id_equivalence_helper.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
@@ -402,7 +402,8 @@
     int shards: 1,
     int shardIndex: 0,
     void onTest(Uri uri),
-    List<TestConfig> testedConfigs = const []}) async {
+    List<TestConfig> testedConfigs = const [],
+    Map<String, List<String>> perTestOptions = const {}}) async {
   if (testedConfigs.isEmpty) testedConfigs = defaultInternalConfigs;
   Set<String> testedMarkers =
       testedConfigs.map((config) => config.marker).toSet();
@@ -432,6 +433,9 @@
     if (name.endsWith('_ea.dart')) {
       testOptions.add(Flags.enableAsserts);
     }
+    if (perTestOptions.containsKey(name)) {
+      testOptions.addAll(perTestOptions[name]);
+    }
 
     if (setUpFunction != null) setUpFunction();
 
diff --git a/pkg/compiler/test/rti/data/instantiated_type_literal.dart b/pkg/compiler/test/rti/data/instantiated_type_literal.dart
new file mode 100644
index 0000000..23443cc
--- /dev/null
+++ b/pkg/compiler/test/rti/data/instantiated_type_literal.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*class: A:exp,needsArgs*/
+class A<T> {
+  instanceMethod() => A<T>;
+}
+
+/*class: B:exp,needsArgs*/
+class B<S, T> {
+  /*member: B.instanceMethod:
+   exp,
+   needsArgs,
+   selectors=[Selector(call, instanceMethod, arity=0, types=1)]
+  */
+  instanceMethod<U>() => B<T, U>;
+}
+
+main() {
+  var a = new A<int>();
+  a.instanceMethod();
+  var b = new B<int, String>();
+  b.instanceMethod<bool>();
+}
diff --git a/pkg/compiler/test/rti/data/instantiation8.dart b/pkg/compiler/test/rti/data/instantiation8.dart
new file mode 100644
index 0000000..f3750a1
--- /dev/null
+++ b/pkg/compiler/test/rti/data/instantiation8.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// TODO(47054): Take closure signature into account to handle equality of
+// instantiated closures.
+/*class: Class:deps=[create]*/
+class Class<T> {}
+
+/*member: create:deps=[test]*/
+Class<T> create<T>() => new Class<T>();
+
+equals(a, b) {
+  if (a != b) throw '$a != $b';
+}
+
+test<T>(f) {
+  Class<T> Function() g = create;
+  equals(f, g);
+}
+
+main() {
+  Class<int> Function() f = create;
+  test<int>(f);
+}
diff --git a/pkg/compiler/test/rti/emission/instantiated_type_literal.dart b/pkg/compiler/test/rti/emission/instantiated_type_literal.dart
new file mode 100644
index 0000000..de04f0c
--- /dev/null
+++ b/pkg/compiler/test/rti/emission/instantiated_type_literal.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*class: A:checks=[],instance*/
+class A<T> {
+  instanceMethod() => A<T>;
+}
+
+/*class: B:checks=[],instance*/
+class B<S, T> {
+  instanceMethod<U>() => B<T, U>;
+}
+
+main() {
+  var a = new A<int>();
+  String name1 = '${a.instanceMethod()}';
+  var b = new B<int, String>();
+  String name2 = '${b.instanceMethod<bool>()}';
+
+  Expect.equals('A<int>', name1);
+  Expect.equals('B<String, bool>', name2);
+}
diff --git a/pkg/compiler/test/rti/rti_emission_test_helper.dart b/pkg/compiler/test/rti/rti_emission_test_helper.dart
index 3cca1c5..fbded89 100644
--- a/pkg/compiler/test/rti/rti_emission_test_helper.dart
+++ b/pkg/compiler/test/rti/rti_emission_test_helper.dart
@@ -22,12 +22,17 @@
 import '../equivalence/id_equivalence_helper.dart';
 import '../helpers/program_lookup.dart';
 
+main(List<String> args) {
+  runTests(args);
+}
+
 runTests(List<String> args, [int shardIndex]) {
   asyncTest(() async {
     Directory dataDir =
         new Directory.fromUri(Platform.script.resolve('emission'));
     await checkTests(dataDir, const RtiEmissionDataComputer(),
         args: args,
+        options: ['--enable-experiment=constructor-tearoffs'],
         shardIndex: shardIndex ?? 0,
         shards: shardIndex != null ? 4 : 1);
   });
diff --git a/pkg/compiler/test/rti/rti_need_test_helper.dart b/pkg/compiler/test/rti/rti_need_test_helper.dart
index 5b15bb6..c59c219 100644
--- a/pkg/compiler/test/rti/rti_need_test_helper.dart
+++ b/pkg/compiler/test/rti/rti_need_test_helper.dart
@@ -35,7 +35,7 @@
   asyncTest(() async {
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(dataDir, const RtiNeedDataComputer(),
-        options: [],
+        options: ['--enable-experiment=constructor-tearoffs'],
         args: args,
         shardIndex: shardIndex ?? 0,
         shards: shardIndex != null ? 4 : 1);
diff --git a/pkg/compiler/testing.json b/pkg/compiler/testing.json
index df10340..7885980 100644
--- a/pkg/compiler/testing.json
+++ b/pkg/compiler/testing.json
@@ -15,6 +15,7 @@
     "exclude": [
       "^pkg/compiler/test/.*/data/.*",
       "^pkg/compiler/test/.*/data_2/.*",
+      "^pkg/compiler/test/.*/emission/.*",
       "^pkg/compiler/test/.*/model_data/.*",
       "^pkg/compiler/test/deferred_loading/libs/.*",
       "^pkg/compiler/test/sourcemaps/stacktrace/extension_method.dart"
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 2dc8b55..6c3269d 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -160,7 +160,9 @@
     // Determine output file name.
     String outputFile = argResults[commonOptions['outputFile'].flag];
     if (outputFile == null) {
-      final inputWithoutDart = sourcePath.replaceFirst(RegExp(r'\.dart$'), '');
+      final inputWithoutDart = sourcePath.endsWith('.dart')
+          ? sourcePath.substring(0, sourcePath.length - 5)
+          : sourcePath;
       outputFile = '$inputWithoutDart.$fileExt';
     }
 
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index 08d4d36..b796a20 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -241,7 +241,7 @@
 
   /// Compress sequences of whitespace characters into a single space.
   String _compressWhitespace(String code) =>
-      code.replaceAll(RegExp(r'\s*'), ' ');
+      code.replaceAll(RegExp(r'\s+'), ' ');
 
   String _pluralFix(int count) => count == 1 ? 'fix' : 'fixes';
 
diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart
index b84cd86..3f4b340 100644
--- a/pkg/dartdev/lib/src/core.dart
+++ b/pkg/dartdev/lib/src/core.dart
@@ -50,13 +50,13 @@
 
   @override
   String get invocation {
+    String result = super.invocation;
     if (_verbose) {
-      final splitInvocation = super.invocation.split(' ');
-      splitInvocation.insert(1, '[vm-options]');
-      return splitInvocation.join(' ');
-    } else {
-      return super.invocation;
+      var firstSpace = result.indexOf(' ');
+      if (firstSpace < 0) firstSpace = result.length;
+      result = result.replaceRange(firstSpace, firstSpace, ' [vm-options]');
     }
+    return result;
   }
 
   /// Create the ArgParser instance for this command.
@@ -129,7 +129,7 @@
   stream
       .transform(utf8.decoder)
       .transform(const LineSplitter())
-      .listen(handler);
+      .forEach(handler);
 }
 
 /// A representation of a project on disk.
diff --git a/pkg/dartdev/lib/src/sdk.dart b/pkg/dartdev/lib/src/sdk.dart
index dde3acf..2f42de6 100644
--- a/pkg/dartdev/lib/src/sdk.dart
+++ b/pkg/dartdev/lib/src/sdk.dart
@@ -8,42 +8,21 @@
 
 import 'core.dart';
 
-final Sdk sdk = Sdk();
-
-String get _computeSdkPath {
-  // The common case, and how cli_util.dart computes the Dart SDK directory,
-  // path.dirname called twice on Platform.resolvedExecutable. We confirm by
-  // asserting that the directory ./bin/snapshots/ exists after this directory:
-  var sdkPath =
-      path.absolute(path.dirname(path.dirname(Platform.resolvedExecutable)));
-  var snapshotsDir = path.join(sdkPath, 'bin', 'snapshots');
-  if (Directory(snapshotsDir).existsSync()) {
-    return sdkPath;
-  }
-
-  // This is the less common case where the user is in the checked out Dart SDK,
-  // and is executing dart via:
-  // ./out/ReleaseX64/dart ...
-  // We confirm in a similar manner with the snapshot directory existence and
-  // then return the correct sdk path:
-  snapshotsDir = path.absolute(path.dirname(Platform.resolvedExecutable),
-      'dart-sdk', 'bin', 'snapshots');
-  if (Directory(snapshotsDir).existsSync()) {
-    return path.absolute(path.dirname(Platform.resolvedExecutable), 'dart-sdk');
-  }
-
-  // If neither returned above, we return the common case:
-  return sdkPath;
-}
+final Sdk sdk = Sdk._instance;
 
 /// A utility class for finding and referencing paths within the Dart SDK.
 class Sdk {
+  static final Sdk _instance = _createSingleton();
+
+  /// Path to SDK directory.
   final String sdkPath;
+
+  /// The SDK's semantic versioning version (x.y.z-a.b.channel).
   final String version;
 
-  Sdk()
-      : sdkPath = _computeSdkPath,
-        version = Runtime.runtime.version;
+  factory Sdk() => _instance;
+
+  Sdk._(this.sdkPath, this.version);
 
   // Assume that we want to use the same Dart executable that we used to spawn
   // DartDev. We should be able to run programs with out/ReleaseX64/dart even
@@ -86,27 +65,68 @@
     }
     return true;
   }
+
+  static Sdk _createSingleton() {
+    // Find SDK path.
+
+    // The common case, and how cli_util.dart computes the Dart SDK directory,
+    // [path.dirname] called twice on Platform.resolvedExecutable. We confirm by
+    // asserting that the directory `./bin/snapshots/` exists in this directory:
+    var sdkPath =
+        path.absolute(path.dirname(path.dirname(Platform.resolvedExecutable)));
+    var snapshotsDir = path.join(sdkPath, 'bin', 'snapshots');
+    if (!Directory(snapshotsDir).existsSync()) {
+      // This is the less common case where the user is in
+      // the checked out Dart SDK, and is executing `dart` via:
+      // ./out/ReleaseX64/dart ...
+      // We confirm in a similar manner with the snapshot directory existence
+      // and then return the correct sdk path:
+      var altPath =
+          path.absolute(path.dirname(Platform.resolvedExecutable), 'dart-sdk');
+      var snapshotsDir = path.join(altPath, 'bin', 'snapshots');
+      if (Directory(snapshotsDir).existsSync()) {
+        sdkPath = altPath;
+      }
+      // If that snapshot dir does not exist either,
+      // we use the first guess anyway.
+    }
+
+    // Defer to [Runtime] for the version.
+    var version = Runtime.runtime.version;
+
+    return Sdk._(sdkPath, version);
+  }
 }
 
-/// Return information about the current runtime.
+/// Information about the current runtime.
 class Runtime {
-  static Runtime runtime = Runtime._();
+  static Runtime runtime = _createSingleton();
 
-  // Match "2.10.0-edge.0b2da6e7 (be) ...".
-  static final RegExp _channelRegex = RegExp(r'.* \(([\d\w]+)\) .*');
-
-  /// The SDK's version number (x.y.z-a.b.channel).
+  /// The SDK's semantic versioning version (x.y.z-a.b.channel).
   final String version;
 
   /// The SDK's release channel (`be`, `dev`, `beta`, `stable`).
-  final String channel;
+  ///
+  /// May be null if [Platform.version] does not have the expected format.
+  final String /*?*/ channel;
 
-  Runtime._()
-      : version = _computeVersion(Platform.version),
-        channel = _computeChannel(Platform.version);
+  Runtime._(this.version, this.channel);
 
-  static String _computeVersion(String version) =>
-      version.substring(0, version.indexOf(' '));
-  static String _computeChannel(String version) =>
-      _channelRegex.firstMatch(version)?.group(1);
+  static Runtime _createSingleton() {
+    var versionString = Platform.version;
+    // Exepcted format: "version (channel) ..."
+    var version = versionString;
+    String /*?*/ channel;
+    var versionEnd = versionString.indexOf(' ');
+    if (versionEnd > 0) {
+      version = versionString.substring(0, versionEnd);
+      var channelEnd = versionString.indexOf(' ', versionEnd + 1);
+      if (channelEnd < 0) channelEnd = versionString.length;
+      if (versionString.startsWith('(', versionEnd + 1) &&
+          versionString.startsWith(')', channelEnd - 1)) {
+        channel = versionString.substring(versionEnd + 2, channelEnd - 1);
+      }
+    }
+    return Runtime._(version, channel);
+  }
 }
diff --git a/pkg/dartdev/lib/src/templates.dart b/pkg/dartdev/lib/src/templates.dart
index 041ded0..3d36844 100644
--- a/pkg/dartdev/lib/src/templates.dart
+++ b/pkg/dartdev/lib/src/templates.dart
@@ -14,7 +14,7 @@
 import 'templates/web_simple.dart';
 
 final _substituteRegExp = RegExp(r'__([a-zA-Z]+)__');
-final _nonValidSubstituteRegExp = RegExp('[^a-zA-Z]');
+final _nonValidSubstituteRegExp = RegExp(r'[^a-zA-Z]');
 
 final List<Generator> generators = [
   ConsoleSimpleGenerator(),
@@ -38,6 +38,11 @@
   final List<TemplateFile> files = [];
   TemplateFile _entrypoint;
 
+  /// Lazily initialized cache for lower-case if [id].
+  ///
+  /// Used by [compareTo].
+  String /*?*/ _lowerCaseId;
+
   Generator(
     this.id,
     this.label,
@@ -45,6 +50,8 @@
     this.categories = const [],
   });
 
+  String get lowerCaseId => _lowerCaseId ??= id.toLowerCase();
+
   /// The entrypoint of the application; the main file for the project, which an
   /// IDE might open after creating the project.
   TemplateFile get entrypoint => _entrypoint;
@@ -92,11 +99,8 @@
     }
   }
 
-  int numFiles() => files.length;
-
   @override
-  int compareTo(Generator other) =>
-      id.toLowerCase().compareTo(other.id.toLowerCase());
+  int compareTo(Generator other) => lowerCaseId.compareTo(other.lowerCaseId);
 
   /// Return some user facing instructions about how to finish installation of
   /// the template.
@@ -199,16 +203,10 @@
 @visibleForTesting
 String substituteVars(String str, Map<String, String> vars) {
   if (vars.keys.any((element) => element.contains(_nonValidSubstituteRegExp))) {
-    throw ArgumentError('vars.keys can only contain letters.');
+    throw ArgumentError.value(
+        vars, 'vars', 'vars.keys can only contain letters.');
   }
 
-  return str.replaceAllMapped(_substituteRegExp, (match) {
-    final item = vars[match[1]];
-
-    if (item == null) {
-      return match[0];
-    } else {
-      return item;
-    }
-  });
+  return str.replaceAllMapped(
+      _substituteRegExp, (match) => vars[match[1]] ?? match[0]);
 }
diff --git a/pkg/dartdev/lib/src/utils.dart b/pkg/dartdev/lib/src/utils.dart
index c5aa257..c36d6fa 100644
--- a/pkg/dartdev/lib/src/utils.dart
+++ b/pkg/dartdev/lib/src/utils.dart
@@ -83,7 +83,7 @@
 // A valid Dart identifier that can be used for a package, i.e. no
 // capital letters.
 // https://dart.dev/guides/language/language-tour#important-concepts
-final RegExp _identifierRegExp = RegExp('[a-z_][a-z0-9_]*');
+final RegExp _identifierRegExp = RegExp(r'^[a-z_][a-z\d_]*$');
 
 // non-contextual dart keywords.
 // https://dart.dev/guides/language/language-tour#keywords
@@ -160,17 +160,16 @@
 };
 
 /// Whether [name] is a valid Pub package.
-bool isValidPackageName(String name) {
-  final Match match = _identifierRegExp.matchAsPrefix(name);
-  return match != null && match.end == name.length && !_keywords.contains(name);
-}
+bool isValidPackageName(String name) =>
+    _identifierRegExp.hasMatch(name) && !_keywords.contains(name);
 
 /// Convert a directory name into a reasonably legal pub package name.
 String normalizeProjectName(String name) {
   name = name.replaceAll('-', '_').replaceAll(' ', '_');
   // Strip any extension (like .dart).
-  if (name.contains('.')) {
-    name = name.substring(0, name.indexOf('.'));
+  var dotIndex = name.indexOf('.');
+  if (dotIndex >= 0) {
+    name = name.substring(0, dotIndex);
   }
   return name;
 }
diff --git a/pkg/dds/CHANGELOG.md b/pkg/dds/CHANGELOG.md
index 7813107..953e36b 100644
--- a/pkg/dds/CHANGELOG.md
+++ b/pkg/dds/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 2.1.2
+- Silently handle exceptions that occur within RPC request handlers.
+
 # 2.1.1
 - Fix another possibility of `LateInitializationError` being thrown when trying to
   cleanup after an error during initialization.
diff --git a/pkg/dds/dds_protocol.md b/pkg/dds/dds_protocol.md
index 9224302..48ac4c1 100644
--- a/pkg/dds/dds_protocol.md
+++ b/pkg/dds/dds_protocol.md
@@ -16,16 +16,22 @@
 - [IDs and Names](#ids-and-names)
 - [Revision History](#revision-history)
 - [Public RPCs](#public-rpcs)
+  - [getAvailableCachedCpuSamples](#getavailablecachedcpusamples)
+  - [getCachedCpuSamples](#getcachedcpusamples)[
   - [getClientName](#getclientname)
   - [getDartDevelopmentServiceVersion](#getdartdevelopmentserviceversion)
   - [getLogHistorySize](#getloghistorysize)
+  - [getStreamHistory](#getstreamhistory)[
   - [requirePermissionToResume](#requirepermissiontoresume)
   - [setClientName](#setclientname)
   - [setLogHistorySize](#setloghistorysize)
 - [Public Types](#public-types)
+  - [AvailableCachedCpuSamples](#availablecachedcpusamples)[
+  - [CachedCpuSamples](#cachedcpusamples)
   - [ClientName](#clientname)
   - [DartDevelopmentServiceVersion](#dartdevelopmentserviceversion)
   - [Size](#size)
+  - [StreamHistory](#streamhistory)[
 
 ## RPCs, Requests, and Responses
 
diff --git a/pkg/dds/lib/src/dds_impl.dart b/pkg/dds/lib/src/dds_impl.dart
index b0a2a50..7de1b71 100644
--- a/pkg/dds/lib/src/dds_impl.dart
+++ b/pkg/dds/lib/src/dds_impl.dart
@@ -149,8 +149,17 @@
     }
     pipeline = pipeline.addMiddleware(_authCodeMiddleware);
     final handler = pipeline.addHandler(_handlers().handler);
-    // Start the DDS server.
-    _server = await io.serve(handler, host, port);
+    // Start the DDS server. Run in an error Zone to ensure that asynchronous
+    // exceptions encountered during request handling are handled, as exceptions
+    // thrown during request handling shouldn't take down the entire service.
+    _server = await runZonedGuarded(
+      () async => await io.serve(handler, host, port),
+      (error, stack) {
+        if (shouldLogRequests) {
+          print('Asynchronous error: $error\n$stack');
+        }
+      },
+    )!;
 
     final tmpUri = Uri(
       scheme: 'http',
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
index c11e0f2..ae212ba 100644
--- a/pkg/dds/pubspec.yaml
+++ b/pkg/dds/pubspec.yaml
@@ -3,7 +3,7 @@
   A library used to spawn the Dart Developer Service, used to communicate with
   a Dart VM Service instance.
 
-version: 2.1.1
+version: 2.1.2
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds
 
diff --git a/pkg/dds/test/handles_exceptions_in_shelf_handlers.dart b/pkg/dds/test/handles_exceptions_in_shelf_handlers.dart
new file mode 100644
index 0000000..dda9ebd
--- /dev/null
+++ b/pkg/dds/test/handles_exceptions_in_shelf_handlers.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:dds/dds.dart';
+import 'package:dds/src/dds_impl.dart';
+import 'package:test/test.dart';
+import 'package:web_socket_channel/web_socket_channel.dart';
+
+import 'common/fakes.dart';
+
+Future<HttpServer> startHttpServer() async {
+  final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
+  server.listen((event) async {
+    event.response.add([1, 2, 3]);
+    await event.response.flush();
+    await server.close(force: true);
+  });
+  return server;
+}
+
+void main() {
+  webSocketBuilder = (Uri _) => FakeWebSocketChannel();
+  peerBuilder = (WebSocketChannel _, dynamic __) async => FakePeer();
+
+  test("Handles 'Connection closed before full header was received'", () async {
+    final httpServer = await startHttpServer();
+    final dds = await DartDevelopmentService.startDartDevelopmentService(
+      Uri(scheme: 'http', host: httpServer.address.host, port: httpServer.port),
+      enableAuthCodes: false,
+    );
+    final uri = dds.uri!;
+
+    try {
+      final client = HttpClient();
+      final request = await client.get(uri.host, uri.port, 'getVM');
+      await request.close();
+      fail('Unexpected successful response');
+    } catch (e) {
+      expect(
+        e.toString(),
+        contains(
+          'Connection closed before full header was received',
+        ),
+      );
+    } finally {
+      await dds.shutdown();
+      await dds.done;
+    }
+  });
+}
diff --git a/pkg/front_end/analysis_options.yaml b/pkg/front_end/analysis_options.yaml
index 21d20ef..8a17b97 100644
--- a/pkg/front_end/analysis_options.yaml
+++ b/pkg/front_end/analysis_options.yaml
@@ -18,4 +18,5 @@
     - package_api_docs
     - lines_longer_than_80_chars
     - unrelated_type_equality_checks
+    - annotate_overrides
     # - always_specify_types
diff --git a/pkg/front_end/lib/src/base/command_line_options.dart b/pkg/front_end/lib/src/base/command_line_options.dart
index fc67845..46aabec 100644
--- a/pkg/front_end/lib/src/base/command_line_options.dart
+++ b/pkg/front_end/lib/src/base/command_line_options.dart
@@ -67,21 +67,19 @@
       const Option(Flags.fatal, const StringListValue());
   static const Option<String?> fatalSkip =
       const Option(Flags.fatalSkip, const StringValue());
-  static const Option<int> forceLateLowering = const Option(
+  static const Option<int?> forceLateLowering = const Option(
       Flags.forceLateLowering,
-      const IntValue(
-          defaultValue: LateLowering.none, noArgValue: LateLowering.all));
-  static const Option<bool> forceLateLoweringSentinel =
-      const Option(Flags.forceLateLoweringSentinel, const BoolValue(false));
-  static const Option<bool> forceStaticFieldLowering =
-      const Option(Flags.forceStaticFieldLowering, const BoolValue(false));
-  static const Option<bool> forceNoExplicitGetterCalls =
-      const Option(Flags.forceNoExplicitGetterCalls, const BoolValue(false));
-  static const Option<int> forceConstructorTearOffLowering = const Option(
+      const IntValue(defaultValue: null, noArgValue: LateLowering.all));
+  static const Option<bool?> forceLateLoweringSentinel =
+      const Option(Flags.forceLateLoweringSentinel, const BoolValue(null));
+  static const Option<bool?> forceStaticFieldLowering =
+      const Option(Flags.forceStaticFieldLowering, const BoolValue(null));
+  static const Option<bool?> forceNoExplicitGetterCalls =
+      const Option(Flags.forceNoExplicitGetterCalls, const BoolValue(null));
+  static const Option<int?> forceConstructorTearOffLowering = const Option(
       Flags.forceConstructorTearOffLowering,
       const IntValue(
-          defaultValue: ConstructorTearOffLowering.none,
-          noArgValue: ConstructorTearOffLowering.all));
+          defaultValue: null, noArgValue: ConstructorTearOffLowering.all));
   static const Option<bool> help = const Option(
       Flags.help, const BoolValue(false),
       aliases: ["-h", "/?", "/h"]);
diff --git a/pkg/front_end/lib/src/base/libraries_specification.dart b/pkg/front_end/lib/src/base/libraries_specification.dart
index 61f0028..bd2824f 100644
--- a/pkg/front_end/lib/src/base/libraries_specification.dart
+++ b/pkg/front_end/lib/src/base/libraries_specification.dart
@@ -265,5 +265,6 @@
   Object error;
   LibrariesSpecificationException(this.error);
 
+  @override
   String toString() => '$error';
 }
diff --git a/pkg/front_end/lib/src/base/library_info.dart b/pkg/front_end/lib/src/base/library_info.dart
index ec1153a..5dea369 100644
--- a/pkg/front_end/lib/src/base/library_info.dart
+++ b/pkg/front_end/lib/src/base/library_info.dart
@@ -159,5 +159,6 @@
 
   const Maturity(this.level, this.name, this.description);
 
+  @override
   String toString() => "$name: $level\n$description\n";
 }
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index b3f9998..8b01e29 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -858,6 +858,7 @@
 
   HermeticFileSystem(this.includedFiles, this._realFileSystem);
 
+  @override
   FileSystemEntity entityForUri(Uri uri) {
     if (includedFiles.contains(uri)) return _realFileSystem.entityForUri(uri);
     throw new HermeticAccessException(uri);
diff --git a/pkg/front_end/lib/src/fasta/builder/builder.dart b/pkg/front_end/lib/src/fasta/builder/builder.dart
index a0539e8..b0fa8e8 100644
--- a/pkg/front_end/lib/src/fasta/builder/builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builder.dart
@@ -216,6 +216,7 @@
   @override
   Builder get origin => this;
 
+  @override
   bool get hasProblem => false;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
index e516b79..e87af39 100644
--- a/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart
@@ -24,16 +24,19 @@
       : fileUri = compilationUnit.fileUri,
         super(null, 0, name, compilationUnit, charOffset);
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return type.withDeclaredNullability(nullability);
   }
 
+  @override
   String get debugName => "BuiltinTypeDeclarationBuilder";
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index eaf482e..e893019 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -306,6 +306,7 @@
   @override
   bool get isAbstract => (modifiers & abstractMask) != 0;
 
+  @override
   bool get isMixin => (modifiers & mixinDeclarationMask) != 0;
 
   @override
@@ -321,9 +322,11 @@
     return isMixinApplication && !isNamedMixinApplication;
   }
 
+  @override
   bool get declaresConstConstructor =>
       (modifiers & declaresConstConstructorMask) != 0;
 
+  @override
   void forEachConstructor(void Function(String, MemberBuilder) f,
       {bool includeInjectedConstructors: false}) {
     if (isPatch) {
@@ -369,6 +372,7 @@
 
   /// Registers a constructor redirection for this class and returns true if
   /// this redirection gives rise to a cycle that has not been reported before.
+  @override
   bool checkConstructorCyclic(String source, String target) {
     ConstructorRedirection? redirect = new ConstructorRedirection(target);
     _redirectingConstructors ??= <String, ConstructorRedirection>{};
@@ -426,6 +430,7 @@
     scope.forEach(f);
   }
 
+  @override
   void forEachDeclaredField(
       void Function(String name, FieldBuilder fieldBuilder) callback) {
     void callbackFilteringFieldBuilders(String name, Builder builder) {
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
index e595184..2167087 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
@@ -143,6 +143,7 @@
         super(metadata, modifiers, returnType, name, typeVariables, formals,
             compilationUnit, charOffset, nativeMethodName);
 
+  @override
   SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
 
   @override
@@ -154,6 +155,7 @@
   @override
   Member get invokeTarget => constructor;
 
+  @override
   FunctionNode get function => _constructor.function;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart
index b5e9b80..4a17233 100644
--- a/pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/dynamic_type_declaration_builder.dart
@@ -14,5 +14,6 @@
       DartType type, LibraryBuilder compilationUnit, int charOffset)
       : super("dynamic", type, compilationUnit, charOffset);
 
+  @override
   String get debugName => "DynamicTypeDeclarationBuilder";
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
index 2abc7cf..14c0575 100644
--- a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
@@ -45,6 +45,7 @@
 
   AsyncMarker actualAsyncModifier = AsyncMarker.Sync;
 
+  @override
   final bool isExtensionInstanceMember = false;
 
   final Procedure _procedureInternal;
@@ -364,6 +365,7 @@
     return _procedureInternal;
   }
 
+  @override
   bool _hasBuiltOutlines = false;
 
   @override
@@ -455,6 +457,7 @@
     _hasBuiltOutlines = true;
   }
 
+  @override
   void _finishPatch() {
     super._finishPatch();
 
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index e4761c0..1915d6c 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -98,12 +98,14 @@
 
   bool hadTypesInferred = false;
 
+  @override
   bool hasBodyBeenBuilt = false;
 
   // TODO(johnniwinther): [parent] is not trust-worthy for determining
   //  properties since it is changed after the creation of the builder. For now
   //  we require it has an argument here. A follow-up should clean up the
   //  misuse of parent.
+  @override
   final bool isTopLevel;
 
   SourceFieldBuilder(
@@ -301,12 +303,16 @@
     _typeEnsured = true;
   }
 
+  @override
   SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
 
+  @override
   Member get member => _fieldEncoding.field;
 
+  @override
   String get debugName => "FieldBuilder";
 
+  @override
   bool get isField => true;
 
   @override
@@ -340,6 +346,7 @@
         isSynthetic: isSynthetic);
   }
 
+  @override
   bool get isEligibleForInference {
     return type == null && (hasInitializer || isClassInstanceMember);
   }
@@ -439,6 +446,7 @@
     _constInitializerToken = null;
   }
 
+  @override
   DartType get fieldType => _fieldEncoding.type;
 
   void set fieldType(DartType value) {
@@ -499,6 +507,7 @@
     return fieldType;
   }
 
+  @override
   DartType get builtType => fieldType;
 
   List<ClassMember>? _localMembers;
@@ -1459,6 +1468,7 @@
       // ignore: unnecessary_null_comparison
       : assert(isInternalImplementation != null);
 
+  @override
   Member getMember(ClassHierarchyBuilder hierarchy) {
     fieldBuilder._ensureType(hierarchy);
     return _member;
diff --git a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
index 14f3d3d..660e08a 100644
--- a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
@@ -12,11 +12,14 @@
 
 class FixedTypeBuilder extends TypeBuilder {
   final DartType type;
+  @override
   final Uri? fileUri;
+  @override
   final int? charOffset;
 
   const FixedTypeBuilder(this.type, this.fileUri, this.charOffset);
 
+  @override
   TypeBuilder clone(
       List<TypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
@@ -24,36 +27,45 @@
     return this;
   }
 
+  @override
   Object? get name => null;
 
+  @override
   NullabilityBuilder get nullabilityBuilder =>
       new NullabilityBuilder.fromNullability(type.nullability);
 
+  @override
   String get debugName => 'FixedTypeBuilder';
 
+  @override
   bool get isVoidType => type is VoidType;
 
+  @override
   StringBuffer printOn(StringBuffer buffer) {
     buffer.write('type=${type}');
     return buffer;
   }
 
+  @override
   DartType build(LibraryBuilder library,
       {TypedefType? origin, bool? nonInstanceContext}) {
     return type;
   }
 
+  @override
   Supertype buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     return unhandled('buildSupertype', 'FixedTypeBuilder', charOffset, fileUri);
   }
 
+  @override
   Supertype buildMixedInType(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     return unhandled(
         'buildMixedInType', 'FixedTypeBuilder', charOffset, fileUri);
   }
 
+  @override
   TypeBuilder withNullabilityBuilder(NullabilityBuilder nullabilityBuilder) =>
       this;
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index c5917c2..216d044 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -54,10 +54,12 @@
   /// List of metadata builders for the metadata declared on this parameter.
   final List<MetadataBuilder>? metadata;
 
+  @override
   final int modifiers;
 
   final TypeBuilder? type;
 
+  @override
   final String name;
 
   @override
@@ -68,6 +70,7 @@
   FormalParameterKind kind = FormalParameterKind.mandatory;
 
   /// The variable declaration created for this formal parameter.
+  @override
   VariableDeclaration? variable;
 
   /// The first token of the default value, if any.
@@ -89,6 +92,7 @@
       : this.fileUri = fileUri ?? compilationUnit?.fileUri,
         super(compilationUnit, charOffset);
 
+  @override
   String get debugName => "FormalParameterBuilder";
 
   // TODO(johnniwinther): Cleanup `isRequired` semantics in face of required
@@ -107,6 +111,7 @@
 
   bool get isOptional => !isRequired;
 
+  @override
   bool get isLocal => true;
 
   bool get isInitializingFormal => (modifiers & initializingFormalMask) != 0;
@@ -116,6 +121,7 @@
   // An initializing formal parameter might be final without its
   // VariableDeclaration being final. See
   // [ProcedureBuilder.computeFormalParameterInitializerScope]..
+  @override
   bool get isAssignable => variable!.isAssignable && !isInitializingFormal;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/function_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
index 1d02cb5..c462800 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -58,20 +58,28 @@
 
   AsyncMarker get asyncModifier;
 
+  @override
   ProcedureKind? get kind;
 
+  @override
   bool get isAbstract;
 
+  @override
   bool get isConstructor;
 
+  @override
   bool get isRegularMethod;
 
+  @override
   bool get isGetter;
 
+  @override
   bool get isSetter;
 
+  @override
   bool get isOperator;
 
+  @override
   bool get isFactory;
 
   /// This is the formal parameter scope as specified in the Dart Programming
@@ -95,6 +103,7 @@
 
   void set body(Statement? newBody);
 
+  @override
   bool get isNative;
 
   /// Returns the [index]th parameter of this function.
diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
index 54d2a6a..5128a9d 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
@@ -28,8 +28,11 @@
   final TypeBuilder? returnType;
   final List<TypeVariableBuilder>? typeVariables;
   final List<FormalParameterBuilder>? formals;
+  @override
   final NullabilityBuilder nullabilityBuilder;
+  @override
   final Uri? fileUri;
+  @override
   final int charOffset;
 
   FunctionTypeBuilder(this.returnType, this.typeVariables, this.formals,
@@ -41,6 +44,7 @@
   @override
   String get debugName => "Function";
 
+  @override
   bool get isVoidType => false;
 
   @override
@@ -77,6 +81,7 @@
     return buffer;
   }
 
+  @override
   FunctionType build(LibraryBuilder library,
       {TypedefType? origin, bool? nonInstanceContext}) {
     DartType builtReturnType =
@@ -120,6 +125,7 @@
         typedefType: origin);
   }
 
+  @override
   Supertype? buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     library.addProblem(
@@ -127,11 +133,13 @@
     return null;
   }
 
+  @override
   Supertype? buildMixedInType(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     return buildSupertype(library, charOffset, fileUri);
   }
 
+  @override
   FunctionTypeBuilder clone(
       List<TypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
@@ -160,6 +168,7 @@
     return newType;
   }
 
+  @override
   FunctionTypeBuilder withNullabilityBuilder(
       NullabilityBuilder nullabilityBuilder) {
     return new FunctionTypeBuilder(returnType, typeVariables, formals,
diff --git a/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
index a54a5b3..a004dac 100644
--- a/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart
@@ -16,8 +16,10 @@
       DartType type, LibraryBuilder compilationUnit, int charOffset)
       : super("FutureOr", type, compilationUnit, charOffset);
 
+  @override
   String get debugName => "FutureOrTypeDeclarationBuilder";
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
@@ -27,6 +29,7 @@
         nullabilityBuilder.build(library));
   }
 
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return new FutureOrType(arguments.single, nullability);
diff --git a/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
index 7226d05..1adb629 100644
--- a/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/invalid_type_declaration_builder.dart
@@ -16,6 +16,7 @@
 
 class InvalidTypeDeclarationBuilder extends TypeDeclarationBuilderImpl
     with ErroneousMemberBuilderMixin {
+  @override
   String get debugName => "InvalidTypeBuilder";
 
   final LocatedMessage message;
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index 2c6badc0..439f98b 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -444,8 +444,10 @@
   LibraryLocalDeclarationIterator(this.library)
       : iterator = library.scope.iterator;
 
+  @override
   Builder get current => iterator.current;
 
+  @override
   bool moveNext() {
     while (iterator.moveNext()) {
       if (current.parent == library) return true;
@@ -461,10 +463,13 @@
   LibraryLocalDeclarationNameIterator(this.library)
       : iterator = library.scope.nameIterator;
 
+  @override
   Builder get current => iterator.current;
 
+  @override
   String get name => iterator.name;
 
+  @override
   bool moveNext() {
     while (iterator.moveNext()) {
       if (current.parent == library) return true;
diff --git a/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart b/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
index 7a769e4..079fb6b 100644
--- a/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
@@ -17,7 +17,9 @@
 class MixinApplicationBuilder extends TypeBuilder {
   final TypeBuilder? supertype;
   final List<TypeBuilder> mixins;
+  @override
   final Uri fileUri;
+  @override
   final int charOffset;
   Supertype? builtType;
 
@@ -26,16 +28,21 @@
   MixinApplicationBuilder(
       this.supertype, this.mixins, this.fileUri, this.charOffset);
 
+  @override
   String? get name => null;
 
+  @override
   NullabilityBuilder get nullabilityBuilder {
     return unsupported("nullabilityBuilder", -1, null);
   }
 
+  @override
   String get debugName => "MixinApplicationBuilder";
 
+  @override
   bool get isVoidType => false;
 
+  @override
   StringBuffer printOn(StringBuffer buffer) {
     buffer.write(supertype);
     buffer.write(" with ");
@@ -74,6 +81,7 @@
     return unsupported("withNullabilityBuilder", -1, null);
   }
 
+  @override
   MixinApplicationBuilder clone(
       List<TypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index fd75e28..bccd75e 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -48,10 +48,12 @@
 import 'void_type_declaration_builder.dart';
 
 class NamedTypeBuilder extends TypeBuilder {
+  @override
   final Object name;
 
   List<TypeBuilder>? arguments;
 
+  @override
   final NullabilityBuilder nullabilityBuilder;
 
   @override
@@ -71,6 +73,7 @@
       [this.arguments, this.fileUri, this.charOffset])
       : this.name = declaration.name;
 
+  @override
   bool get isVoidType => declaration is VoidTypeDeclarationBuilder;
 
   @override
@@ -174,8 +177,10 @@
     }
   }
 
+  @override
   String get debugName => "NamedTypeBuilder";
 
+  @override
   StringBuffer printOn(StringBuffer buffer) {
     buffer.write(flattenName(name, charOffset ?? TreeNode.noOffset, fileUri));
     if (arguments?.isEmpty ?? true) return buffer;
@@ -313,6 +318,7 @@
     }
   }
 
+  @override
   Supertype? buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     TypeDeclarationBuilder declaration = this.declaration!;
@@ -385,6 +391,7 @@
     return handleInvalidSupertype(library, charOffset, fileUri);
   }
 
+  @override
   Supertype? buildMixedInType(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     TypeDeclarationBuilder declaration = this.declaration!;
@@ -410,6 +417,7 @@
     return handleInvalidSupertype(library, charOffset, fileUri);
   }
 
+  @override
   TypeBuilder subst(Map<TypeVariableBuilder, TypeBuilder> substitution) {
     TypeBuilder? result = substitution[declaration];
     if (result != null) {
@@ -440,6 +448,7 @@
     return this;
   }
 
+  @override
   NamedTypeBuilder clone(
       List<TypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
@@ -462,6 +471,7 @@
     return newType;
   }
 
+  @override
   NamedTypeBuilder withNullabilityBuilder(
       NullabilityBuilder nullabilityBuilder) {
     return new NamedTypeBuilder(
diff --git a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
index 7a2c3cb..52b67ee 100644
--- a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart
@@ -19,14 +19,17 @@
     assert(coreLibrary.importUri == Uri.parse('dart:core'));
   }
 
+  @override
   String get debugName => "NeverTypeDeclarationBuilder";
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
     return type.withDeclaredNullability(nullabilityBuilder.build(library));
   }
 
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return type.withDeclaredNullability(nullability);
diff --git a/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
index 914bbe3..9e18f07 100644
--- a/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/null_type_declaration_builder.dart
@@ -16,14 +16,17 @@
       DartType type, LibraryBuilder compilationUnit, int charOffset)
       : super("Null", type, compilationUnit, charOffset);
 
+  @override
   String get debugName => "NullTypeBuilder";
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
     return type;
   }
 
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     return type;
diff --git a/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart b/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart
index 2789417..e9920a6 100644
--- a/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart
@@ -75,6 +75,7 @@
     }
   }
 
+  @override
   String toString() {
     StringBuffer buffer = new StringBuffer();
     writeNullabilityOn(buffer);
diff --git a/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart b/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
index 70c5bbd..3f8d28b 100644
--- a/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
@@ -21,6 +21,7 @@
 
   final Scope exportScope = new Scope.top();
 
+  @override
   final SourceLibraryBuilder parent;
 
   final bool deferred;
@@ -43,6 +44,7 @@
     }
   }
 
+  @override
   Uri get fileUri => parent.fileUri;
 
   Builder? lookup(String name, int charOffset, Uri fileUri) {
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index 8950e51..741445c 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -30,6 +30,7 @@
 
   Procedure get procedure;
 
+  @override
   ProcedureKind get kind;
 
   Procedure get actualProcedure;
@@ -53,6 +54,7 @@
   @override
   AsyncMarker actualAsyncModifier = AsyncMarker.Sync;
 
+  @override
   final bool isExtensionInstanceMember;
 
   late Procedure _procedure;
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index 78e98ed..511ad2e 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -39,10 +39,12 @@
 
   String get debugName;
 
+  @override
   LibraryBuilder get parent;
 
   LibraryBuilder get library;
 
+  @override
   Uri get fileUri;
 
   List<TypeVariableBuilder>? get typeVariables;
@@ -54,6 +56,7 @@
   DartType buildThisType();
 
   /// [arguments] have already been built.
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments);
 
@@ -145,13 +148,17 @@
       : fileUri = parent.fileUri,
         super(metadata, 0, name, parent, charOffset);
 
+  @override
   String get debugName => "TypeAliasBuilder";
 
+  @override
   LibraryBuilder get parent => super.parent as LibraryBuilder;
 
+  @override
   LibraryBuilder get library => super.parent as LibraryBuilder;
 
   /// [arguments] have already been built.
+  @override
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments) {
     DartType thisType = buildThisType();
@@ -259,6 +266,7 @@
   /// `const InvalidType()`). If `this` type alias expands to a
   /// [TypeVariableBuilder] then the type alias cannot be used as a class, in
   /// which case an error is emitted and `this` is returned.
+  @override
   TypeDeclarationBuilder? unaliasDeclaration(List<TypeBuilder>? typeArguments,
       {bool isUsedAsClass = false,
       int? usedAsClassCharOffset,
@@ -453,6 +461,7 @@
   /// [this], such that the returned [TypeBuilder]s are appropriate type
   /// arguments for passing to the [ClassBuilder] which is the end of the
   /// unaliasing chain.
+  @override
   List<TypeBuilder>? unaliasTypeArguments(List<TypeBuilder>? typeArguments) {
     TypeDeclarationBuilder? currentDeclarationBuilder = this;
     List<TypeBuilder>? currentTypeArguments = typeArguments;
@@ -513,6 +522,7 @@
 
   Map<Name, Procedure>? get tearOffs;
 
+  @override
   Procedure? findConstructorOrFactory(
       String text, int charOffset, Uri uri, LibraryBuilder accessingLibrary) {
     if (tearOffs != null) {
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index 11098cb..b7feb2e 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -43,6 +43,7 @@
 
   StringBuffer printOn(StringBuffer buffer);
 
+  @override
   String toString() => "$debugName(${printOn(new StringBuffer())})";
 
   /// Returns the [TypeBuilder] for this type in which [TypeVariableBuilder]s
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index b6a6ed9..a612517 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -68,10 +68,13 @@
         super(null, 0, parameter.name ?? '', compilationUnit,
             parameter.fileOffset);
 
+  @override
   bool get isTypeVariable => true;
 
+  @override
   String get debugName => "TypeVariableBuilder";
 
+  @override
   StringBuffer printOn(StringBuffer buffer) {
     buffer.write(name);
     if (bound != null) {
@@ -81,8 +84,10 @@
     return buffer;
   }
 
+  @override
   String toString() => "${printOn(new StringBuffer())}";
 
+  @override
   TypeVariableBuilder get origin => actualOrigin ?? this;
 
   /// The [TypeParameter] built by this builder.
@@ -94,6 +99,7 @@
     parameter.variance = value;
   }
 
+  @override
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {bool? nonInstanceContext}) {
@@ -139,6 +145,7 @@
     return type;
   }
 
+  @override
   TypeParameterType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType>? arguments) {
     if (arguments != null) {
@@ -180,6 +187,7 @@
     }
   }
 
+  @override
   void applyPatch(covariant TypeVariableBuilder patch) {
     patch.actualOrigin = this;
   }
@@ -201,7 +209,8 @@
       DeclarationBuilder? classOrExtensionBuilder,
       MemberBuilder? memberBuilder,
       CoreTypes coreTypes,
-      List<DelayedActionPerformer> delayedActionPerformers, Scope scope) {
+      List<DelayedActionPerformer> delayedActionPerformers,
+      Scope scope) {
     MetadataBuilder.buildAnnotations(parameter, metadata, libraryBuilder,
         classOrExtensionBuilder, memberBuilder, fileUri!, scope);
   }
diff --git a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
index 2639164..39c5f37 100644
--- a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
+++ b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
@@ -26,5 +26,6 @@
     return builder.check(library, charOffset, fileUri);
   }
 
+  @override
   String toString() => "UnresolvedType(@$charOffset, $builder)";
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/void_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/void_type_declaration_builder.dart
index 25c6760..97e238f 100644
--- a/pkg/front_end/lib/src/fasta/builder/void_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/void_type_declaration_builder.dart
@@ -14,5 +14,6 @@
       DartType type, LibraryBuilder compilationUnit, int charOffset)
       : super("void", type, compilationUnit, charOffset);
 
+  @override
   String get debugName => "VoidTypeDeclarationBuilder";
 }
diff --git a/pkg/front_end/lib/src/fasta/builder_graph.dart b/pkg/front_end/lib/src/fasta/builder_graph.dart
index d874063..9e2b434 100644
--- a/pkg/front_end/lib/src/fasta/builder_graph.dart
+++ b/pkg/front_end/lib/src/fasta/builder_graph.dart
@@ -25,8 +25,10 @@
 
   BuilderGraph(this.builders);
 
+  @override
   Iterable<Uri> get vertices => builders.keys;
 
+  @override
   Iterable<Uri> neighborsOf(Uri vertex) sync* {
     LibraryBuilder? library = builders[vertex];
     if (library == null) {
diff --git a/pkg/front_end/lib/src/fasta/crash.dart b/pkg/front_end/lib/src/fasta/crash.dart
index 87f406a..c36cf76 100644
--- a/pkg/front_end/lib/src/fasta/crash.dart
+++ b/pkg/front_end/lib/src/fasta/crash.dart
@@ -33,6 +33,7 @@
 
   Crash(this.uri, this.charOffset, this.error, this.trace);
 
+  @override
   String toString() {
     return """
 Crash when compiling $uri,
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index 1462633..c4ba7a5 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -23,6 +23,7 @@
 import 'dill_member_builder.dart';
 
 class DillClassBuilder extends ClassBuilderImpl {
+  @override
   final Class cls;
 
   DillClassBuilder(Class cls, DillLibraryBuilder parent)
@@ -45,8 +46,10 @@
             parent,
             cls.fileOffset);
 
+  @override
   DillLibraryBuilder get library => super.library as DillLibraryBuilder;
 
+  @override
   List<TypeVariableBuilder>? get typeVariables {
     List<TypeVariableBuilder>? typeVariables = super.typeVariables;
     if (typeVariables == null && cls.typeParameters.isNotEmpty) {
@@ -56,8 +59,10 @@
     return typeVariables;
   }
 
+  @override
   Uri get fileUri => cls.fileUri;
 
+  @override
   TypeBuilder? get supertypeBuilder {
     TypeBuilder? supertype = super.supertypeBuilder;
     if (supertype == null) {
@@ -137,6 +142,7 @@
 
   /// Returns true if this class is the result of applying a mixin to its
   /// superclass.
+  @override
   bool get isMixinApplication => cls.isMixinApplication;
 
   @override
@@ -152,6 +158,7 @@
     unimplemented("mixedInType=", -1, null);
   }
 
+  @override
   List<TypeBuilder>? get interfaceBuilders {
     if (cls.implementedTypes.isEmpty) return null;
     if (super.interfaceBuilders == null) {
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
index 1a1857b..097bdc1 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
@@ -21,6 +21,7 @@
 import 'dill_extension_member_builder.dart';
 
 class DillExtensionBuilder extends ExtensionBuilderImpl {
+  @override
   final Extension extension;
   List<TypeVariableBuilder>? _typeParameters;
   TypeBuilder? _onType;
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_extension_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_extension_member_builder.dart
index c35ec2c..9dc0213 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_extension_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_extension_member_builder.dart
@@ -17,6 +17,7 @@
   @override
   bool get isStatic => _descriptor.isStatic;
 
+  @override
   bool get isExternal => member.isExternal;
 
   @override
@@ -47,6 +48,7 @@
       this.field, ExtensionMemberDescriptor descriptor, Builder parent)
       : super(field, descriptor, parent);
 
+  @override
   Member get member => field;
 
   @override
@@ -73,6 +75,7 @@
       : assert(descriptor.kind == ExtensionMemberKind.Setter),
         super(procedure, descriptor, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -93,6 +96,7 @@
       : assert(descriptor.kind == ExtensionMemberKind.Getter),
         super(procedure, descriptor, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -113,6 +117,7 @@
       : assert(descriptor.kind == ExtensionMemberKind.Operator),
         super(procedure, descriptor, parent);
 
+  @override
   Member get member => procedure;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index 4c1afba..8d60ebc 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -63,6 +63,7 @@
   @override
   final Library library;
 
+  @override
   DillLoader loader;
 
   /// Exports that can't be serialized.
@@ -144,11 +145,13 @@
   @override
   LibraryBuilder get nameOriginBuilder => this;
 
+  @override
   void addSyntheticDeclarationOfDynamic() {
     addBuilder("dynamic",
         new DynamicTypeDeclarationBuilder(const DynamicType(), this, -1), -1);
   }
 
+  @override
   void addSyntheticDeclarationOfNever() {
     addBuilder(
         "Never",
@@ -157,6 +160,7 @@
         -1);
   }
 
+  @override
   void addSyntheticDeclarationOfNull() {
     // The name "Null" is declared by the class Null.
   }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index e76b8e2..14ea957 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -32,6 +32,7 @@
 
   DillLoader(TargetImplementation target) : super(target);
 
+  @override
   Template<SummaryTemplate> get outlineSummaryTemplate =>
       templateDillOutlineSummary;
 
@@ -83,6 +84,7 @@
         as DillLibraryBuilder;
   }
 
+  @override
   Future<Null> buildOutline(DillLibraryBuilder builder) async {
     // ignore: unnecessary_null_comparison
     if (builder.library == null) {
@@ -91,6 +93,7 @@
     builder.markAsReadyToBuild();
   }
 
+  @override
   Future<Null> buildBody(DillLibraryBuilder builder) {
     return buildOutline(builder);
   }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index 54a3158..9730305 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -23,42 +23,56 @@
 import '../problems.dart' show unhandled;
 
 abstract class DillMemberBuilder extends MemberBuilderImpl {
+  @override
   final int modifiers;
 
   DillMemberBuilder(Member member, Builder parent)
       : modifiers = computeModifiers(member),
         super(parent, member.fileOffset, member.fileUri);
 
+  @override
   Member get member;
 
+  @override
   Iterable<Member> get exportedMembers => [member];
 
+  @override
   String get debugName => "DillMemberBuilder";
 
+  @override
   String get name => member.name.text;
 
+  @override
   bool get isConstructor => member is Constructor;
 
+  @override
   ProcedureKind? get kind {
     final Member member = this.member;
     return member is Procedure ? member.kind : null;
   }
 
+  @override
   bool get isRegularMethod => identical(ProcedureKind.Method, kind);
 
+  @override
   bool get isGetter => identical(ProcedureKind.Getter, kind);
 
+  @override
   bool get isSetter => identical(ProcedureKind.Setter, kind);
 
+  @override
   bool get isOperator => identical(ProcedureKind.Operator, kind);
 
+  @override
   bool get isFactory => identical(ProcedureKind.Factory, kind);
 
+  @override
   bool get isRedirectingGenerativeConstructor {
     return isConstructor &&
         isRedirectingGenerativeConstructorImplementation(member as Constructor);
   }
 
+  @override
   bool get isSynthetic {
     final Member member = this.member;
     return member is Constructor && member.isSynthetic;
@@ -93,6 +107,7 @@
 
   DillFieldBuilder(this.field, Builder parent) : super(field, parent);
 
+  @override
   Member get member => field;
 
   @override
@@ -104,6 +119,7 @@
   @override
   Member? get invokeTarget => field;
 
+  @override
   bool get isField => true;
 
   @override
@@ -117,6 +133,7 @@
       : assert(procedure.kind == ProcedureKind.Getter),
         super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -136,6 +153,7 @@
       : assert(procedure.kind == ProcedureKind.Setter),
         super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -155,6 +173,7 @@
       : assert(procedure.kind == ProcedureKind.Method),
         super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -174,6 +193,7 @@
       : assert(procedure.kind == ProcedureKind.Operator),
         super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -193,6 +213,7 @@
   DillFactoryBuilder(this.procedure, this._factoryTearOff, Builder parent)
       : super(procedure, parent);
 
+  @override
   Member get member => procedure;
 
   @override
@@ -284,6 +305,7 @@
     return other is DillClassMember && memberBuilder == other.memberBuilder;
   }
 
+  @override
   String toString() => 'DillClassMember($memberBuilder,forSetter=${forSetter})';
 }
 
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_target.dart b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
index 089e3d4..f9c24fd 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_target.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
@@ -86,6 +86,7 @@
         new DillLibraryBuilder(library, loader);
   }
 
+  @override
   void releaseAncillaryResources() {
     libraryBuilders.clear();
   }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
index 6dc3d32..697dbef 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
@@ -18,22 +18,27 @@
 import 'dill_library_builder.dart' show DillLibraryBuilder;
 
 class DillTypeAliasBuilder extends TypeAliasBuilderImpl {
+  @override
   final Typedef typedef;
 
+  @override
   final Map<Name, Procedure>? tearOffs;
 
   List<TypeVariableBuilder>? _typeVariables;
   TypeBuilder? _type;
 
+  @override
   DartType? thisType;
 
   DillTypeAliasBuilder(this.typedef, this.tearOffs, DillLibraryBuilder parent)
       : super(null, typedef.name, parent, typedef.fileOffset);
 
+  @override
   List<MetadataBuilder> get metadata {
     return unimplemented("metadata", -1, null);
   }
 
+  @override
   List<TypeVariableBuilder>? get typeVariables {
     if (_typeVariables == null && typedef.typeParameters.isNotEmpty) {
       _typeVariables =
@@ -42,10 +47,12 @@
     return _typeVariables;
   }
 
+  @override
   int varianceAt(int index) {
     return typedef.typeParameters[index].variance;
   }
 
+  @override
   bool get fromDill => true;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/hybrid_file_system.dart b/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
index 56b1627..d56e24f 100644
--- a/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
+++ b/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
@@ -27,6 +27,7 @@
 /// Entity that delegates to an underlying memory or physical file system
 /// entity.
 class HybridFileSystemEntity implements FileSystemEntity {
+  @override
   final Uri uri;
   FileSystemEntity? _delegate;
   final HybridFileSystem _fs;
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index b1f362c..7d5852e 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -2331,6 +2331,7 @@
 
   const InitializeFromComponentError(this.message);
 
+  @override
   String toString() => message;
 }
 
@@ -2400,6 +2401,7 @@
       DillTarget dillTarget, UriTranslator uriTranslator)
       : super(fileSystem, includeComments, dillTarget, uriTranslator);
 
+  @override
   ChangedStructureNotifier get changedStructureNotifier => this;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 89d2a68..8ae41af 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -164,6 +164,7 @@
 
 class BodyBuilder extends ScopeListener<JumpTarget>
     implements ExpressionGeneratorHelper, EnsureLoaded, DelayedActionPerformer {
+  @override
   final Forest forest;
 
   // TODO(ahe): Rename [library] to 'part'.
@@ -307,6 +308,7 @@
 
   late _BodyBuilderCloner _cloner = new _BodyBuilderCloner(this);
 
+  @override
   ConstantContext constantContext = ConstantContext.none;
 
   UnresolvedType? currentLocalVariableType;
@@ -445,6 +447,7 @@
     return isDeclarationInstanceMember || member is ConstructorBuilder;
   }
 
+  @override
   TypeEnvironment get typeEnvironment => typeInferrer.typeSchemaEnvironment;
 
   DartType get implicitTypeArgument => const ImplicitTypeArgument();
@@ -1248,6 +1251,7 @@
   ///    transformation needed has been performed); and
   /// b) The library is correctly marked as being used to allow for proper
   ///    'dependency pruning'.
+  @override
   void ensureLoaded(Member? member) {
     if (member == null) return;
     Library ensureLibraryLoaded = member.enclosingLibrary;
@@ -1265,6 +1269,7 @@
   /// This is designed for use with asserts.
   /// See [ensureLoaded] for a description of what 'loaded' means and the ideas
   /// behind that.
+  @override
   bool isLoaded(Member? member) {
     if (member == null) return true;
     Library ensureLibraryLoaded = member.enclosingLibrary;
@@ -1431,6 +1436,7 @@
   /// calculations in another library.  For example, a resolution of a
   /// redirecting factory invocation depends on the type inference in the
   /// redirecting factory.
+  @override
   void performDelayedActions() {
     if (delayedRedirectingFactoryInvocations.isNotEmpty) {
       _resolveRedirectingFactoryTargets(
@@ -1448,6 +1454,7 @@
     }
   }
 
+  @override
   bool get hasDelayedActions {
     return delayedRedirectingFactoryInvocations.isNotEmpty;
   }
@@ -3069,6 +3076,7 @@
     }
   }
 
+  @override
   void handleInvalidTopLevelBlock(Token token) {
     // TODO(danrubel): Consider improved recovery by adding this block
     // as part of a synthetic top level function.
@@ -4575,6 +4583,7 @@
     }
   }
 
+  @override
   Expression buildExtensionMethodInvocation(
       int fileOffset, Procedure target, Arguments arguments,
       {required bool isTearOff}) {
@@ -4846,6 +4855,7 @@
     ]));
   }
 
+  @override
   Expression createInstantiationAndInvocation(
       Expression Function() receiverFunction,
       List<UnresolvedType>? typeArguments,
@@ -6799,12 +6809,8 @@
           allowPotentiallyConstantType: allowPotentiallyConstantType);
       if (message == null) return unresolved;
       return new UnresolvedType(
-          new NamedTypeBuilder(
-              typeParameter.name!,
-              builder.nullabilityBuilder,
-              /* arguments = */ null,
-              unresolved.fileUri,
-              unresolved.charOffset)
+          new NamedTypeBuilder(typeParameter.name!, builder.nullabilityBuilder,
+              /* arguments = */ null, unresolved.fileUri, unresolved.charOffset)
             ..bind(new InvalidTypeDeclarationBuilder(
                 typeParameter.name!, message)),
           unresolved.charOffset,
@@ -7102,6 +7108,7 @@
 
   Operator(this.token, this.charOffset);
 
+  @override
   String toString() => "operator($name)";
 }
 
@@ -7193,6 +7200,7 @@
 
   final JumpTarget continueTarget;
 
+  @override
   final int functionNestingLevel;
 
   @override
@@ -7207,40 +7215,52 @@
   @override
   Uri get fileUri => parent.fileUri!;
 
+  @override
   bool get hasUsers => breakTarget.hasUsers || continueTarget.hasUsers;
 
+  @override
   List<Statement> get users => unsupported("users", charOffset, fileUri);
 
+  @override
   JumpTargetKind get kind => unsupported("kind", charOffset, fileUri);
 
+  @override
   bool get isBreakTarget => true;
 
+  @override
   bool get isContinueTarget => true;
 
+  @override
   bool get isGotoTarget => false;
 
+  @override
   void addBreak(Statement statement) {
     breakTarget.addBreak(statement);
   }
 
+  @override
   void addContinue(Statement statement) {
     continueTarget.addContinue(statement);
   }
 
+  @override
   void addGoto(Statement statement) {
     unsupported("addGoto", charOffset, fileUri);
   }
 
+  @override
   void resolveBreaks(
       Forest forest, LabeledStatement target, Statement targetStatement) {
     breakTarget.resolveBreaks(forest, target, targetStatement);
   }
 
+  @override
   List<BreakStatementImpl>? resolveContinues(
       Forest forest, LabeledStatement target) {
     return continueTarget.resolveContinues(forest, target);
   }
 
+  @override
   void resolveGotos(Forest forest, SwitchCase target) {
     unsupported("resolveGotos", charOffset, fileUri);
   }
@@ -7330,6 +7350,7 @@
         isModifiable: false);
   }
 
+  @override
   String toString() {
     return "FormalParameters($parameters, $charOffset, $uri)";
   }
@@ -7402,6 +7423,7 @@
 
   Label(this.name, this.charOffset);
 
+  @override
   String toString() => "label($name)";
 }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 9acfe5e..99eba28 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -504,6 +504,7 @@
 
   final List<ClassMember> _delayedMemberComputations = <ClassMember>[];
 
+  @override
   final CoreTypes coreTypes;
 
   late Types types;
@@ -639,6 +640,7 @@
     return null;
   }
 
+  @override
   InterfaceType getTypeAsInstanceOf(
       InterfaceType type, Class superclass, Library clientLibrary) {
     if (type.classNode == superclass) return type;
@@ -647,6 +649,7 @@
         .withDeclaredNullability(type.nullability);
   }
 
+  @override
   List<DartType>? getTypeArgumentsAsInstanceOf(
       InterfaceType type, Class superclass) {
     if (type.classNode == superclass) return type.typeArguments;
@@ -718,6 +721,7 @@
         uniteNullabilities(type1.nullability, type2.nullability));
   }
 
+  @override
   Member? getInterfaceMember(Class cls, Name name, {bool setter: false}) {
     return getNodeFromClass(cls)
         .getInterfaceMember(name, setter)
@@ -3409,6 +3413,7 @@
     return result;
   }
 
+  @override
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb
@@ -3555,6 +3560,7 @@
       this.cls, CoreTypes coreTypes, TypeBuilderConstraintGatherer gatherer)
       : super(coreTypes, gatherer);
 
+  @override
   Supertype? asInstantiationOf(Supertype type, Class superclass) {
     List<DartType>? arguments =
         gatherer.getTypeArgumentsAsInstanceOf(type.asInterfaceType, superclass);
@@ -3562,6 +3568,7 @@
     return new Supertype(superclass, arguments);
   }
 
+  @override
   void reportProblem(Message message, Class kernelClass) {
     int length = cls.isMixinApplication ? 1 : cls.fullNameForErrors.length;
     cls.addProblem(message, cls.charOffset, length);
@@ -3570,6 +3577,7 @@
 
 class TypeBuilderConstraintGatherer extends TypeConstraintGatherer
     with StandardBounds, TypeSchemaStandardBounds {
+  @override
   final ClassHierarchyBuilder hierarchy;
 
   TypeBuilderConstraintGatherer(this.hierarchy,
@@ -3640,6 +3648,7 @@
   DelayedOverrideCheck(
       this._classBuilder, this._declaredMember, this._overriddenMembers);
 
+  @override
   void check(ClassHierarchyBuilder hierarchy) {
     Member declaredMember = _declaredMember.getMember(hierarchy);
 
@@ -3694,6 +3703,7 @@
 
   const DelayedGetterSetterCheck(this.classBuilder, this.getter, this.setter);
 
+  @override
   void check(ClassHierarchyBuilder hierarchy) {
     classBuilder.checkGetterSetter(hierarchy.types, getter.getMember(hierarchy),
         setter.getMember(hierarchy));
@@ -4167,7 +4177,9 @@
         SourceLibraryBuilder library =
             classBuilder.library as SourceLibraryBuilder;
         if (canonicalMember is Procedure) {
-          library.forwardersOrigins..add(stub)..add(canonicalMember);
+          library.forwardersOrigins
+            ..add(stub)
+            ..add(canonicalMember);
         }
         _member = stub;
         _covariance = combinedMemberSignature.combinedMemberSignatureCovariance;
@@ -4230,6 +4242,7 @@
     return "${fullNameForErrors}$suffix";
   }
 
+  @override
   String toString() => 'SynthesizedInterfaceMember($classBuilder,$name,'
       '$declarations,forSetter=$forSetter)';
 }
@@ -4373,6 +4386,7 @@
   @override
   String get fullNameForErrors => inheritedClassMember.fullNameForErrors;
 
+  @override
   String get fullName => inheritedClassMember.fullName;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/collections.dart b/pkg/front_end/lib/src/fasta/kernel/collections.dart
index f5e8c18..a11bbc7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/collections.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/collections.dart
@@ -334,6 +334,7 @@
         ..fileOffset = syntheticAssignment!.fileOffset)
       : expressionEffects;
 
+  @override
   void visitChildren(Visitor v) {
     variable.accept(v);
     iterable.accept(v);
@@ -343,6 +344,7 @@
     problem?.accept(v);
   }
 
+  @override
   void transformChildren(Transformer v) {
     // ignore: unnecessary_null_comparison
     if (variable != null) {
@@ -690,6 +692,7 @@
         ..fileOffset = syntheticAssignment!.fileOffset)
       : expressionEffects;
 
+  @override
   void visitChildren(Visitor v) {
     variable.accept(v);
     iterable.accept(v);
@@ -699,6 +702,7 @@
     problem?.accept(v);
   }
 
+  @override
   void transformChildren(Transformer v) {
     // ignore: unnecessary_null_comparison
     if (variable != null) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 0f336e2..329190f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -168,6 +168,7 @@
 
   ConstantWeakener(this._evaluator);
 
+  @override
   Constant? processValue(Constant node, Constant? value) {
     if (value != null) {
       value = _evaluator.canonicalize(value);
@@ -4158,6 +4159,7 @@
 class RedundantFileUriExpressionRemover extends Transformer {
   Uri? currentFileUri = null;
 
+  @override
   TreeNode visitFileUriExpression(FileUriExpression node) {
     if (node.fileUri == currentFileUri) {
       return node.expression.accept(this);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 629ab65..a4161b0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -304,6 +304,7 @@
 
   void printOn(StringSink sink);
 
+  @override
   String toString() {
     StringBuffer buffer = new StringBuffer();
     buffer.write(_debugName);
@@ -769,6 +770,7 @@
       ..fileOffset = receiverExpression.fileOffset;
   }
 
+  @override
   Expression buildIfNullAssignment(Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return new NullAwareIfNullSet(receiverExpression, name, value,
@@ -779,6 +781,7 @@
       ..fileOffset = offset;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -793,6 +796,7 @@
         forPostIncDec: isPostIncDec);
   }
 
+  @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildCompoundAssignment(
@@ -1032,6 +1036,7 @@
     return result;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -1168,6 +1173,7 @@
       ..fileOffset = offset;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -1227,8 +1233,10 @@
       this.index, this.getter, this.setter)
       : super(helper, token);
 
+  @override
   String get _plainNameForRead => "[]";
 
+  @override
   String get _debugName => "SuperIndexedAccessGenerator";
 
   @override
@@ -1271,6 +1279,7 @@
       ..fileOffset = offset;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -2330,8 +2339,10 @@
     return explicitTypeArguments ?? const <DartType>[];
   }
 
+  @override
   String get _plainNameForRead => "[]";
 
+  @override
   String get _debugName => "ExplicitExtensionIndexedAccessGenerator";
 
   @override
@@ -2433,6 +2444,7 @@
     return result;
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -2566,6 +2578,7 @@
     return _makeInvalidRead();
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -2574,6 +2587,7 @@
     return _makeInvalidRead();
   }
 
+  @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return _makeInvalidRead();
@@ -2611,8 +2625,8 @@
         isNullAware: isNullAware);
   }
 
-  /* Expression | Generator */ buildSelectorAccess(
-      Selector send, int operatorOffset, bool isNullAware) {
+  /* Expression | Generator */ @override
+  buildSelectorAccess(Selector send, int operatorOffset, bool isNullAware) {
     if (_helper.constantContext != ConstantContext.none) {
       _helper.addProblem(
           messageNotAConstantExpression, fileOffset, token.length);
@@ -2891,12 +2905,8 @@
               _uri, charOffset, lengthOfSpan(prefixGenerator.token, token));
     }
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
-    NamedTypeBuilder result = new NamedTypeBuilder(
-        name,
-        nullabilityBuilder,
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null);
+    NamedTypeBuilder result = new NamedTypeBuilder(name, nullabilityBuilder,
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null);
     _helper.libraryBuilder.addProblem(
         message.messageObject, message.charOffset, message.length, message.uri);
     result.bind(result.buildInvalidTypeDeclarationBuilder(message));
@@ -2975,6 +2985,7 @@
   final TypeDeclarationBuilder declaration;
   List<UnresolvedType>? typeArguments;
 
+  @override
   final String targetName;
 
   Expression? _expression;
@@ -3396,8 +3407,10 @@
 ///   }
 ///
 class ReadOnlyAccessGenerator extends AbstractReadOnlyAccessGenerator {
+  @override
   final String targetName;
 
+  @override
   Expression expression;
 
   ReadOnlyAccessGenerator(ExpressionGeneratorHelper helper, Token token,
@@ -3427,6 +3440,7 @@
 
   Expression _createRead() => expression;
 
+  @override
   Expression _makeInvalidWrite(Expression value) {
     switch (kind) {
       case ReadOnlyAccessKind.ConstVariable:
@@ -4172,17 +4186,21 @@
         suppressMessage: true);
   }
 
+  @override
   Expression buildSimpleRead() => buildProblem();
 
+  @override
   Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return buildProblem();
   }
 
+  @override
   Expression buildIfNullAssignment(Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return buildProblem();
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -4191,36 +4209,44 @@
     return buildProblem();
   }
 
+  @override
   Expression buildPrefixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildProblem();
   }
 
+  @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildProblem();
   }
 
+  @override
   Expression _makeInvalidRead([UnresolvedKind? unresolvedKind]) =>
       buildProblem();
 
+  @override
   Expression _makeInvalidWrite(Expression value) => buildProblem();
 
+  @override
   List<Initializer> buildFieldInitializer(Map<String, int>? initializedFields) {
     return <Initializer>[_helper.buildInvalidInitializer(buildProblem())];
   }
 
+  @override
   Expression doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
     return buildProblem();
   }
 
+  @override
   Expression buildSelectorAccess(
       Selector send, int operatorOffset, bool isNullAware) {
     return buildProblem();
   }
 
+  @override
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments) {
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
@@ -4236,10 +4262,12 @@
     return result;
   }
 
+  @override
   Expression qualifiedLookup(Token name) {
     return buildProblem();
   }
 
+  @override
   Expression invokeConstructor(
       List<UnresolvedType>? typeArguments,
       String name,
@@ -4325,13 +4353,16 @@
       {this.isSuper: false})
       : super(helper, token);
 
+  @override
   String get _plainNameForRead {
     return unsupported(
         "${isSuper ? 'super' : 'this'}.plainNameForRead", fileOffset, _uri);
   }
 
+  @override
   String get _debugName => "ThisAccessGenerator";
 
+  @override
   Expression buildSimpleRead() {
     if (!isSuper) {
       if (inFieldInitializer && !inLateFieldInitializer) {
@@ -4368,6 +4399,7 @@
     }
   }
 
+  @override
   buildSelectorAccess(Selector send, int operatorOffset, bool isNullAware) {
     Name name = send.name;
     Arguments? arguments = send.arguments;
@@ -4418,6 +4450,7 @@
     }
   }
 
+  @override
   doInvocation(
       int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
       {bool isTypeArgumentsInForest = false}) {
@@ -4517,15 +4550,18 @@
     }
   }
 
+  @override
   Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return buildAssignmentError();
   }
 
+  @override
   Expression buildIfNullAssignment(Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return buildAssignmentError();
   }
 
+  @override
   Expression buildCompoundAssignment(Name binaryOperator, Expression value,
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
@@ -4534,11 +4570,13 @@
     return buildAssignmentError();
   }
 
+  @override
   Expression buildPrefixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildAssignmentError();
   }
 
+  @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: TreeNode.noOffset, bool voidContext: false}) {
     return buildAssignmentError();
@@ -4591,8 +4629,10 @@
       ExpressionGeneratorHelper helper, Token token, this.message)
       : super(helper, token);
 
+  @override
   String get _plainNameForRead => token.lexeme;
 
+  @override
   String get _debugName => "IncompleteErrorGenerator";
 
   @override
@@ -4645,6 +4685,7 @@
 // TODO(johnniwinther): Remove this in favor of [ParenthesizedExpression] when
 // the [TypePromoter] is replaced by [FlowAnalysis].
 class ParenthesizedExpressionGenerator extends AbstractReadOnlyAccessGenerator {
+  @override
   final Expression expression;
 
   ParenthesizedExpressionGenerator(
@@ -4661,10 +4702,11 @@
   Expression _createRead() =>
       _helper.forest.createParenthesized(fileOffset, expression);
 
+  @override
   String get _debugName => "ParenthesizedExpressionGenerator";
 
-  /* Expression | Generator */ buildSelectorAccess(
-      Selector send, int operatorOffset, bool isNullAware) {
+  /* Expression | Generator */ @override
+  buildSelectorAccess(Selector send, int operatorOffset, bool isNullAware) {
     if (send is InvocationSelector) {
       return _helper.buildMethodInvocation(
           _createRead(), send.name, send.arguments, offsetForToken(send.token),
@@ -4736,6 +4778,7 @@
 
   void printOn(StringSink sink);
 
+  @override
   String toString() {
     StringBuffer buffer = new StringBuffer();
     buffer.write(_debugName);
@@ -4815,6 +4858,7 @@
 ///    a?.b = c;
 ///
 class PropertySelector extends Selector {
+  @override
   final Name name;
 
   PropertySelector(ExpressionGeneratorHelper helper, Token token, this.name)
@@ -4823,6 +4867,7 @@
   @override
   String get _debugName => 'PropertySelector';
 
+  @override
   withReceiver(Object? receiver, int operatorOffset,
       {bool isNullAware: false}) {
     if (receiver is Generator) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index fa8be39..670c4bc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -874,22 +874,27 @@
     setParents(declarations, this);
   }
 
+  @override
   R accept<R>(v) {
     throw unsupported("accept", fileOffset, uri);
   }
 
+  @override
   R accept1<R, A>(v, arg) {
     throw unsupported("accept1", fileOffset, uri);
   }
 
+  @override
   visitChildren(v) {
     throw unsupported("visitChildren", fileOffset, uri);
   }
 
+  @override
   transformChildren(v) {
     throw unsupported("transformChildren", fileOffset, uri);
   }
 
+  @override
   transformOrRemoveChildren(v) {
     throw unsupported("transformOrRemoveChildren", fileOffset, uri);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
index af85f4c..3ea57a0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
@@ -91,6 +91,7 @@
 }
 
 class _ImplicitFieldTypeRoot extends ImplicitFieldType {
+  @override
   final SourceFieldBuilder fieldBuilder;
   List<ImplicitFieldType>? _overriddenFields;
   Token? initializerToken;
@@ -98,10 +99,12 @@
 
   _ImplicitFieldTypeRoot(this.fieldBuilder, this.initializerToken) : super._();
 
+  @override
   DartType inferType() {
     return fieldBuilder.inferType();
   }
 
+  @override
   DartType computeType() {
     if (isStarted) {
       fieldBuilder.library.addProblem(
@@ -161,10 +164,12 @@
     return inferredType;
   }
 
+  @override
   void addOverride(ImplicitFieldType other) {
     (_overriddenFields ??= []).add(other);
   }
 
+  @override
   DartType checkInferred(DartType type) {
     if (_overriddenFields != null) {
       for (ImplicitFieldType overridden in _overriddenFields!) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 02efb6f..2b0b76f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -903,6 +903,7 @@
     return const StatementInferenceResult();
   }
 
+  @override
   ExpressionInferenceResult visitDoubleLiteral(
       DoubleLiteral node, DartType typeContext) {
     return new ExpressionInferenceResult(
@@ -6246,6 +6247,7 @@
     return new ExpressionInferenceResult(inferredType, node);
   }
 
+  @override
   ExpressionInferenceResult visitThisExpression(
       ThisExpression node, DartType typeContext) {
     inferrer.flowAnalysis.thisOrSuper(node, inferrer.thisType!);
@@ -6941,6 +6943,7 @@
   ForInResult(this.variable, this.iterable, this.syntheticAssignment,
       this.expressionSideEffects);
 
+  @override
   String toString() => 'ForInResult($variable,$iterable,'
       '$syntheticAssignment,$expressionSideEffects)';
 }
@@ -6959,6 +6962,7 @@
 
   LocalForInVariable(this.variableSet);
 
+  @override
   DartType computeElementType(TypeInferrerImpl inferrer) {
     VariableDeclaration variable = variableSet.variable;
     DartType? promotedType;
@@ -6968,6 +6972,7 @@
     return promotedType ?? variable.type;
   }
 
+  @override
   Expression inferAssignment(TypeInferrerImpl inferrer, DartType rhsType) {
     DartType variableType =
         inferrer.computeGreatestClosure(variableSet.variable.type);
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 658e06a..3a1de7d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -87,12 +87,14 @@
 class AllInferredTypeArgumentsInfo extends TypeArgumentsInfo {
   const AllInferredTypeArgumentsInfo();
 
+  @override
   bool isInferred(int index) => true;
 }
 
 class NoneInferredTypeArgumentsInfo extends TypeArgumentsInfo {
   const NoneInferredTypeArgumentsInfo();
 
+  @override
   bool isInferred(int index) => false;
 }
 
@@ -101,6 +103,7 @@
 
   ExtensionMethodTypeArgumentsInfo(this.arguments);
 
+  @override
   bool isInferred(int index) {
     if (index < arguments._extensionTypeParameterCount) {
       // The index refers to a type argument for a type parameter declared on
@@ -114,6 +117,7 @@
         arguments._explicitTypeArgumentCount;
   }
 
+  @override
   int getOffsetForIndex(int index, int offset) {
     if (index < arguments._extensionTypeParameterCount) {
       return arguments._extensionTypeArgumentOffset ?? offset;
@@ -696,6 +700,7 @@
     return visitor.visitDeferredCheck(this, typeContext);
   }
 
+  @override
   InternalExpressionKind get kind => InternalExpressionKind.DeferredCheck;
 
   @override
@@ -1032,6 +1037,7 @@
 
 class ShadowLargeIntLiteral extends IntLiteral implements ExpressionJudgment {
   final String literal;
+  @override
   final int fileOffset;
   bool isParenthesized = false;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 93fb9a8..64ce17a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -152,6 +152,7 @@
   SourceLoader createLoader() =>
       new SourceLoader(fileSystem, includeComments, this);
 
+  @override
   void addSourceInformation(
       Uri importUri, Uri fileUri, List<int> lineStarts, List<int> sourceCode) {
     uriToSource[fileUri] =
@@ -289,6 +290,7 @@
     return result;
   }
 
+  @override
   void breakCycle(ClassBuilder builder) {
     Class cls = builder.cls;
     cls.implementedTypes.clear();
@@ -1380,6 +1382,7 @@
     }
   }
 
+  @override
   void releaseAncillaryResources() {
     component = null;
   }
@@ -1408,6 +1411,7 @@
 
   KernelDiagnosticReporter(this.loader);
 
+  @override
   void report(Message message, int charOffset, int length, Uri? fileUri,
       {List<LocatedMessage>? context}) {
     loader.addProblem(message, charOffset, noLength, fileUri, context: context);
diff --git a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
index 0c76efe..7199ba7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
@@ -25,11 +25,13 @@
 
 /// Builder to represent the `deferLibrary.loadLibrary` calls and tear-offs.
 class LoadLibraryBuilder extends BuilderImpl {
+  @override
   final SourceLibraryBuilder parent;
 
   final LibraryDependency importDependency;
 
   /// Offset of the import prefix.
+  @override
   final int charOffset;
 
   /// Synthetic static method to represent the tear-off of 'loadLibrary'.  If
@@ -38,6 +40,7 @@
 
   LoadLibraryBuilder(this.parent, this.importDependency, this.charOffset);
 
+  @override
   Uri get fileUri => parent.fileUri;
 
   LoadLibrary createLoadLibrary(
diff --git a/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart b/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
index 4cab9fe..2c1e357 100644
--- a/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
@@ -47,6 +47,7 @@
     _addMethodFunctionType = addMethod.getterType as FunctionType;
   }
 
+  @override
   TreeNode visitSetLiteral(SetLiteral node) {
     if (node.isConst) return node;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index 46c52c1..608b28e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -438,6 +438,7 @@
 /// Type variables are represented by their indices in the corresponding
 /// declaration.
 class TypeVariablesGraph implements Graph<int> {
+  @override
   late List<int> vertices;
   List<TypeVariableBuilder> variables;
   List<TypeBuilder> bounds;
@@ -491,6 +492,7 @@
 
   /// Returns indices of type variables that depend on the type variable with
   /// [index].
+  @override
   Iterable<int> neighborsOf(int index) {
     return edges[index];
   }
@@ -1095,6 +1097,7 @@
 class TypeVariableSearch implements DartTypeVisitor<bool> {
   const TypeVariableSearch();
 
+  @override
   bool defaultDartType(DartType node) => throw "unsupported";
 
   bool anyTypeVariables(List<DartType> types) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
index 7f6631d..550c2d2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
@@ -41,20 +41,14 @@
   @override
   TypeBuilder visitInvalidType(InvalidType node) {
     return new FixedTypeBuilder(
-        node,
-        /* fileUri = */ null,
-        /* charOffset = */ null);
+        node, /* fileUri = */ null, /* charOffset = */ null);
   }
 
   @override
   TypeBuilder visitDynamicType(DynamicType node) {
     // 'dynamic' is always nullable.
-    return new NamedTypeBuilder(
-        "dynamic",
-        const NullabilityBuilder.nullable(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null)
+    return new NamedTypeBuilder("dynamic", const NullabilityBuilder.nullable(),
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
       ..bind(new DynamicTypeDeclarationBuilder(
           const DynamicType(), loader.coreLibrary, -1));
   }
@@ -62,12 +56,8 @@
   @override
   TypeBuilder visitVoidType(VoidType node) {
     // 'void' is always nullable.
-    return new NamedTypeBuilder(
-        "void",
-        const NullabilityBuilder.nullable(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null)
+    return new NamedTypeBuilder("void", const NullabilityBuilder.nullable(),
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
       ..bind(new VoidTypeDeclarationBuilder(
           const VoidType(), loader.coreLibrary, -1));
   }
@@ -85,12 +75,8 @@
 
   @override
   TypeBuilder visitNullType(NullType node) {
-    return new NamedTypeBuilder(
-        "Null",
-        new NullabilityBuilder.nullable(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null)
+    return new NamedTypeBuilder("Null", new NullabilityBuilder.nullable(),
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null)
       ..bind(new NullTypeDeclarationBuilder(node, loader.coreLibrary, -1));
   }
 
@@ -179,6 +165,7 @@
         /* charOffset = */ TreeNode.noOffset);
   }
 
+  @override
   TypeBuilder visitTypeParameterType(TypeParameterType node) {
     TypeParameter parameter = node.parameter;
     TreeNode? kernelClassOrTypeDef = parameter.parent;
@@ -198,6 +185,7 @@
       ..bind(new TypeVariableBuilder.fromKernel(parameter, library));
   }
 
+  @override
   TypeBuilder visitTypedefType(TypedefType node) {
     throw "Not implemented";
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
index 8a23b53..57d4f7c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
@@ -105,8 +105,10 @@
     }
   }
 
+  @override
   void defaultDartType(DartType type) {}
 
+  @override
   void visitTypedefType(TypedefType node) {
     Typedef typedefNode = node.typedefNode;
     result.add(nameForEntity(
@@ -127,28 +129,34 @@
     addNullability(node.nullability);
   }
 
+  @override
   void visitInvalidType(InvalidType node) {
     // TODO(askesc): Throw internal error if InvalidType appears in diagnostics.
     result.add("invalid-type");
   }
 
+  @override
   void visitNeverType(NeverType node) {
     result.add("Never");
     addNullability(node.declaredNullability);
   }
 
+  @override
   void visitNullType(NullType node) {
     result.add("Null");
   }
 
+  @override
   void visitDynamicType(DynamicType node) {
     result.add("dynamic");
   }
 
+  @override
   void visitVoidType(VoidType node) {
     result.add("void");
   }
 
+  @override
   void visitTypeParameterType(TypeParameterType node) {
     TreeNode? parent = node.parameter;
     while (parent is! Library && parent != null) {
@@ -166,6 +174,7 @@
     addNullability(node.declaredNullability);
   }
 
+  @override
   void visitFunctionType(FunctionType node) {
     node.returnType.accept(this);
     result.add(" Function");
@@ -221,6 +230,7 @@
     addNullability(node.nullability);
   }
 
+  @override
   void visitInterfaceType(InterfaceType node) {
     Class classNode = node.classNode;
     // TODO(johnniwinther): Ensure enclosing libraries on classes earlier
@@ -244,6 +254,7 @@
     addNullability(node.nullability);
   }
 
+  @override
   void visitFutureOrType(FutureOrType node) {
     result.add("FutureOr<");
     node.typeArgument.accept(this);
@@ -251,6 +262,7 @@
     addNullability(node.declaredNullability);
   }
 
+  @override
   void visitExtensionType(ExtensionType node) {
     // TODO(johnniwinther): Ensure enclosing libraries on extensions earlier
     // in the compiler to ensure types in error messages have context.
@@ -273,24 +285,30 @@
     addNullability(node.declaredNullability);
   }
 
+  @override
   void defaultConstant(Constant node) {}
 
+  @override
   void visitNullConstant(NullConstant node) {
     result.add('${node.value}');
   }
 
+  @override
   void visitBoolConstant(BoolConstant node) {
     result.add('${node.value}');
   }
 
+  @override
   void visitIntConstant(IntConstant node) {
     result.add('${node.value}');
   }
 
+  @override
   void visitDoubleConstant(DoubleConstant node) {
     result.add('${node.value}');
   }
 
+  @override
   void visitSymbolConstant(SymbolConstant node) {
     String text = node.libraryReference != null
         ? '#${node.libraryReference!.asLibrary.importUri}::${node.name}'
@@ -298,10 +316,12 @@
     result.add(text);
   }
 
+  @override
   void visitStringConstant(StringConstant node) {
     result.add(json.encode(node.value));
   }
 
+  @override
   void visitInstanceConstant(InstanceConstant node) {
     new InterfaceType(node.classNode, Nullability.legacy, node.typeArguments)
         .accept(this);
@@ -317,6 +337,7 @@
     result.add("}");
   }
 
+  @override
   void visitListConstant(ListConstant node) {
     result.add("<");
     node.typeArgument.accept(this);
@@ -330,6 +351,7 @@
     result.add("]");
   }
 
+  @override
   void visitSetConstant(SetConstant node) {
     result.add("<");
     node.typeArgument.accept(this);
@@ -343,6 +365,7 @@
     result.add("}");
   }
 
+  @override
   void visitMapConstant(MapConstant node) {
     result.add("<");
     node.keyType.accept(this);
@@ -360,6 +383,7 @@
     result.add("}");
   }
 
+  @override
   void visitStaticTearOffConstant(StaticTearOffConstant node) {
     Procedure procedure = node.target;
     Class? classNode = procedure.enclosingClass;
@@ -374,6 +398,7 @@
     result.add(procedure.name.text);
   }
 
+  @override
   void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
     Member constructor = node.target;
     Class classNode = constructor.enclosingClass!;
@@ -386,6 +411,7 @@
     result.add(constructor.name.text);
   }
 
+  @override
   void visitRedirectingFactoryTearOffConstant(
       RedirectingFactoryTearOffConstant node) {
     Member constructor = node.target;
@@ -399,6 +425,7 @@
     result.add(constructor.name.text);
   }
 
+  @override
   void visitInstantiationConstant(InstantiationConstant node) {
     node.tearOffConstant.accept(this);
     if (node.types.isNotEmpty) {
@@ -413,6 +440,7 @@
     }
   }
 
+  @override
   void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
     node.tearOffConstant.accept(this);
     if (node.parameters.isNotEmpty) {
@@ -443,10 +471,12 @@
     }
   }
 
+  @override
   void visitTypeLiteralConstant(TypeLiteralConstant node) {
     node.type.accept(this);
   }
 
+  @override
   void visitUnevaluatedConstant(UnevaluatedConstant node) {
     unsupported('printing unevaluated constants', -1, null);
   }
@@ -464,6 +494,7 @@
   LabeledNode(
       this.node, this.name, this.importUri, this.fileUri, this.typeLabeler);
 
+  @override
   String toString() {
     List<LabeledNode> entityForName = typeLabeler.nameMap[name]!;
     if (entityForName.length == 1) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index a077ad7..f1f909e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -152,10 +152,12 @@
 class ByteSink implements Sink<List<int>> {
   final BytesBuilder builder = new BytesBuilder();
 
+  @override
   void add(List<int> data) {
     builder.add(data);
   }
 
+  @override
   void close() {}
 }
 
diff --git a/pkg/front_end/lib/src/fasta/library_graph.dart b/pkg/front_end/lib/src/fasta/library_graph.dart
index bc01000..95a3627 100644
--- a/pkg/front_end/lib/src/fasta/library_graph.dart
+++ b/pkg/front_end/lib/src/fasta/library_graph.dart
@@ -16,8 +16,10 @@
 
   LibraryGraph(this.libraries);
 
+  @override
   Iterable<Uri> get vertices => libraries.keys;
 
+  @override
   Iterable<Uri> neighborsOf(Uri vertex) sync* {
     Library? library = libraries[vertex];
     if (library == null) {
diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart
index 0a41ca0..8cee002 100644
--- a/pkg/front_end/lib/src/fasta/modifier.dart
+++ b/pkg/front_end/lib/src/fasta/modifier.dart
@@ -88,6 +88,7 @@
     return unhandled(string, "Modifier.fromString", -1, null);
   }
 
+  @override
   toString() => "modifier(${'$kind'.substring('ModifierEnum.'.length)})";
 
   static int toMask(List<Modifier>? modifiers) {
diff --git a/pkg/front_end/lib/src/fasta/problems.dart b/pkg/front_end/lib/src/fasta/problems.dart
index 00e16c9..c373f2f 100644
--- a/pkg/front_end/lib/src/fasta/problems.dart
+++ b/pkg/front_end/lib/src/fasta/problems.dart
@@ -34,6 +34,7 @@
                 .withArguments(severityTexts[severity]!, "$trace")
                 .withoutLocation();
 
+  @override
   toString() => "DebugAbort: ${message.message}";
 }
 
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index a04098c..6cf5051 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -81,6 +81,7 @@
 
   Scope? get parent => _parent;
 
+  @override
   String toString() => "Scope($classNameOrDebugName, ${_local.keys})";
 }
 
@@ -604,6 +605,7 @@
     }
   }
 
+  @override
   String toString() => "ConstructorScope($className, ${local.keys})";
 }
 
@@ -676,14 +678,17 @@
 
   final Builder builder;
 
+  @override
   final int charOffset;
 
+  @override
   final Uri fileUri;
 
   ProblemBuilder(this.name, this.builder, this.charOffset, this.fileUri);
 
   get target => null;
 
+  @override
   bool get hasProblem => true;
 
   Message get message;
@@ -778,6 +783,7 @@
   @override
   Iterable<Member> get exportedMembers => const [];
 
+  @override
   bool get isNative => false;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 37f45ac..fb22647 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -77,6 +77,7 @@
 import 'stack_listener_impl.dart';
 
 class DietListener extends StackListenerImpl {
+  @override
   final SourceLibraryBuilder libraryBuilder;
 
   final ClassHierarchy hierarchy;
diff --git a/pkg/front_end/lib/src/fasta/source/diet_parser.dart b/pkg/front_end/lib/src/fasta/source/diet_parser.dart
index 15b4333..0299973 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_parser.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_parser.dart
@@ -17,6 +17,7 @@
       : super(listener,
             useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
 
+  @override
   Token parseFormalParametersRest(Token token, MemberKind kind) {
     return skipFormalParametersRest(token, kind);
   }
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index a386b07..c1ac2cf 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -102,6 +102,7 @@
 }
 
 class OutlineBuilder extends StackListenerImpl {
+  @override
   final SourceLibraryBuilder libraryBuilder;
 
   final bool enableNative;
@@ -991,30 +992,35 @@
         endToken, _MethodKind.classMethod);
   }
 
+  @override
   void endClassConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.classConstructor);
   }
 
+  @override
   void endMixinMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.mixinMethod);
   }
 
+  @override
   void endExtensionMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.extensionMethod);
   }
 
+  @override
   void endMixinConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.mixinConstructor);
   }
 
+  @override
   void endExtensionConstructor(Token? getOrSet, Token beginToken,
       Token beginParam, Token? beginInitializers, Token endToken) {
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
@@ -2213,6 +2219,7 @@
     push(asyncMarkerFromTokens(asyncToken, starToken));
   }
 
+  @override
   void addProblem(Message message, int charOffset, int length,
       {bool wasHandled: false, List<LocatedMessage>? context}) {
     libraryBuilder.addProblem(message, charOffset, length, uri,
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index d8b2fdb..0809082 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -88,6 +88,7 @@
 
   final List<ConstructorReferenceBuilder>? constructorReferences;
 
+  @override
   TypeBuilder? mixedInTypeBuilder;
 
   bool isMixinDeclaration;
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 8bb7538..d528324 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -79,6 +79,7 @@
   @override
   SourceExtensionBuilder get origin => _origin ?? this;
 
+  @override
   Extension get extension => isPatch ? origin._extension : _extension;
 
   /// Builds the [Extension] for this extension build and inserts the members
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 5c4ebef3..cfe588b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -133,6 +133,7 @@
 class SourceLibraryBuilder extends LibraryBuilderImpl {
   static const String MALFORMED_URI_SCHEME = "org-dartlang-malformed-uri";
 
+  @override
   final SourceLoader loader;
 
   final TypeParameterScopeBuilder libraryDeclaration;
@@ -151,6 +152,7 @@
 
   final Scope importScope;
 
+  @override
   final Uri fileUri;
 
   final Uri? _packageUri;
@@ -159,6 +161,7 @@
 
   final List<Object> accessors = <Object>[];
 
+  @override
   String? name;
 
   String? partOfName;
@@ -211,6 +214,7 @@
   // This allows code generated in one library to use the private namespace of
   // another, for example during expression compilation (debugging).
   Library get nameOrigin => _nameOrigin?.library ?? library;
+  @override
   LibraryBuilder get nameOriginBuilder => _nameOrigin ?? this;
   final LibraryBuilder? _nameOrigin;
 
@@ -1420,13 +1424,16 @@
   @override
   SourceLibraryBuilder get origin => actualOrigin ?? this;
 
+  @override
   Uri get importUri => library.importUri;
 
+  @override
   void addSyntheticDeclarationOfDynamic() {
     addBuilder("dynamic",
         new DynamicTypeDeclarationBuilder(const DynamicType(), this, -1), -1);
   }
 
+  @override
   void addSyntheticDeclarationOfNever() {
     addBuilder(
         "Never",
@@ -1435,6 +1442,7 @@
         -1);
   }
 
+  @override
   void addSyntheticDeclarationOfNull() {
     // TODO(dmitryas): Uncomment the following when the Null class is removed
     // from the SDK.
@@ -2861,6 +2869,7 @@
         suppressMessage: false);
   }
 
+  @override
   int finishDeferredLoadTearoffs() {
     int total = 0;
     for (Import import in imports) {
@@ -2875,6 +2884,7 @@
     return total;
   }
 
+  @override
   int finishForwarders() {
     int count = 0;
     CloneVisitorNotMembers cloner = new CloneVisitorNotMembers();
@@ -2929,6 +2939,7 @@
     nativeMethods.add(method);
   }
 
+  @override
   int finishNativeMethods() {
     for (FunctionBuilder method in nativeMethods) {
       method.becomeNative(loader);
@@ -2966,6 +2977,7 @@
     return copy;
   }
 
+  @override
   int finishTypeVariables(ClassBuilder object, TypeBuilder dynamicType) {
     int count = boundlessTypeVariables.length;
     // Ensure that type parameters are built after their dependencies by sorting
@@ -3072,6 +3084,7 @@
     _pendingNullabilities.clear();
   }
 
+  @override
   int computeVariances() {
     int count = 0;
     for (Builder? declaration in libraryDeclaration.members!.values) {
@@ -3176,6 +3189,7 @@
     return false;
   }
 
+  @override
   int computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder nullType,
       TypeBuilder bottomType, ClassBuilder objectClass) {
     int count = 0;
@@ -3465,6 +3479,7 @@
     }
   }
 
+  @override
   int finishPatchMethods() {
     if (!isPatch) return 0;
     int count = 0;
@@ -4538,8 +4553,10 @@
 
   bool get valid => true;
 
+  @override
   int get hashCode => version.hashCode * 13 + isExplicit.hashCode * 19;
 
+  @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
     return other is LanguageVersion &&
@@ -4547,6 +4564,7 @@
         isExplicit == other.isExplicit;
   }
 
+  @override
   String toString() {
     return 'LanguageVersion(version=$version,isExplicit=$isExplicit,'
         'fileUri=$fileUri,charOffset=$charOffset,charCount=$charCount)';
@@ -4554,11 +4572,17 @@
 }
 
 class InvalidLanguageVersion implements LanguageVersion {
+  @override
   final Uri fileUri;
+  @override
   final int charOffset;
+  @override
   final int charCount;
+  @override
   final Version version;
+  @override
   final bool isExplicit;
+  @override
   bool isFinal = false;
 
   InvalidLanguageVersion(this.fileUri, this.charOffset, this.charCount,
@@ -4567,13 +4591,16 @@
   @override
   bool get valid => false;
 
+  @override
   int get hashCode => isExplicit.hashCode * 19;
 
+  @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
     return other is InvalidLanguageVersion && isExplicit == other.isExplicit;
   }
 
+  @override
   String toString() {
     return 'InvalidLanguageVersion(isExplicit=$isExplicit,'
         'fileUri=$fileUri,charOffset=$charOffset,charCount=$charCount)';
@@ -4583,6 +4610,7 @@
 class ImplicitLanguageVersion implements LanguageVersion {
   @override
   final Version version;
+  @override
   bool isFinal = false;
 
   ImplicitLanguageVersion(this.version);
@@ -4602,6 +4630,7 @@
   @override
   bool get isExplicit => false;
 
+  @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
     return other is ImplicitLanguageVersion && version == other.version;
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index b1247dc..ea3cf9b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -203,9 +203,11 @@
 
   ClassHierarchyBuilder get builderHierarchy => _builderHierarchy!;
 
+  @override
   Template<SummaryTemplate> get outlineSummaryTemplate =>
       templateSourceOutlineSummary;
 
+  @override
   bool get isSourceLoader => true;
 
   Future<Token> tokenize(SourceLibraryBuilder library,
@@ -474,6 +476,7 @@
     return bytes.sublist(0, bytes.length - 1);
   }
 
+  @override
   Future<Null> buildOutline(SourceLibraryBuilder library) async {
     Token tokens = await tokenize(library);
     // ignore: unnecessary_null_comparison
@@ -482,6 +485,7 @@
     new ClassMemberParser(listener).parseUnit(tokens);
   }
 
+  @override
   Future<Null> buildBody(LibraryBuilder library) async {
     if (library is SourceLibraryBuilder) {
       // We tokenize source files twice to keep memory usage low. This is the
@@ -565,6 +569,7 @@
         parameters);
   }
 
+  @override
   KernelTarget get target => super.target as KernelTarget;
 
   DietListener createDietListener(SourceLibraryBuilder library) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index 37971a9..70a6813 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -42,15 +42,19 @@
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
 class SourceTypeAliasBuilder extends TypeAliasBuilderImpl {
+  @override
   final TypeBuilder? type;
 
   final List<TypeVariableBuilder>? _typeVariables;
 
   /// The [Typedef] built by this builder.
+  @override
   final Typedef typedef;
 
+  @override
   DartType? thisType;
 
+  @override
   Map<Name, Procedure>? tearOffs;
 
   SourceTypeAliasBuilder(
@@ -133,6 +137,7 @@
     return typedef;
   }
 
+  @override
   DartType buildThisType() {
     if (thisType != null) {
       if (identical(thisType, pendingTypeAliasMarker)) {
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
index 0bf1fdb..2a40803 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
@@ -62,6 +62,7 @@
   }
 
   /// Used to report an internal error encountered in the stack listener.
+  @override
   internalProblem(Message message, int charOffset, Uri uri) {
     return problems.internalProblem(message, charOffset, uri);
   }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
index 48929d9..6904eb1 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
@@ -113,6 +113,7 @@
 }
 
 class _SyncClosureContext implements ClosureContext {
+  @override
   bool get isAsync => false;
 
   /// The typing expectation for the subexpression of a `return` statement
@@ -462,6 +463,7 @@
 /// Keeps track of information about the innermost function or closure being
 /// inferred.
 class _AsyncClosureContext implements ClosureContext {
+  @override
   bool get isAsync => true;
 
   /// The typing expectation for the subexpression of a `return` statement
@@ -496,6 +498,7 @@
   /// being inferred.
   List<DartType>? _returnExpressionTypes;
 
+  @override
   DartType? futureValueType;
 
   _AsyncClosureContext(this._returnContext, this._declaredReturnType,
@@ -870,6 +873,7 @@
 /// Keeps track of information about the innermost function or closure being
 /// inferred.
 class _SyncStarClosureContext implements ClosureContext {
+  @override
   bool get isAsync => false;
 
   /// The typing expectation for the subexpression of a `return` or `yield`
@@ -1000,6 +1004,7 @@
 /// Keeps track of information about the innermost function or closure being
 /// inferred.
 class _AsyncStarClosureContext implements ClosureContext {
+  @override
   bool get isAsync => true;
 
   /// The typing expectation for the subexpression of a `return` or `yield`
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
index caf6767..ce53057 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
@@ -1096,6 +1096,7 @@
 
   _ProtoConstraint.upper(this.parameter, this.bound) : isUpper = true;
 
+  @override
   String toString() {
     return isUpper
         ? "${parameter.name} <: $bound"
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 41166bc..654c67a 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -179,9 +179,11 @@
 
   final TypeInferenceEngine engine;
 
+  @override
   final FlowAnalysis<TreeNode, Statement, Expression, VariableDeclaration,
       DartType> flowAnalysis;
 
+  @override
   final AssignedVariables<TreeNode, VariableDeclaration> assignedVariables;
 
   final InferenceDataForTesting? dataForTesting;
@@ -198,6 +200,7 @@
 
   final Instrumentation? instrumentation;
 
+  @override
   final TypeSchemaEnvironment typeSchemaEnvironment;
 
   final InterfaceType? thisType;
@@ -1835,6 +1838,7 @@
   }
 
   /// Modifies a type as appropriate when inferring a declared variable's type.
+  @override
   DartType inferDeclarationType(DartType initializerType,
       {bool forSyntheticVariable: false}) {
     if (initializerType is NullType) {
@@ -1994,6 +1998,7 @@
     return result;
   }
 
+  @override
   ExpressionInferenceResult inferExpression(
       Expression expression, DartType typeContext, bool typeNeeded,
       {bool isVoidAllowed: false, bool forEffect: false}) {
@@ -4646,28 +4651,36 @@
 }
 
 class SingleStatementInferenceResult implements StatementInferenceResult {
+  @override
   final Statement statement;
 
   SingleStatementInferenceResult(this.statement);
 
+  @override
   bool get hasChanged => true;
 
+  @override
   int get statementCount => 1;
 
+  @override
   List<Statement> get statements =>
       throw new UnsupportedError('SingleStatementInferenceResult.statements');
 }
 
 class MultipleStatementInferenceResult implements StatementInferenceResult {
   final int fileOffset;
+  @override
   final List<Statement> statements;
 
   MultipleStatementInferenceResult(this.fileOffset, this.statements);
 
+  @override
   bool get hasChanged => true;
 
+  @override
   Statement get statement => new Block(statements)..fileOffset = fileOffset;
 
+  @override
   int get statementCount => statements.length;
 }
 
@@ -4776,6 +4789,7 @@
 
   ExpressionInferenceResult stopShorting() => this;
 
+  @override
   String toString() => 'ExpressionInferenceResult($inferredType,$expression)';
 }
 
@@ -4841,6 +4855,7 @@
       ..fileOffset = _nullAwareFileOffset;
   }
 
+  @override
   String toString() =>
       'NullAwareGuard($_nullAwareVariable,$_nullAwareFileOffset,'
       '$_nullAwareEquals)';
@@ -4850,9 +4865,11 @@
 /// variable.
 class NullAwareExpressionInferenceResult implements ExpressionInferenceResult {
   /// The inferred type of the expression.
+  @override
   final DartType inferredType;
 
   /// The inferred type of the [nullAwareAction].
+  @override
   final DartType nullAwareActionType;
 
   @override
@@ -4867,12 +4884,14 @@
         // ignore: unnecessary_null_comparison
         assert(nullAwareAction != null);
 
+  @override
   Expression get expression {
     throw new UnsupportedError('Shorting must be explicitly stopped before'
         'accessing the expression result of a '
         'NullAwareExpressionInferenceResult');
   }
 
+  @override
   ExpressionInferenceResult stopShorting() {
     Expression expression = nullAwareAction;
     Link<NullAwareGuard> nullAwareGuard = nullAwareGuards;
@@ -4884,6 +4903,7 @@
     return new ExpressionInferenceResult(inferredType, expression);
   }
 
+  @override
   String toString() =>
       'NullAwareExpressionInferenceResult($inferredType,$nullAwareGuards,'
       '$nullAwareAction)';
@@ -5087,8 +5107,11 @@
 }
 
 class ExtensionAccessTarget extends ObjectAccessTarget {
+  @override
   final Member? tearoffTarget;
+  @override
   final ProcedureKind extensionMethodKind;
+  @override
   final List<DartType> inferredExtensionTypeArguments;
 
   ExtensionAccessTarget(Member member, this.tearoffTarget,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
index ea946df..3e3ff0b 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
@@ -84,12 +84,14 @@
 
   TypeConstraint clone() => new TypeConstraint._(lower, upper);
 
+  @override
   String toString() =>
       '${typeSchemaToString(lower)} <: <type> <: ${typeSchemaToString(upper)}';
 }
 
 class TypeSchemaEnvironment extends HierarchyBasedTypeEnvironment
     with TypeSchemaStandardBounds {
+  @override
   final ClassHierarchy hierarchy;
 
   TypeSchemaEnvironment(CoreTypes coreTypes, this.hierarchy)
diff --git a/pkg/front_end/lib/src/fasta/util/bytes_sink.dart b/pkg/front_end/lib/src/fasta/util/bytes_sink.dart
index d945e92..594c553 100644
--- a/pkg/front_end/lib/src/fasta/util/bytes_sink.dart
+++ b/pkg/front_end/lib/src/fasta/util/bytes_sink.dart
@@ -8,10 +8,12 @@
 class BytesSink implements Sink<List<int>> {
   final BytesBuilder builder = new BytesBuilder();
 
+  @override
   void add(List<int> data) {
     builder.add(data);
   }
 
+  @override
   void close() {
     // Nothing to do.
   }
diff --git a/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart b/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart
index d238f71..dd6f52e 100644
--- a/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart
+++ b/pkg/front_end/lib/src/fasta/util/direct_parser_ast.dart
@@ -1185,6 +1185,7 @@
 }
 
 class DirectParserASTListener extends AbstractDirectParserASTListener {
+  @override
   void seen(DirectParserASTContent entry) {
     switch (entry.type) {
       case DirectParserASTType.BEGIN:
diff --git a/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
index 55b9fb2..1b9883e 100644
--- a/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/fasta/util/direct_parser_ast_helper.dart
@@ -39,6 +39,7 @@
 
   void seen(DirectParserASTContent entry);
 
+  @override
   void beginArguments(Token token) {
     DirectParserASTContentArgumentsBegin data =
         new DirectParserASTContentArgumentsBegin(DirectParserASTType.BEGIN,
@@ -46,6 +47,7 @@
     seen(data);
   }
 
+  @override
   void endArguments(int count, Token beginToken, Token endToken) {
     DirectParserASTContentArgumentsEnd data =
         new DirectParserASTContentArgumentsEnd(DirectParserASTType.END,
@@ -53,6 +55,7 @@
     seen(data);
   }
 
+  @override
   void handleAsyncModifier(Token? asyncToken, Token? starToken) {
     DirectParserASTContentAsyncModifierHandle data =
         new DirectParserASTContentAsyncModifierHandle(
@@ -62,6 +65,7 @@
     seen(data);
   }
 
+  @override
   void beginAwaitExpression(Token token) {
     DirectParserASTContentAwaitExpressionBegin data =
         new DirectParserASTContentAwaitExpressionBegin(
@@ -70,6 +74,7 @@
     seen(data);
   }
 
+  @override
   void endAwaitExpression(Token beginToken, Token endToken) {
     DirectParserASTContentAwaitExpressionEnd data =
         new DirectParserASTContentAwaitExpressionEnd(DirectParserASTType.END,
@@ -77,6 +82,7 @@
     seen(data);
   }
 
+  @override
   void endInvalidAwaitExpression(
       Token beginToken, Token endToken, MessageCode errorCode) {
     DirectParserASTContentInvalidAwaitExpressionEnd data =
@@ -88,6 +94,7 @@
     seen(data);
   }
 
+  @override
   void beginBlock(Token token, BlockKind blockKind) {
     DirectParserASTContentBlockBegin data =
         new DirectParserASTContentBlockBegin(DirectParserASTType.BEGIN,
@@ -95,6 +102,7 @@
     seen(data);
   }
 
+  @override
   void endBlock(
       int count, Token beginToken, Token endToken, BlockKind blockKind) {
     DirectParserASTContentBlockEnd data = new DirectParserASTContentBlockEnd(
@@ -106,6 +114,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidTopLevelBlock(Token token) {
     DirectParserASTContentInvalidTopLevelBlockHandle data =
         new DirectParserASTContentInvalidTopLevelBlockHandle(
@@ -114,6 +123,7 @@
     seen(data);
   }
 
+  @override
   void beginCascade(Token token) {
     DirectParserASTContentCascadeBegin data =
         new DirectParserASTContentCascadeBegin(DirectParserASTType.BEGIN,
@@ -121,12 +131,14 @@
     seen(data);
   }
 
+  @override
   void endCascade() {
     DirectParserASTContentCascadeEnd data =
         new DirectParserASTContentCascadeEnd(DirectParserASTType.END);
     seen(data);
   }
 
+  @override
   void beginCaseExpression(Token caseKeyword) {
     DirectParserASTContentCaseExpressionBegin data =
         new DirectParserASTContentCaseExpressionBegin(DirectParserASTType.BEGIN,
@@ -134,6 +146,7 @@
     seen(data);
   }
 
+  @override
   void endCaseExpression(Token colon) {
     DirectParserASTContentCaseExpressionEnd data =
         new DirectParserASTContentCaseExpressionEnd(DirectParserASTType.END,
@@ -141,6 +154,7 @@
     seen(data);
   }
 
+  @override
   void beginClassOrMixinBody(DeclarationKind kind, Token token) {
     DirectParserASTContentClassOrMixinBodyBegin data =
         new DirectParserASTContentClassOrMixinBodyBegin(
@@ -150,6 +164,7 @@
     seen(data);
   }
 
+  @override
   void endClassOrMixinBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     DirectParserASTContentClassOrMixinBodyEnd data =
@@ -161,6 +176,7 @@
     seen(data);
   }
 
+  @override
   void beginClassOrNamedMixinApplicationPrelude(Token token) {
     DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin data =
         new DirectParserASTContentClassOrNamedMixinApplicationPreludeBegin(
@@ -169,6 +185,7 @@
     seen(data);
   }
 
+  @override
   void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
     DirectParserASTContentClassDeclarationBegin data =
         new DirectParserASTContentClassDeclarationBegin(
@@ -179,6 +196,7 @@
     seen(data);
   }
 
+  @override
   void handleClassExtends(Token? extendsKeyword, int typeCount) {
     DirectParserASTContentClassExtendsHandle data =
         new DirectParserASTContentClassExtendsHandle(DirectParserASTType.HANDLE,
@@ -186,6 +204,7 @@
     seen(data);
   }
 
+  @override
   void handleClassOrMixinImplements(
       Token? implementsKeyword, int interfacesCount) {
     DirectParserASTContentClassOrMixinImplementsHandle data =
@@ -196,6 +215,7 @@
     seen(data);
   }
 
+  @override
   void handleClassHeader(Token begin, Token classKeyword, Token? nativeToken) {
     DirectParserASTContentClassHeaderHandle data =
         new DirectParserASTContentClassHeaderHandle(DirectParserASTType.HANDLE,
@@ -203,6 +223,7 @@
     seen(data);
   }
 
+  @override
   void handleRecoverClassHeader() {
     DirectParserASTContentRecoverClassHeaderHandle data =
         new DirectParserASTContentRecoverClassHeaderHandle(
@@ -210,6 +231,7 @@
     seen(data);
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     DirectParserASTContentClassDeclarationEnd data =
         new DirectParserASTContentClassDeclarationEnd(DirectParserASTType.END,
@@ -217,6 +239,7 @@
     seen(data);
   }
 
+  @override
   void beginMixinDeclaration(Token mixinKeyword, Token name) {
     DirectParserASTContentMixinDeclarationBegin data =
         new DirectParserASTContentMixinDeclarationBegin(
@@ -226,6 +249,7 @@
     seen(data);
   }
 
+  @override
   void handleMixinOn(Token? onKeyword, int typeCount) {
     DirectParserASTContentMixinOnHandle data =
         new DirectParserASTContentMixinOnHandle(DirectParserASTType.HANDLE,
@@ -233,6 +257,7 @@
     seen(data);
   }
 
+  @override
   void handleMixinHeader(Token mixinKeyword) {
     DirectParserASTContentMixinHeaderHandle data =
         new DirectParserASTContentMixinHeaderHandle(DirectParserASTType.HANDLE,
@@ -240,6 +265,7 @@
     seen(data);
   }
 
+  @override
   void handleRecoverMixinHeader() {
     DirectParserASTContentRecoverMixinHeaderHandle data =
         new DirectParserASTContentRecoverMixinHeaderHandle(
@@ -247,6 +273,7 @@
     seen(data);
   }
 
+  @override
   void endMixinDeclaration(Token mixinKeyword, Token endToken) {
     DirectParserASTContentMixinDeclarationEnd data =
         new DirectParserASTContentMixinDeclarationEnd(DirectParserASTType.END,
@@ -254,6 +281,7 @@
     seen(data);
   }
 
+  @override
   void beginUncategorizedTopLevelDeclaration(Token token) {
     DirectParserASTContentUncategorizedTopLevelDeclarationBegin data =
         new DirectParserASTContentUncategorizedTopLevelDeclarationBegin(
@@ -262,6 +290,7 @@
     seen(data);
   }
 
+  @override
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {
     DirectParserASTContentExtensionDeclarationPreludeBegin data =
         new DirectParserASTContentExtensionDeclarationPreludeBegin(
@@ -270,6 +299,7 @@
     seen(data);
   }
 
+  @override
   void beginExtensionDeclaration(Token extensionKeyword, Token? name) {
     DirectParserASTContentExtensionDeclarationBegin data =
         new DirectParserASTContentExtensionDeclarationBegin(
@@ -279,6 +309,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionDeclaration(Token extensionKeyword, Token? typeKeyword,
       Token onKeyword, Token endToken) {
     DirectParserASTContentExtensionDeclarationEnd data =
@@ -291,6 +322,7 @@
     seen(data);
   }
 
+  @override
   void beginCombinators(Token token) {
     DirectParserASTContentCombinatorsBegin data =
         new DirectParserASTContentCombinatorsBegin(DirectParserASTType.BEGIN,
@@ -298,6 +330,7 @@
     seen(data);
   }
 
+  @override
   void endCombinators(int count) {
     DirectParserASTContentCombinatorsEnd data =
         new DirectParserASTContentCombinatorsEnd(DirectParserASTType.END,
@@ -305,6 +338,7 @@
     seen(data);
   }
 
+  @override
   void beginCompilationUnit(Token token) {
     DirectParserASTContentCompilationUnitBegin data =
         new DirectParserASTContentCompilationUnitBegin(
@@ -313,6 +347,7 @@
     seen(data);
   }
 
+  @override
   void handleDirectivesOnly() {
     DirectParserASTContentDirectivesOnlyHandle data =
         new DirectParserASTContentDirectivesOnlyHandle(
@@ -320,6 +355,7 @@
     seen(data);
   }
 
+  @override
   void endCompilationUnit(int count, Token token) {
     DirectParserASTContentCompilationUnitEnd data =
         new DirectParserASTContentCompilationUnitEnd(DirectParserASTType.END,
@@ -327,6 +363,7 @@
     seen(data);
   }
 
+  @override
   void beginConstLiteral(Token token) {
     DirectParserASTContentConstLiteralBegin data =
         new DirectParserASTContentConstLiteralBegin(DirectParserASTType.BEGIN,
@@ -334,6 +371,7 @@
     seen(data);
   }
 
+  @override
   void endConstLiteral(Token token) {
     DirectParserASTContentConstLiteralEnd data =
         new DirectParserASTContentConstLiteralEnd(DirectParserASTType.END,
@@ -341,6 +379,7 @@
     seen(data);
   }
 
+  @override
   void beginConstructorReference(Token start) {
     DirectParserASTContentConstructorReferenceBegin data =
         new DirectParserASTContentConstructorReferenceBegin(
@@ -349,6 +388,7 @@
     seen(data);
   }
 
+  @override
   void endConstructorReference(Token start, Token? periodBeforeName,
       Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     DirectParserASTContentConstructorReferenceEnd data =
@@ -361,6 +401,7 @@
     seen(data);
   }
 
+  @override
   void beginDoWhileStatement(Token token) {
     DirectParserASTContentDoWhileStatementBegin data =
         new DirectParserASTContentDoWhileStatementBegin(
@@ -369,6 +410,7 @@
     seen(data);
   }
 
+  @override
   void endDoWhileStatement(
       Token doKeyword, Token whileKeyword, Token endToken) {
     DirectParserASTContentDoWhileStatementEnd data =
@@ -379,6 +421,7 @@
     seen(data);
   }
 
+  @override
   void beginDoWhileStatementBody(Token token) {
     DirectParserASTContentDoWhileStatementBodyBegin data =
         new DirectParserASTContentDoWhileStatementBodyBegin(
@@ -387,6 +430,7 @@
     seen(data);
   }
 
+  @override
   void endDoWhileStatementBody(Token token) {
     DirectParserASTContentDoWhileStatementBodyEnd data =
         new DirectParserASTContentDoWhileStatementBodyEnd(
@@ -395,6 +439,7 @@
     seen(data);
   }
 
+  @override
   void beginWhileStatementBody(Token token) {
     DirectParserASTContentWhileStatementBodyBegin data =
         new DirectParserASTContentWhileStatementBodyBegin(
@@ -403,6 +448,7 @@
     seen(data);
   }
 
+  @override
   void endWhileStatementBody(Token token) {
     DirectParserASTContentWhileStatementBodyEnd data =
         new DirectParserASTContentWhileStatementBodyEnd(DirectParserASTType.END,
@@ -410,6 +456,7 @@
     seen(data);
   }
 
+  @override
   void beginEnum(Token enumKeyword) {
     DirectParserASTContentEnumBegin data = new DirectParserASTContentEnumBegin(
         DirectParserASTType.BEGIN,
@@ -417,6 +464,7 @@
     seen(data);
   }
 
+  @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
     DirectParserASTContentEnumEnd data = new DirectParserASTContentEnumEnd(
         DirectParserASTType.END,
@@ -426,6 +474,7 @@
     seen(data);
   }
 
+  @override
   void beginExport(Token token) {
     DirectParserASTContentExportBegin data =
         new DirectParserASTContentExportBegin(DirectParserASTType.BEGIN,
@@ -433,6 +482,7 @@
     seen(data);
   }
 
+  @override
   void endExport(Token exportKeyword, Token semicolon) {
     DirectParserASTContentExportEnd data = new DirectParserASTContentExportEnd(
         DirectParserASTType.END,
@@ -441,6 +491,7 @@
     seen(data);
   }
 
+  @override
   void handleExtraneousExpression(Token token, Message message) {
     DirectParserASTContentExtraneousExpressionHandle data =
         new DirectParserASTContentExtraneousExpressionHandle(
@@ -450,6 +501,7 @@
     seen(data);
   }
 
+  @override
   void handleExpressionStatement(Token token) {
     DirectParserASTContentExpressionStatementHandle data =
         new DirectParserASTContentExpressionStatementHandle(
@@ -458,6 +510,7 @@
     seen(data);
   }
 
+  @override
   void beginFactoryMethod(
       Token lastConsumed, Token? externalToken, Token? constToken) {
     DirectParserASTContentFactoryMethodBegin data =
@@ -468,6 +521,7 @@
     seen(data);
   }
 
+  @override
   void endClassFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     DirectParserASTContentClassFactoryMethodEnd data =
@@ -478,6 +532,7 @@
     seen(data);
   }
 
+  @override
   void endMixinFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     DirectParserASTContentMixinFactoryMethodEnd data =
@@ -488,6 +543,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     DirectParserASTContentExtensionFactoryMethodEnd data =
@@ -499,6 +555,7 @@
     seen(data);
   }
 
+  @override
   void beginFormalParameter(Token token, MemberKind kind, Token? requiredToken,
       Token? covariantToken, Token? varFinalOrConst) {
     DirectParserASTContentFormalParameterBegin data =
@@ -512,6 +569,7 @@
     seen(data);
   }
 
+  @override
   void endFormalParameter(
       Token? thisKeyword,
       Token? periodAfterThis,
@@ -532,6 +590,7 @@
     seen(data);
   }
 
+  @override
   void handleNoFormalParameters(Token token, MemberKind kind) {
     DirectParserASTContentNoFormalParametersHandle data =
         new DirectParserASTContentNoFormalParametersHandle(
@@ -541,6 +600,7 @@
     seen(data);
   }
 
+  @override
   void beginFormalParameters(Token token, MemberKind kind) {
     DirectParserASTContentFormalParametersBegin data =
         new DirectParserASTContentFormalParametersBegin(
@@ -550,6 +610,7 @@
     seen(data);
   }
 
+  @override
   void endFormalParameters(
       int count, Token beginToken, Token endToken, MemberKind kind) {
     DirectParserASTContentFormalParametersEnd data =
@@ -561,6 +622,7 @@
     seen(data);
   }
 
+  @override
   void endClassFields(
       Token? abstractToken,
       Token? externalToken,
@@ -585,6 +647,7 @@
     seen(data);
   }
 
+  @override
   void endMixinFields(
       Token? abstractToken,
       Token? externalToken,
@@ -609,6 +672,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionFields(
       Token? abstractToken,
       Token? externalToken,
@@ -633,6 +697,7 @@
     seen(data);
   }
 
+  @override
   void handleForInitializerEmptyStatement(Token token) {
     DirectParserASTContentForInitializerEmptyStatementHandle data =
         new DirectParserASTContentForInitializerEmptyStatementHandle(
@@ -641,6 +706,7 @@
     seen(data);
   }
 
+  @override
   void handleForInitializerExpressionStatement(Token token, bool forIn) {
     DirectParserASTContentForInitializerExpressionStatementHandle data =
         new DirectParserASTContentForInitializerExpressionStatementHandle(
@@ -650,6 +716,7 @@
     seen(data);
   }
 
+  @override
   void handleForInitializerLocalVariableDeclaration(Token token, bool forIn) {
     DirectParserASTContentForInitializerLocalVariableDeclarationHandle data =
         new DirectParserASTContentForInitializerLocalVariableDeclarationHandle(
@@ -659,6 +726,7 @@
     seen(data);
   }
 
+  @override
   void beginForStatement(Token token) {
     DirectParserASTContentForStatementBegin data =
         new DirectParserASTContentForStatementBegin(DirectParserASTType.BEGIN,
@@ -666,6 +734,7 @@
     seen(data);
   }
 
+  @override
   void handleForLoopParts(Token forKeyword, Token leftParen,
       Token leftSeparator, int updateExpressionCount) {
     DirectParserASTContentForLoopPartsHandle data =
@@ -677,6 +746,7 @@
     seen(data);
   }
 
+  @override
   void endForStatement(Token endToken) {
     DirectParserASTContentForStatementEnd data =
         new DirectParserASTContentForStatementEnd(DirectParserASTType.END,
@@ -684,6 +754,7 @@
     seen(data);
   }
 
+  @override
   void beginForStatementBody(Token token) {
     DirectParserASTContentForStatementBodyBegin data =
         new DirectParserASTContentForStatementBodyBegin(
@@ -692,6 +763,7 @@
     seen(data);
   }
 
+  @override
   void endForStatementBody(Token token) {
     DirectParserASTContentForStatementBodyEnd data =
         new DirectParserASTContentForStatementBodyEnd(DirectParserASTType.END,
@@ -699,6 +771,7 @@
     seen(data);
   }
 
+  @override
   void handleForInLoopParts(Token? awaitToken, Token forToken,
       Token leftParenthesis, Token inKeyword) {
     DirectParserASTContentForInLoopPartsHandle data =
@@ -711,6 +784,7 @@
     seen(data);
   }
 
+  @override
   void endForIn(Token endToken) {
     DirectParserASTContentForInEnd data = new DirectParserASTContentForInEnd(
         DirectParserASTType.END,
@@ -718,6 +792,7 @@
     seen(data);
   }
 
+  @override
   void beginForInExpression(Token token) {
     DirectParserASTContentForInExpressionBegin data =
         new DirectParserASTContentForInExpressionBegin(
@@ -726,6 +801,7 @@
     seen(data);
   }
 
+  @override
   void endForInExpression(Token token) {
     DirectParserASTContentForInExpressionEnd data =
         new DirectParserASTContentForInExpressionEnd(DirectParserASTType.END,
@@ -733,6 +809,7 @@
     seen(data);
   }
 
+  @override
   void beginForInBody(Token token) {
     DirectParserASTContentForInBodyBegin data =
         new DirectParserASTContentForInBodyBegin(DirectParserASTType.BEGIN,
@@ -740,6 +817,7 @@
     seen(data);
   }
 
+  @override
   void endForInBody(Token token) {
     DirectParserASTContentForInBodyEnd data =
         new DirectParserASTContentForInBodyEnd(DirectParserASTType.END,
@@ -747,6 +825,7 @@
     seen(data);
   }
 
+  @override
   void beginNamedFunctionExpression(Token token) {
     DirectParserASTContentNamedFunctionExpressionBegin data =
         new DirectParserASTContentNamedFunctionExpressionBegin(
@@ -755,6 +834,7 @@
     seen(data);
   }
 
+  @override
   void endNamedFunctionExpression(Token endToken) {
     DirectParserASTContentNamedFunctionExpressionEnd data =
         new DirectParserASTContentNamedFunctionExpressionEnd(
@@ -763,6 +843,7 @@
     seen(data);
   }
 
+  @override
   void beginLocalFunctionDeclaration(Token token) {
     DirectParserASTContentLocalFunctionDeclarationBegin data =
         new DirectParserASTContentLocalFunctionDeclarationBegin(
@@ -771,6 +852,7 @@
     seen(data);
   }
 
+  @override
   void endLocalFunctionDeclaration(Token endToken) {
     DirectParserASTContentLocalFunctionDeclarationEnd data =
         new DirectParserASTContentLocalFunctionDeclarationEnd(
@@ -779,6 +861,7 @@
     seen(data);
   }
 
+  @override
   void beginBlockFunctionBody(Token token) {
     DirectParserASTContentBlockFunctionBodyBegin data =
         new DirectParserASTContentBlockFunctionBodyBegin(
@@ -787,6 +870,7 @@
     seen(data);
   }
 
+  @override
   void endBlockFunctionBody(int count, Token beginToken, Token endToken) {
     DirectParserASTContentBlockFunctionBodyEnd data =
         new DirectParserASTContentBlockFunctionBodyEnd(DirectParserASTType.END,
@@ -794,6 +878,7 @@
     seen(data);
   }
 
+  @override
   void handleNoFunctionBody(Token token) {
     DirectParserASTContentNoFunctionBodyHandle data =
         new DirectParserASTContentNoFunctionBodyHandle(
@@ -802,6 +887,7 @@
     seen(data);
   }
 
+  @override
   void handleFunctionBodySkipped(Token token, bool isExpressionBody) {
     DirectParserASTContentFunctionBodySkippedHandle data =
         new DirectParserASTContentFunctionBodySkippedHandle(
@@ -811,6 +897,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionName(Token token) {
     DirectParserASTContentFunctionNameBegin data =
         new DirectParserASTContentFunctionNameBegin(DirectParserASTType.BEGIN,
@@ -818,6 +905,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionName(Token beginToken, Token token) {
     DirectParserASTContentFunctionNameEnd data =
         new DirectParserASTContentFunctionNameEnd(DirectParserASTType.END,
@@ -825,6 +913,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionTypeAlias(Token token) {
     DirectParserASTContentFunctionTypeAliasBegin data =
         new DirectParserASTContentFunctionTypeAliasBegin(
@@ -833,6 +922,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionTypeAlias(
       Token typedefKeyword, Token? equals, Token endToken) {
     DirectParserASTContentFunctionTypeAliasEnd data =
@@ -841,6 +931,7 @@
     seen(data);
   }
 
+  @override
   void handleClassWithClause(Token withKeyword) {
     DirectParserASTContentClassWithClauseHandle data =
         new DirectParserASTContentClassWithClauseHandle(
@@ -849,6 +940,7 @@
     seen(data);
   }
 
+  @override
   void handleClassNoWithClause() {
     DirectParserASTContentClassNoWithClauseHandle data =
         new DirectParserASTContentClassNoWithClauseHandle(
@@ -856,6 +948,7 @@
     seen(data);
   }
 
+  @override
   void beginNamedMixinApplication(
       Token begin, Token? abstractToken, Token name) {
     DirectParserASTContentNamedMixinApplicationBegin data =
@@ -867,6 +960,7 @@
     seen(data);
   }
 
+  @override
   void handleNamedMixinApplicationWithClause(Token withKeyword) {
     DirectParserASTContentNamedMixinApplicationWithClauseHandle data =
         new DirectParserASTContentNamedMixinApplicationWithClauseHandle(
@@ -875,6 +969,7 @@
     seen(data);
   }
 
+  @override
   void endNamedMixinApplication(Token begin, Token classKeyword, Token equals,
       Token? implementsKeyword, Token endToken) {
     DirectParserASTContentNamedMixinApplicationEnd data =
@@ -888,6 +983,7 @@
     seen(data);
   }
 
+  @override
   void beginHide(Token hideKeyword) {
     DirectParserASTContentHideBegin data = new DirectParserASTContentHideBegin(
         DirectParserASTType.BEGIN,
@@ -895,6 +991,7 @@
     seen(data);
   }
 
+  @override
   void endHide(Token hideKeyword) {
     DirectParserASTContentHideEnd data = new DirectParserASTContentHideEnd(
         DirectParserASTType.END,
@@ -902,6 +999,7 @@
     seen(data);
   }
 
+  @override
   void handleIdentifierList(int count) {
     DirectParserASTContentIdentifierListHandle data =
         new DirectParserASTContentIdentifierListHandle(
@@ -910,6 +1008,7 @@
     seen(data);
   }
 
+  @override
   void beginTypeList(Token token) {
     DirectParserASTContentTypeListBegin data =
         new DirectParserASTContentTypeListBegin(DirectParserASTType.BEGIN,
@@ -917,6 +1016,7 @@
     seen(data);
   }
 
+  @override
   void endTypeList(int count) {
     DirectParserASTContentTypeListEnd data =
         new DirectParserASTContentTypeListEnd(DirectParserASTType.END,
@@ -924,6 +1024,7 @@
     seen(data);
   }
 
+  @override
   void beginIfStatement(Token token) {
     DirectParserASTContentIfStatementBegin data =
         new DirectParserASTContentIfStatementBegin(DirectParserASTType.BEGIN,
@@ -931,6 +1032,7 @@
     seen(data);
   }
 
+  @override
   void endIfStatement(Token ifToken, Token? elseToken) {
     DirectParserASTContentIfStatementEnd data =
         new DirectParserASTContentIfStatementEnd(DirectParserASTType.END,
@@ -938,6 +1040,7 @@
     seen(data);
   }
 
+  @override
   void beginThenStatement(Token token) {
     DirectParserASTContentThenStatementBegin data =
         new DirectParserASTContentThenStatementBegin(DirectParserASTType.BEGIN,
@@ -945,6 +1048,7 @@
     seen(data);
   }
 
+  @override
   void endThenStatement(Token token) {
     DirectParserASTContentThenStatementEnd data =
         new DirectParserASTContentThenStatementEnd(DirectParserASTType.END,
@@ -952,6 +1056,7 @@
     seen(data);
   }
 
+  @override
   void beginElseStatement(Token token) {
     DirectParserASTContentElseStatementBegin data =
         new DirectParserASTContentElseStatementBegin(DirectParserASTType.BEGIN,
@@ -959,6 +1064,7 @@
     seen(data);
   }
 
+  @override
   void endElseStatement(Token token) {
     DirectParserASTContentElseStatementEnd data =
         new DirectParserASTContentElseStatementEnd(DirectParserASTType.END,
@@ -966,6 +1072,7 @@
     seen(data);
   }
 
+  @override
   void beginImport(Token importKeyword) {
     DirectParserASTContentImportBegin data =
         new DirectParserASTContentImportBegin(DirectParserASTType.BEGIN,
@@ -973,6 +1080,7 @@
     seen(data);
   }
 
+  @override
   void handleImportPrefix(Token? deferredKeyword, Token? asKeyword) {
     DirectParserASTContentImportPrefixHandle data =
         new DirectParserASTContentImportPrefixHandle(DirectParserASTType.HANDLE,
@@ -980,6 +1088,7 @@
     seen(data);
   }
 
+  @override
   void endImport(Token importKeyword, Token? semicolon) {
     DirectParserASTContentImportEnd data = new DirectParserASTContentImportEnd(
         DirectParserASTType.END,
@@ -988,6 +1097,7 @@
     seen(data);
   }
 
+  @override
   void handleRecoverImport(Token? semicolon) {
     DirectParserASTContentRecoverImportHandle data =
         new DirectParserASTContentRecoverImportHandle(
@@ -996,6 +1106,7 @@
     seen(data);
   }
 
+  @override
   void beginConditionalUris(Token token) {
     DirectParserASTContentConditionalUrisBegin data =
         new DirectParserASTContentConditionalUrisBegin(
@@ -1004,6 +1115,7 @@
     seen(data);
   }
 
+  @override
   void endConditionalUris(int count) {
     DirectParserASTContentConditionalUrisEnd data =
         new DirectParserASTContentConditionalUrisEnd(DirectParserASTType.END,
@@ -1011,6 +1123,7 @@
     seen(data);
   }
 
+  @override
   void beginConditionalUri(Token ifKeyword) {
     DirectParserASTContentConditionalUriBegin data =
         new DirectParserASTContentConditionalUriBegin(DirectParserASTType.BEGIN,
@@ -1018,6 +1131,7 @@
     seen(data);
   }
 
+  @override
   void endConditionalUri(Token ifKeyword, Token leftParen, Token? equalSign) {
     DirectParserASTContentConditionalUriEnd data =
         new DirectParserASTContentConditionalUriEnd(DirectParserASTType.END,
@@ -1025,6 +1139,7 @@
     seen(data);
   }
 
+  @override
   void handleDottedName(int count, Token firstIdentifier) {
     DirectParserASTContentDottedNameHandle data =
         new DirectParserASTContentDottedNameHandle(DirectParserASTType.HANDLE,
@@ -1032,6 +1147,7 @@
     seen(data);
   }
 
+  @override
   void beginImplicitCreationExpression(Token token) {
     DirectParserASTContentImplicitCreationExpressionBegin data =
         new DirectParserASTContentImplicitCreationExpressionBegin(
@@ -1040,6 +1156,7 @@
     seen(data);
   }
 
+  @override
   void endImplicitCreationExpression(Token token) {
     DirectParserASTContentImplicitCreationExpressionEnd data =
         new DirectParserASTContentImplicitCreationExpressionEnd(
@@ -1048,6 +1165,7 @@
     seen(data);
   }
 
+  @override
   void beginInitializedIdentifier(Token token) {
     DirectParserASTContentInitializedIdentifierBegin data =
         new DirectParserASTContentInitializedIdentifierBegin(
@@ -1056,6 +1174,7 @@
     seen(data);
   }
 
+  @override
   void endInitializedIdentifier(Token nameToken) {
     DirectParserASTContentInitializedIdentifierEnd data =
         new DirectParserASTContentInitializedIdentifierEnd(
@@ -1064,6 +1183,7 @@
     seen(data);
   }
 
+  @override
   void beginFieldInitializer(Token token) {
     DirectParserASTContentFieldInitializerBegin data =
         new DirectParserASTContentFieldInitializerBegin(
@@ -1072,6 +1192,7 @@
     seen(data);
   }
 
+  @override
   void endFieldInitializer(Token assignment, Token token) {
     DirectParserASTContentFieldInitializerEnd data =
         new DirectParserASTContentFieldInitializerEnd(DirectParserASTType.END,
@@ -1079,6 +1200,7 @@
     seen(data);
   }
 
+  @override
   void handleNoFieldInitializer(Token token) {
     DirectParserASTContentNoFieldInitializerHandle data =
         new DirectParserASTContentNoFieldInitializerHandle(
@@ -1087,6 +1209,7 @@
     seen(data);
   }
 
+  @override
   void beginVariableInitializer(Token token) {
     DirectParserASTContentVariableInitializerBegin data =
         new DirectParserASTContentVariableInitializerBegin(
@@ -1095,6 +1218,7 @@
     seen(data);
   }
 
+  @override
   void endVariableInitializer(Token assignmentOperator) {
     DirectParserASTContentVariableInitializerEnd data =
         new DirectParserASTContentVariableInitializerEnd(
@@ -1103,6 +1227,7 @@
     seen(data);
   }
 
+  @override
   void handleNoVariableInitializer(Token token) {
     DirectParserASTContentNoVariableInitializerHandle data =
         new DirectParserASTContentNoVariableInitializerHandle(
@@ -1111,6 +1236,7 @@
     seen(data);
   }
 
+  @override
   void beginInitializer(Token token) {
     DirectParserASTContentInitializerBegin data =
         new DirectParserASTContentInitializerBegin(DirectParserASTType.BEGIN,
@@ -1118,6 +1244,7 @@
     seen(data);
   }
 
+  @override
   void endInitializer(Token token) {
     DirectParserASTContentInitializerEnd data =
         new DirectParserASTContentInitializerEnd(DirectParserASTType.END,
@@ -1125,6 +1252,7 @@
     seen(data);
   }
 
+  @override
   void beginInitializers(Token token) {
     DirectParserASTContentInitializersBegin data =
         new DirectParserASTContentInitializersBegin(DirectParserASTType.BEGIN,
@@ -1132,6 +1260,7 @@
     seen(data);
   }
 
+  @override
   void endInitializers(int count, Token beginToken, Token endToken) {
     DirectParserASTContentInitializersEnd data =
         new DirectParserASTContentInitializersEnd(DirectParserASTType.END,
@@ -1139,6 +1268,7 @@
     seen(data);
   }
 
+  @override
   void handleNoInitializers() {
     DirectParserASTContentNoInitializersHandle data =
         new DirectParserASTContentNoInitializersHandle(
@@ -1146,6 +1276,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidExpression(Token token) {
     DirectParserASTContentInvalidExpressionHandle data =
         new DirectParserASTContentInvalidExpressionHandle(
@@ -1154,6 +1285,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidFunctionBody(Token token) {
     DirectParserASTContentInvalidFunctionBodyHandle data =
         new DirectParserASTContentInvalidFunctionBodyHandle(
@@ -1162,6 +1294,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidTypeReference(Token token) {
     DirectParserASTContentInvalidTypeReferenceHandle data =
         new DirectParserASTContentInvalidTypeReferenceHandle(
@@ -1170,6 +1303,7 @@
     seen(data);
   }
 
+  @override
   void handleLabel(Token token) {
     DirectParserASTContentLabelHandle data =
         new DirectParserASTContentLabelHandle(DirectParserASTType.HANDLE,
@@ -1177,6 +1311,7 @@
     seen(data);
   }
 
+  @override
   void beginLabeledStatement(Token token, int labelCount) {
     DirectParserASTContentLabeledStatementBegin data =
         new DirectParserASTContentLabeledStatementBegin(
@@ -1186,6 +1321,7 @@
     seen(data);
   }
 
+  @override
   void endLabeledStatement(int labelCount) {
     DirectParserASTContentLabeledStatementEnd data =
         new DirectParserASTContentLabeledStatementEnd(DirectParserASTType.END,
@@ -1193,6 +1329,7 @@
     seen(data);
   }
 
+  @override
   void beginLibraryName(Token token) {
     DirectParserASTContentLibraryNameBegin data =
         new DirectParserASTContentLibraryNameBegin(DirectParserASTType.BEGIN,
@@ -1200,6 +1337,7 @@
     seen(data);
   }
 
+  @override
   void endLibraryName(Token libraryKeyword, Token semicolon) {
     DirectParserASTContentLibraryNameEnd data =
         new DirectParserASTContentLibraryNameEnd(DirectParserASTType.END,
@@ -1207,6 +1345,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralMapEntry(Token colon, Token endToken) {
     DirectParserASTContentLiteralMapEntryHandle data =
         new DirectParserASTContentLiteralMapEntryHandle(
@@ -1216,6 +1355,7 @@
     seen(data);
   }
 
+  @override
   void beginLiteralString(Token token) {
     DirectParserASTContentLiteralStringBegin data =
         new DirectParserASTContentLiteralStringBegin(DirectParserASTType.BEGIN,
@@ -1223,6 +1363,7 @@
     seen(data);
   }
 
+  @override
   void handleInterpolationExpression(Token leftBracket, Token? rightBracket) {
     DirectParserASTContentInterpolationExpressionHandle data =
         new DirectParserASTContentInterpolationExpressionHandle(
@@ -1232,6 +1373,7 @@
     seen(data);
   }
 
+  @override
   void endLiteralString(int interpolationCount, Token endToken) {
     DirectParserASTContentLiteralStringEnd data =
         new DirectParserASTContentLiteralStringEnd(DirectParserASTType.END,
@@ -1239,6 +1381,7 @@
     seen(data);
   }
 
+  @override
   void handleStringJuxtaposition(Token startToken, int literalCount) {
     DirectParserASTContentStringJuxtapositionHandle data =
         new DirectParserASTContentStringJuxtapositionHandle(
@@ -1248,12 +1391,14 @@
     seen(data);
   }
 
+  @override
   void beginMember() {
     DirectParserASTContentMemberBegin data =
         new DirectParserASTContentMemberBegin(DirectParserASTType.BEGIN);
     seen(data);
   }
 
+  @override
   void handleInvalidMember(Token endToken) {
     DirectParserASTContentInvalidMemberHandle data =
         new DirectParserASTContentInvalidMemberHandle(
@@ -1262,12 +1407,14 @@
     seen(data);
   }
 
+  @override
   void endMember() {
     DirectParserASTContentMemberEnd data =
         new DirectParserASTContentMemberEnd(DirectParserASTType.END);
     seen(data);
   }
 
+  @override
   void beginMethod(
       Token? externalToken,
       Token? staticToken,
@@ -1286,6 +1433,7 @@
     seen(data);
   }
 
+  @override
   void endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentClassMethodEnd data =
@@ -1298,6 +1446,7 @@
     seen(data);
   }
 
+  @override
   void endMixinMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentMixinMethodEnd data =
@@ -1310,6 +1459,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentExtensionMethodEnd data =
@@ -1322,6 +1472,7 @@
     seen(data);
   }
 
+  @override
   void endClassConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentClassConstructorEnd data =
@@ -1334,6 +1485,7 @@
     seen(data);
   }
 
+  @override
   void endMixinConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     DirectParserASTContentMixinConstructorEnd data =
@@ -1346,6 +1498,7 @@
     seen(data);
   }
 
+  @override
   void endExtensionConstructor(Token? getOrSet, Token beginToken,
       Token beginParam, Token? beginInitializers, Token endToken) {
     DirectParserASTContentExtensionConstructorEnd data =
@@ -1359,6 +1512,7 @@
     seen(data);
   }
 
+  @override
   void beginMetadataStar(Token token) {
     DirectParserASTContentMetadataStarBegin data =
         new DirectParserASTContentMetadataStarBegin(DirectParserASTType.BEGIN,
@@ -1366,6 +1520,7 @@
     seen(data);
   }
 
+  @override
   void endMetadataStar(int count) {
     DirectParserASTContentMetadataStarEnd data =
         new DirectParserASTContentMetadataStarEnd(DirectParserASTType.END,
@@ -1373,6 +1528,7 @@
     seen(data);
   }
 
+  @override
   void beginMetadata(Token token) {
     DirectParserASTContentMetadataBegin data =
         new DirectParserASTContentMetadataBegin(DirectParserASTType.BEGIN,
@@ -1380,6 +1536,7 @@
     seen(data);
   }
 
+  @override
   void endMetadata(Token beginToken, Token? periodBeforeName, Token endToken) {
     DirectParserASTContentMetadataEnd data =
         new DirectParserASTContentMetadataEnd(DirectParserASTType.END,
@@ -1389,6 +1546,7 @@
     seen(data);
   }
 
+  @override
   void beginOptionalFormalParameters(Token token) {
     DirectParserASTContentOptionalFormalParametersBegin data =
         new DirectParserASTContentOptionalFormalParametersBegin(
@@ -1397,6 +1555,7 @@
     seen(data);
   }
 
+  @override
   void endOptionalFormalParameters(
       int count, Token beginToken, Token endToken) {
     DirectParserASTContentOptionalFormalParametersEnd data =
@@ -1408,6 +1567,7 @@
     seen(data);
   }
 
+  @override
   void beginPart(Token token) {
     DirectParserASTContentPartBegin data = new DirectParserASTContentPartBegin(
         DirectParserASTType.BEGIN,
@@ -1415,6 +1575,7 @@
     seen(data);
   }
 
+  @override
   void endPart(Token partKeyword, Token semicolon) {
     DirectParserASTContentPartEnd data = new DirectParserASTContentPartEnd(
         DirectParserASTType.END,
@@ -1423,6 +1584,7 @@
     seen(data);
   }
 
+  @override
   void beginPartOf(Token token) {
     DirectParserASTContentPartOfBegin data =
         new DirectParserASTContentPartOfBegin(DirectParserASTType.BEGIN,
@@ -1430,6 +1592,7 @@
     seen(data);
   }
 
+  @override
   void endPartOf(
       Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
     DirectParserASTContentPartOfEnd data = new DirectParserASTContentPartOfEnd(
@@ -1441,6 +1604,7 @@
     seen(data);
   }
 
+  @override
   void beginRedirectingFactoryBody(Token token) {
     DirectParserASTContentRedirectingFactoryBodyBegin data =
         new DirectParserASTContentRedirectingFactoryBodyBegin(
@@ -1449,6 +1613,7 @@
     seen(data);
   }
 
+  @override
   void endRedirectingFactoryBody(Token beginToken, Token endToken) {
     DirectParserASTContentRedirectingFactoryBodyEnd data =
         new DirectParserASTContentRedirectingFactoryBodyEnd(
@@ -1458,6 +1623,7 @@
     seen(data);
   }
 
+  @override
   void beginReturnStatement(Token token) {
     DirectParserASTContentReturnStatementBegin data =
         new DirectParserASTContentReturnStatementBegin(
@@ -1466,6 +1632,7 @@
     seen(data);
   }
 
+  @override
   void handleNativeFunctionBody(Token nativeToken, Token semicolon) {
     DirectParserASTContentNativeFunctionBodyHandle data =
         new DirectParserASTContentNativeFunctionBodyHandle(
@@ -1475,6 +1642,7 @@
     seen(data);
   }
 
+  @override
   void handleNativeFunctionBodyIgnored(Token nativeToken, Token semicolon) {
     DirectParserASTContentNativeFunctionBodyIgnoredHandle data =
         new DirectParserASTContentNativeFunctionBodyIgnoredHandle(
@@ -1484,6 +1652,7 @@
     seen(data);
   }
 
+  @override
   void handleNativeFunctionBodySkipped(Token nativeToken, Token semicolon) {
     DirectParserASTContentNativeFunctionBodySkippedHandle data =
         new DirectParserASTContentNativeFunctionBodySkippedHandle(
@@ -1493,6 +1662,7 @@
     seen(data);
   }
 
+  @override
   void handleEmptyFunctionBody(Token semicolon) {
     DirectParserASTContentEmptyFunctionBodyHandle data =
         new DirectParserASTContentEmptyFunctionBodyHandle(
@@ -1501,6 +1671,7 @@
     seen(data);
   }
 
+  @override
   void handleExpressionFunctionBody(Token arrowToken, Token? endToken) {
     DirectParserASTContentExpressionFunctionBodyHandle data =
         new DirectParserASTContentExpressionFunctionBodyHandle(
@@ -1510,6 +1681,7 @@
     seen(data);
   }
 
+  @override
   void endReturnStatement(
       bool hasExpression, Token beginToken, Token endToken) {
     DirectParserASTContentReturnStatementEnd data =
@@ -1520,6 +1692,7 @@
     seen(data);
   }
 
+  @override
   void handleSend(Token beginToken, Token endToken) {
     DirectParserASTContentSendHandle data =
         new DirectParserASTContentSendHandle(DirectParserASTType.HANDLE,
@@ -1527,6 +1700,7 @@
     seen(data);
   }
 
+  @override
   void beginShow(Token showKeyword) {
     DirectParserASTContentShowBegin data = new DirectParserASTContentShowBegin(
         DirectParserASTType.BEGIN,
@@ -1534,6 +1708,7 @@
     seen(data);
   }
 
+  @override
   void endShow(Token showKeyword) {
     DirectParserASTContentShowEnd data = new DirectParserASTContentShowEnd(
         DirectParserASTType.END,
@@ -1541,6 +1716,7 @@
     seen(data);
   }
 
+  @override
   void beginSwitchStatement(Token token) {
     DirectParserASTContentSwitchStatementBegin data =
         new DirectParserASTContentSwitchStatementBegin(
@@ -1549,6 +1725,7 @@
     seen(data);
   }
 
+  @override
   void endSwitchStatement(Token switchKeyword, Token endToken) {
     DirectParserASTContentSwitchStatementEnd data =
         new DirectParserASTContentSwitchStatementEnd(DirectParserASTType.END,
@@ -1556,6 +1733,7 @@
     seen(data);
   }
 
+  @override
   void beginSwitchBlock(Token token) {
     DirectParserASTContentSwitchBlockBegin data =
         new DirectParserASTContentSwitchBlockBegin(DirectParserASTType.BEGIN,
@@ -1563,6 +1741,7 @@
     seen(data);
   }
 
+  @override
   void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
     DirectParserASTContentSwitchBlockEnd data =
         new DirectParserASTContentSwitchBlockEnd(DirectParserASTType.END,
@@ -1570,6 +1749,7 @@
     seen(data);
   }
 
+  @override
   void beginLiteralSymbol(Token token) {
     DirectParserASTContentLiteralSymbolBegin data =
         new DirectParserASTContentLiteralSymbolBegin(DirectParserASTType.BEGIN,
@@ -1577,6 +1757,7 @@
     seen(data);
   }
 
+  @override
   void endLiteralSymbol(Token hashToken, int identifierCount) {
     DirectParserASTContentLiteralSymbolEnd data =
         new DirectParserASTContentLiteralSymbolEnd(DirectParserASTType.END,
@@ -1584,6 +1765,7 @@
     seen(data);
   }
 
+  @override
   void handleThrowExpression(Token throwToken, Token endToken) {
     DirectParserASTContentThrowExpressionHandle data =
         new DirectParserASTContentThrowExpressionHandle(
@@ -1593,6 +1775,7 @@
     seen(data);
   }
 
+  @override
   void beginRethrowStatement(Token token) {
     DirectParserASTContentRethrowStatementBegin data =
         new DirectParserASTContentRethrowStatementBegin(
@@ -1601,6 +1784,7 @@
     seen(data);
   }
 
+  @override
   void endRethrowStatement(Token rethrowToken, Token endToken) {
     DirectParserASTContentRethrowStatementEnd data =
         new DirectParserASTContentRethrowStatementEnd(DirectParserASTType.END,
@@ -1608,6 +1792,7 @@
     seen(data);
   }
 
+  @override
   void endTopLevelDeclaration(Token nextToken) {
     DirectParserASTContentTopLevelDeclarationEnd data =
         new DirectParserASTContentTopLevelDeclarationEnd(
@@ -1616,6 +1801,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidTopLevelDeclaration(Token endToken) {
     DirectParserASTContentInvalidTopLevelDeclarationHandle data =
         new DirectParserASTContentInvalidTopLevelDeclarationHandle(
@@ -1624,6 +1810,7 @@
     seen(data);
   }
 
+  @override
   void beginTopLevelMember(Token token) {
     DirectParserASTContentTopLevelMemberBegin data =
         new DirectParserASTContentTopLevelMemberBegin(DirectParserASTType.BEGIN,
@@ -1631,6 +1818,7 @@
     seen(data);
   }
 
+  @override
   void beginFields(Token lastConsumed) {
     DirectParserASTContentFieldsBegin data =
         new DirectParserASTContentFieldsBegin(DirectParserASTType.BEGIN,
@@ -1638,6 +1826,7 @@
     seen(data);
   }
 
+  @override
   void endTopLevelFields(
       Token? externalToken,
       Token? staticToken,
@@ -1660,6 +1849,7 @@
     seen(data);
   }
 
+  @override
   void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
     DirectParserASTContentTopLevelMethodBegin data =
         new DirectParserASTContentTopLevelMethodBegin(DirectParserASTType.BEGIN,
@@ -1667,6 +1857,7 @@
     seen(data);
   }
 
+  @override
   void endTopLevelMethod(Token beginToken, Token? getOrSet, Token endToken) {
     DirectParserASTContentTopLevelMethodEnd data =
         new DirectParserASTContentTopLevelMethodEnd(DirectParserASTType.END,
@@ -1674,6 +1865,7 @@
     seen(data);
   }
 
+  @override
   void beginTryStatement(Token token) {
     DirectParserASTContentTryStatementBegin data =
         new DirectParserASTContentTryStatementBegin(DirectParserASTType.BEGIN,
@@ -1681,6 +1873,7 @@
     seen(data);
   }
 
+  @override
   void handleCaseMatch(Token caseKeyword, Token colon) {
     DirectParserASTContentCaseMatchHandle data =
         new DirectParserASTContentCaseMatchHandle(DirectParserASTType.HANDLE,
@@ -1688,6 +1881,7 @@
     seen(data);
   }
 
+  @override
   void beginCatchClause(Token token) {
     DirectParserASTContentCatchClauseBegin data =
         new DirectParserASTContentCatchClauseBegin(DirectParserASTType.BEGIN,
@@ -1695,6 +1889,7 @@
     seen(data);
   }
 
+  @override
   void endCatchClause(Token token) {
     DirectParserASTContentCatchClauseEnd data =
         new DirectParserASTContentCatchClauseEnd(DirectParserASTType.END,
@@ -1702,6 +1897,7 @@
     seen(data);
   }
 
+  @override
   void handleCatchBlock(Token? onKeyword, Token? catchKeyword, Token? comma) {
     DirectParserASTContentCatchBlockHandle data =
         new DirectParserASTContentCatchBlockHandle(DirectParserASTType.HANDLE,
@@ -1709,6 +1905,7 @@
     seen(data);
   }
 
+  @override
   void handleFinallyBlock(Token finallyKeyword) {
     DirectParserASTContentFinallyBlockHandle data =
         new DirectParserASTContentFinallyBlockHandle(DirectParserASTType.HANDLE,
@@ -1716,6 +1913,7 @@
     seen(data);
   }
 
+  @override
   void endTryStatement(
       int catchCount, Token tryKeyword, Token? finallyKeyword) {
     DirectParserASTContentTryStatementEnd data =
@@ -1726,6 +1924,7 @@
     seen(data);
   }
 
+  @override
   void handleType(Token beginToken, Token? questionMark) {
     DirectParserASTContentTypeHandle data =
         new DirectParserASTContentTypeHandle(DirectParserASTType.HANDLE,
@@ -1733,6 +1932,7 @@
     seen(data);
   }
 
+  @override
   void handleNonNullAssertExpression(Token bang) {
     DirectParserASTContentNonNullAssertExpressionHandle data =
         new DirectParserASTContentNonNullAssertExpressionHandle(
@@ -1741,6 +1941,7 @@
     seen(data);
   }
 
+  @override
   void handleNoName(Token token) {
     DirectParserASTContentNoNameHandle data =
         new DirectParserASTContentNoNameHandle(DirectParserASTType.HANDLE,
@@ -1748,6 +1949,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionType(Token beginToken) {
     DirectParserASTContentFunctionTypeBegin data =
         new DirectParserASTContentFunctionTypeBegin(DirectParserASTType.BEGIN,
@@ -1755,6 +1957,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionType(Token functionToken, Token? questionMark) {
     DirectParserASTContentFunctionTypeEnd data =
         new DirectParserASTContentFunctionTypeEnd(DirectParserASTType.END,
@@ -1762,6 +1965,7 @@
     seen(data);
   }
 
+  @override
   void beginTypeArguments(Token token) {
     DirectParserASTContentTypeArgumentsBegin data =
         new DirectParserASTContentTypeArgumentsBegin(DirectParserASTType.BEGIN,
@@ -1769,6 +1973,7 @@
     seen(data);
   }
 
+  @override
   void endTypeArguments(int count, Token beginToken, Token endToken) {
     DirectParserASTContentTypeArgumentsEnd data =
         new DirectParserASTContentTypeArgumentsEnd(DirectParserASTType.END,
@@ -1776,6 +1981,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidTypeArguments(Token token) {
     DirectParserASTContentInvalidTypeArgumentsHandle data =
         new DirectParserASTContentInvalidTypeArgumentsHandle(
@@ -1784,6 +1990,7 @@
     seen(data);
   }
 
+  @override
   void handleNoTypeArguments(Token token) {
     DirectParserASTContentNoTypeArgumentsHandle data =
         new DirectParserASTContentNoTypeArgumentsHandle(
@@ -1792,6 +1999,7 @@
     seen(data);
   }
 
+  @override
   void beginTypeVariable(Token token) {
     DirectParserASTContentTypeVariableBegin data =
         new DirectParserASTContentTypeVariableBegin(DirectParserASTType.BEGIN,
@@ -1799,6 +2007,7 @@
     seen(data);
   }
 
+  @override
   void handleTypeVariablesDefined(Token token, int count) {
     DirectParserASTContentTypeVariablesDefinedHandle data =
         new DirectParserASTContentTypeVariablesDefinedHandle(
@@ -1808,6 +2017,7 @@
     seen(data);
   }
 
+  @override
   void endTypeVariable(
       Token token, int index, Token? extendsOrSuper, Token? variance) {
     DirectParserASTContentTypeVariableEnd data =
@@ -1819,6 +2029,7 @@
     seen(data);
   }
 
+  @override
   void beginTypeVariables(Token token) {
     DirectParserASTContentTypeVariablesBegin data =
         new DirectParserASTContentTypeVariablesBegin(DirectParserASTType.BEGIN,
@@ -1826,6 +2037,7 @@
     seen(data);
   }
 
+  @override
   void endTypeVariables(Token beginToken, Token endToken) {
     DirectParserASTContentTypeVariablesEnd data =
         new DirectParserASTContentTypeVariablesEnd(DirectParserASTType.END,
@@ -1833,6 +2045,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionExpression(Token token) {
     DirectParserASTContentFunctionExpressionBegin data =
         new DirectParserASTContentFunctionExpressionBegin(
@@ -1841,6 +2054,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionExpression(Token beginToken, Token token) {
     DirectParserASTContentFunctionExpressionEnd data =
         new DirectParserASTContentFunctionExpressionEnd(DirectParserASTType.END,
@@ -1848,6 +2062,7 @@
     seen(data);
   }
 
+  @override
   void beginVariablesDeclaration(
       Token token, Token? lateToken, Token? varFinalOrConst) {
     DirectParserASTContentVariablesDeclarationBegin data =
@@ -1859,6 +2074,7 @@
     seen(data);
   }
 
+  @override
   void endVariablesDeclaration(int count, Token? endToken) {
     DirectParserASTContentVariablesDeclarationEnd data =
         new DirectParserASTContentVariablesDeclarationEnd(
@@ -1868,6 +2084,7 @@
     seen(data);
   }
 
+  @override
   void beginWhileStatement(Token token) {
     DirectParserASTContentWhileStatementBegin data =
         new DirectParserASTContentWhileStatementBegin(DirectParserASTType.BEGIN,
@@ -1875,6 +2092,7 @@
     seen(data);
   }
 
+  @override
   void endWhileStatement(Token whileKeyword, Token endToken) {
     DirectParserASTContentWhileStatementEnd data =
         new DirectParserASTContentWhileStatementEnd(DirectParserASTType.END,
@@ -1882,6 +2100,7 @@
     seen(data);
   }
 
+  @override
   void beginAsOperatorType(Token operator) {
     DirectParserASTContentAsOperatorTypeBegin data =
         new DirectParserASTContentAsOperatorTypeBegin(DirectParserASTType.BEGIN,
@@ -1889,6 +2108,7 @@
     seen(data);
   }
 
+  @override
   void endAsOperatorType(Token operator) {
     DirectParserASTContentAsOperatorTypeEnd data =
         new DirectParserASTContentAsOperatorTypeEnd(DirectParserASTType.END,
@@ -1896,6 +2116,7 @@
     seen(data);
   }
 
+  @override
   void handleAsOperator(Token operator) {
     DirectParserASTContentAsOperatorHandle data =
         new DirectParserASTContentAsOperatorHandle(DirectParserASTType.HANDLE,
@@ -1903,6 +2124,7 @@
     seen(data);
   }
 
+  @override
   void handleAssignmentExpression(Token token) {
     DirectParserASTContentAssignmentExpressionHandle data =
         new DirectParserASTContentAssignmentExpressionHandle(
@@ -1911,6 +2133,7 @@
     seen(data);
   }
 
+  @override
   void beginBinaryExpression(Token token) {
     DirectParserASTContentBinaryExpressionBegin data =
         new DirectParserASTContentBinaryExpressionBegin(
@@ -1919,6 +2142,7 @@
     seen(data);
   }
 
+  @override
   void endBinaryExpression(Token token) {
     DirectParserASTContentBinaryExpressionEnd data =
         new DirectParserASTContentBinaryExpressionEnd(DirectParserASTType.END,
@@ -1926,6 +2150,7 @@
     seen(data);
   }
 
+  @override
   void handleEndingBinaryExpression(Token token) {
     DirectParserASTContentEndingBinaryExpressionHandle data =
         new DirectParserASTContentEndingBinaryExpressionHandle(
@@ -1934,6 +2159,7 @@
     seen(data);
   }
 
+  @override
   void beginConditionalExpression(Token question) {
     DirectParserASTContentConditionalExpressionBegin data =
         new DirectParserASTContentConditionalExpressionBegin(
@@ -1942,6 +2168,7 @@
     seen(data);
   }
 
+  @override
   void handleConditionalExpressionColon() {
     DirectParserASTContentConditionalExpressionColonHandle data =
         new DirectParserASTContentConditionalExpressionColonHandle(
@@ -1949,6 +2176,7 @@
     seen(data);
   }
 
+  @override
   void endConditionalExpression(Token question, Token colon) {
     DirectParserASTContentConditionalExpressionEnd data =
         new DirectParserASTContentConditionalExpressionEnd(
@@ -1958,6 +2186,7 @@
     seen(data);
   }
 
+  @override
   void beginConstExpression(Token constKeyword) {
     DirectParserASTContentConstExpressionBegin data =
         new DirectParserASTContentConstExpressionBegin(
@@ -1966,6 +2195,7 @@
     seen(data);
   }
 
+  @override
   void endConstExpression(Token token) {
     DirectParserASTContentConstExpressionEnd data =
         new DirectParserASTContentConstExpressionEnd(DirectParserASTType.END,
@@ -1973,6 +2203,7 @@
     seen(data);
   }
 
+  @override
   void handleConstFactory(Token constKeyword) {
     DirectParserASTContentConstFactoryHandle data =
         new DirectParserASTContentConstFactoryHandle(DirectParserASTType.HANDLE,
@@ -1980,6 +2211,7 @@
     seen(data);
   }
 
+  @override
   void beginForControlFlow(Token? awaitToken, Token forToken) {
     DirectParserASTContentForControlFlowBegin data =
         new DirectParserASTContentForControlFlowBegin(DirectParserASTType.BEGIN,
@@ -1987,6 +2219,7 @@
     seen(data);
   }
 
+  @override
   void endForControlFlow(Token token) {
     DirectParserASTContentForControlFlowEnd data =
         new DirectParserASTContentForControlFlowEnd(DirectParserASTType.END,
@@ -1994,6 +2227,7 @@
     seen(data);
   }
 
+  @override
   void endForInControlFlow(Token token) {
     DirectParserASTContentForInControlFlowEnd data =
         new DirectParserASTContentForInControlFlowEnd(DirectParserASTType.END,
@@ -2001,6 +2235,7 @@
     seen(data);
   }
 
+  @override
   void beginIfControlFlow(Token ifToken) {
     DirectParserASTContentIfControlFlowBegin data =
         new DirectParserASTContentIfControlFlowBegin(DirectParserASTType.BEGIN,
@@ -2008,6 +2243,7 @@
     seen(data);
   }
 
+  @override
   void handleThenControlFlow(Token token) {
     DirectParserASTContentThenControlFlowHandle data =
         new DirectParserASTContentThenControlFlowHandle(
@@ -2016,6 +2252,7 @@
     seen(data);
   }
 
+  @override
   void handleElseControlFlow(Token elseToken) {
     DirectParserASTContentElseControlFlowHandle data =
         new DirectParserASTContentElseControlFlowHandle(
@@ -2024,6 +2261,7 @@
     seen(data);
   }
 
+  @override
   void endIfControlFlow(Token token) {
     DirectParserASTContentIfControlFlowEnd data =
         new DirectParserASTContentIfControlFlowEnd(DirectParserASTType.END,
@@ -2031,6 +2269,7 @@
     seen(data);
   }
 
+  @override
   void endIfElseControlFlow(Token token) {
     DirectParserASTContentIfElseControlFlowEnd data =
         new DirectParserASTContentIfElseControlFlowEnd(DirectParserASTType.END,
@@ -2038,6 +2277,7 @@
     seen(data);
   }
 
+  @override
   void handleSpreadExpression(Token spreadToken) {
     DirectParserASTContentSpreadExpressionHandle data =
         new DirectParserASTContentSpreadExpressionHandle(
@@ -2046,6 +2286,7 @@
     seen(data);
   }
 
+  @override
   void beginFunctionTypedFormalParameter(Token token) {
     DirectParserASTContentFunctionTypedFormalParameterBegin data =
         new DirectParserASTContentFunctionTypedFormalParameterBegin(
@@ -2054,6 +2295,7 @@
     seen(data);
   }
 
+  @override
   void endFunctionTypedFormalParameter(Token nameToken, Token? question) {
     DirectParserASTContentFunctionTypedFormalParameterEnd data =
         new DirectParserASTContentFunctionTypedFormalParameterEnd(
@@ -2063,6 +2305,7 @@
     seen(data);
   }
 
+  @override
   void handleIdentifier(Token token, IdentifierContext context) {
     DirectParserASTContentIdentifierHandle data =
         new DirectParserASTContentIdentifierHandle(DirectParserASTType.HANDLE,
@@ -2070,6 +2313,7 @@
     seen(data);
   }
 
+  @override
   void handleIndexedExpression(
       Token? question, Token openSquareBracket, Token closeSquareBracket) {
     DirectParserASTContentIndexedExpressionHandle data =
@@ -2081,6 +2325,7 @@
     seen(data);
   }
 
+  @override
   void beginIsOperatorType(Token operator) {
     DirectParserASTContentIsOperatorTypeBegin data =
         new DirectParserASTContentIsOperatorTypeBegin(DirectParserASTType.BEGIN,
@@ -2088,6 +2333,7 @@
     seen(data);
   }
 
+  @override
   void endIsOperatorType(Token operator) {
     DirectParserASTContentIsOperatorTypeEnd data =
         new DirectParserASTContentIsOperatorTypeEnd(DirectParserASTType.END,
@@ -2095,6 +2341,7 @@
     seen(data);
   }
 
+  @override
   void handleIsOperator(Token isOperator, Token? not) {
     DirectParserASTContentIsOperatorHandle data =
         new DirectParserASTContentIsOperatorHandle(DirectParserASTType.HANDLE,
@@ -2102,6 +2349,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralBool(Token token) {
     DirectParserASTContentLiteralBoolHandle data =
         new DirectParserASTContentLiteralBoolHandle(DirectParserASTType.HANDLE,
@@ -2109,6 +2357,7 @@
     seen(data);
   }
 
+  @override
   void handleBreakStatement(
       bool hasTarget, Token breakKeyword, Token endToken) {
     DirectParserASTContentBreakStatementHandle data =
@@ -2120,6 +2369,7 @@
     seen(data);
   }
 
+  @override
   void handleContinueStatement(
       bool hasTarget, Token continueKeyword, Token endToken) {
     DirectParserASTContentContinueStatementHandle data =
@@ -2131,6 +2381,7 @@
     seen(data);
   }
 
+  @override
   void handleEmptyStatement(Token token) {
     DirectParserASTContentEmptyStatementHandle data =
         new DirectParserASTContentEmptyStatementHandle(
@@ -2139,6 +2390,7 @@
     seen(data);
   }
 
+  @override
   void beginAssert(Token assertKeyword, Assert kind) {
     DirectParserASTContentAssertBegin data =
         new DirectParserASTContentAssertBegin(DirectParserASTType.BEGIN,
@@ -2146,6 +2398,7 @@
     seen(data);
   }
 
+  @override
   void endAssert(Token assertKeyword, Assert kind, Token leftParenthesis,
       Token? commaToken, Token semicolonToken) {
     DirectParserASTContentAssertEnd data = new DirectParserASTContentAssertEnd(
@@ -2158,6 +2411,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralDouble(Token token) {
     DirectParserASTContentLiteralDoubleHandle data =
         new DirectParserASTContentLiteralDoubleHandle(
@@ -2166,6 +2420,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralInt(Token token) {
     DirectParserASTContentLiteralIntHandle data =
         new DirectParserASTContentLiteralIntHandle(DirectParserASTType.HANDLE,
@@ -2173,6 +2428,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralList(
       int count, Token leftBracket, Token? constKeyword, Token rightBracket) {
     DirectParserASTContentLiteralListHandle data =
@@ -2184,6 +2440,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralSetOrMap(
     int count,
     Token leftBrace,
@@ -2202,6 +2459,7 @@
     seen(data);
   }
 
+  @override
   void handleLiteralNull(Token token) {
     DirectParserASTContentLiteralNullHandle data =
         new DirectParserASTContentLiteralNullHandle(DirectParserASTType.HANDLE,
@@ -2209,6 +2467,7 @@
     seen(data);
   }
 
+  @override
   void handleNativeClause(Token nativeToken, bool hasName) {
     DirectParserASTContentNativeClauseHandle data =
         new DirectParserASTContentNativeClauseHandle(DirectParserASTType.HANDLE,
@@ -2216,6 +2475,7 @@
     seen(data);
   }
 
+  @override
   void handleNamedArgument(Token colon) {
     DirectParserASTContentNamedArgumentHandle data =
         new DirectParserASTContentNamedArgumentHandle(
@@ -2224,6 +2484,7 @@
     seen(data);
   }
 
+  @override
   void beginNewExpression(Token token) {
     DirectParserASTContentNewExpressionBegin data =
         new DirectParserASTContentNewExpressionBegin(DirectParserASTType.BEGIN,
@@ -2231,6 +2492,7 @@
     seen(data);
   }
 
+  @override
   void endNewExpression(Token token) {
     DirectParserASTContentNewExpressionEnd data =
         new DirectParserASTContentNewExpressionEnd(DirectParserASTType.END,
@@ -2238,6 +2500,7 @@
     seen(data);
   }
 
+  @override
   void handleNoArguments(Token token) {
     DirectParserASTContentNoArgumentsHandle data =
         new DirectParserASTContentNoArgumentsHandle(DirectParserASTType.HANDLE,
@@ -2245,6 +2508,7 @@
     seen(data);
   }
 
+  @override
   void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
     DirectParserASTContentNoConstructorReferenceContinuationAfterTypeArgumentsHandle
         data =
@@ -2254,6 +2518,7 @@
     seen(data);
   }
 
+  @override
   void handleNoType(Token lastConsumed) {
     DirectParserASTContentNoTypeHandle data =
         new DirectParserASTContentNoTypeHandle(DirectParserASTType.HANDLE,
@@ -2261,6 +2526,7 @@
     seen(data);
   }
 
+  @override
   void handleNoTypeVariables(Token token) {
     DirectParserASTContentNoTypeVariablesHandle data =
         new DirectParserASTContentNoTypeVariablesHandle(
@@ -2269,6 +2535,7 @@
     seen(data);
   }
 
+  @override
   void handleOperator(Token token) {
     DirectParserASTContentOperatorHandle data =
         new DirectParserASTContentOperatorHandle(DirectParserASTType.HANDLE,
@@ -2276,6 +2543,7 @@
     seen(data);
   }
 
+  @override
   void handleSymbolVoid(Token token) {
     DirectParserASTContentSymbolVoidHandle data =
         new DirectParserASTContentSymbolVoidHandle(DirectParserASTType.HANDLE,
@@ -2283,6 +2551,7 @@
     seen(data);
   }
 
+  @override
   void handleOperatorName(Token operatorKeyword, Token token) {
     DirectParserASTContentOperatorNameHandle data =
         new DirectParserASTContentOperatorNameHandle(DirectParserASTType.HANDLE,
@@ -2290,6 +2559,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidOperatorName(Token operatorKeyword, Token token) {
     DirectParserASTContentInvalidOperatorNameHandle data =
         new DirectParserASTContentInvalidOperatorNameHandle(
@@ -2299,6 +2569,7 @@
     seen(data);
   }
 
+  @override
   void handleParenthesizedCondition(Token token) {
     DirectParserASTContentParenthesizedConditionHandle data =
         new DirectParserASTContentParenthesizedConditionHandle(
@@ -2307,6 +2578,7 @@
     seen(data);
   }
 
+  @override
   void handleParenthesizedExpression(Token token) {
     DirectParserASTContentParenthesizedExpressionHandle data =
         new DirectParserASTContentParenthesizedExpressionHandle(
@@ -2315,6 +2587,7 @@
     seen(data);
   }
 
+  @override
   void handleQualified(Token period) {
     DirectParserASTContentQualifiedHandle data =
         new DirectParserASTContentQualifiedHandle(DirectParserASTType.HANDLE,
@@ -2322,6 +2595,7 @@
     seen(data);
   }
 
+  @override
   void handleStringPart(Token token) {
     DirectParserASTContentStringPartHandle data =
         new DirectParserASTContentStringPartHandle(DirectParserASTType.HANDLE,
@@ -2329,6 +2603,7 @@
     seen(data);
   }
 
+  @override
   void handleSuperExpression(Token token, IdentifierContext context) {
     DirectParserASTContentSuperExpressionHandle data =
         new DirectParserASTContentSuperExpressionHandle(
@@ -2338,6 +2613,7 @@
     seen(data);
   }
 
+  @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     DirectParserASTContentSwitchCaseBegin data =
         new DirectParserASTContentSwitchCaseBegin(DirectParserASTType.BEGIN,
@@ -2347,6 +2623,7 @@
     seen(data);
   }
 
+  @override
   void endSwitchCase(
       int labelCount,
       int expressionCount,
@@ -2367,6 +2644,7 @@
     seen(data);
   }
 
+  @override
   void handleThisExpression(Token token, IdentifierContext context) {
     DirectParserASTContentThisExpressionHandle data =
         new DirectParserASTContentThisExpressionHandle(
@@ -2376,6 +2654,7 @@
     seen(data);
   }
 
+  @override
   void handleUnaryPostfixAssignmentExpression(Token token) {
     DirectParserASTContentUnaryPostfixAssignmentExpressionHandle data =
         new DirectParserASTContentUnaryPostfixAssignmentExpressionHandle(
@@ -2384,6 +2663,7 @@
     seen(data);
   }
 
+  @override
   void handleUnaryPrefixExpression(Token token) {
     DirectParserASTContentUnaryPrefixExpressionHandle data =
         new DirectParserASTContentUnaryPrefixExpressionHandle(
@@ -2392,6 +2672,7 @@
     seen(data);
   }
 
+  @override
   void handleUnaryPrefixAssignmentExpression(Token token) {
     DirectParserASTContentUnaryPrefixAssignmentExpressionHandle data =
         new DirectParserASTContentUnaryPrefixAssignmentExpressionHandle(
@@ -2400,6 +2681,7 @@
     seen(data);
   }
 
+  @override
   void beginFormalParameterDefaultValueExpression() {
     DirectParserASTContentFormalParameterDefaultValueExpressionBegin data =
         new DirectParserASTContentFormalParameterDefaultValueExpressionBegin(
@@ -2407,6 +2689,7 @@
     seen(data);
   }
 
+  @override
   void endFormalParameterDefaultValueExpression() {
     DirectParserASTContentFormalParameterDefaultValueExpressionEnd data =
         new DirectParserASTContentFormalParameterDefaultValueExpressionEnd(
@@ -2414,6 +2697,7 @@
     seen(data);
   }
 
+  @override
   void handleValuedFormalParameter(Token equals, Token token) {
     DirectParserASTContentValuedFormalParameterHandle data =
         new DirectParserASTContentValuedFormalParameterHandle(
@@ -2423,6 +2707,7 @@
     seen(data);
   }
 
+  @override
   void handleFormalParameterWithoutValue(Token token) {
     DirectParserASTContentFormalParameterWithoutValueHandle data =
         new DirectParserASTContentFormalParameterWithoutValueHandle(
@@ -2431,6 +2716,7 @@
     seen(data);
   }
 
+  @override
   void handleVoidKeyword(Token token) {
     DirectParserASTContentVoidKeywordHandle data =
         new DirectParserASTContentVoidKeywordHandle(DirectParserASTType.HANDLE,
@@ -2438,6 +2724,7 @@
     seen(data);
   }
 
+  @override
   void handleVoidKeywordWithTypeArguments(Token token) {
     DirectParserASTContentVoidKeywordWithTypeArgumentsHandle data =
         new DirectParserASTContentVoidKeywordWithTypeArgumentsHandle(
@@ -2446,6 +2733,7 @@
     seen(data);
   }
 
+  @override
   void beginYieldStatement(Token token) {
     DirectParserASTContentYieldStatementBegin data =
         new DirectParserASTContentYieldStatementBegin(DirectParserASTType.BEGIN,
@@ -2453,6 +2741,7 @@
     seen(data);
   }
 
+  @override
   void endYieldStatement(Token yieldToken, Token? starToken, Token endToken) {
     DirectParserASTContentYieldStatementEnd data =
         new DirectParserASTContentYieldStatementEnd(DirectParserASTType.END,
@@ -2460,6 +2749,7 @@
     seen(data);
   }
 
+  @override
   void endInvalidYieldStatement(Token beginToken, Token? starToken,
       Token endToken, MessageCode errorCode) {
     DirectParserASTContentInvalidYieldStatementEnd data =
@@ -2472,6 +2762,7 @@
     seen(data);
   }
 
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     DirectParserASTContentRecoverableErrorHandle data =
@@ -2483,6 +2774,7 @@
     seen(data);
   }
 
+  @override
   void handleErrorToken(ErrorToken token) {
     DirectParserASTContentErrorTokenHandle data =
         new DirectParserASTContentErrorTokenHandle(DirectParserASTType.HANDLE,
@@ -2490,6 +2782,7 @@
     seen(data);
   }
 
+  @override
   void handleUnescapeError(
       Message message, Token location, int stringOffset, int length) {
     DirectParserASTContentUnescapeErrorHandle data =
@@ -2502,6 +2795,7 @@
     seen(data);
   }
 
+  @override
   void handleInvalidStatement(Token token, Message message) {
     DirectParserASTContentInvalidStatementHandle data =
         new DirectParserASTContentInvalidStatementHandle(
@@ -2511,6 +2805,7 @@
     seen(data);
   }
 
+  @override
   void handleScript(Token token) {
     DirectParserASTContentScriptHandle data =
         new DirectParserASTContentScriptHandle(DirectParserASTType.HANDLE,
@@ -2518,6 +2813,7 @@
     seen(data);
   }
 
+  @override
   void handleCommentReferenceText(String referenceSource, int referenceOffset) {
     DirectParserASTContentCommentReferenceTextHandle data =
         new DirectParserASTContentCommentReferenceTextHandle(
@@ -2527,6 +2823,7 @@
     seen(data);
   }
 
+  @override
   void handleCommentReference(
       Token? newKeyword, Token? prefix, Token? period, Token token) {
     DirectParserASTContentCommentReferenceHandle data =
@@ -2539,6 +2836,7 @@
     seen(data);
   }
 
+  @override
   void handleNoCommentReference() {
     DirectParserASTContentNoCommentReferenceHandle data =
         new DirectParserASTContentNoCommentReferenceHandle(
@@ -2546,6 +2844,7 @@
     seen(data);
   }
 
+  @override
   void handleTypeArgumentApplication(Token openAngleBracket) {
     DirectParserASTContentTypeArgumentApplicationHandle data =
         new DirectParserASTContentTypeArgumentApplicationHandle(
@@ -2554,6 +2853,7 @@
     seen(data);
   }
 
+  @override
   void handleNewAsIdentifier(Token token) {
     DirectParserASTContentNewAsIdentifierHandle data =
         new DirectParserASTContentNewAsIdentifierHandle(
@@ -2570,6 +2870,7 @@
       {required this.token})
       : super("Arguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2584,6 +2885,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("Arguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -2599,6 +2901,7 @@
       {this.asyncToken, this.starToken})
       : super("AsyncModifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "asyncToken": asyncToken,
         "starToken": starToken,
@@ -2613,6 +2916,7 @@
       {required this.token})
       : super("AwaitExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2626,6 +2930,7 @@
       {required this.beginToken, required this.endToken})
       : super("AwaitExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -2644,6 +2949,7 @@
       required this.errorCode})
       : super("InvalidAwaitExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -2659,6 +2965,7 @@
       {required this.token, required this.blockKind})
       : super("Block", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "blockKind": blockKind,
@@ -2678,6 +2985,7 @@
       required this.blockKind})
       : super("Block", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -2694,6 +3002,7 @@
       {required this.token})
       : super("InvalidTopLevelBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2706,6 +3015,7 @@
       {required this.token})
       : super("Cascade", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2715,6 +3025,7 @@
   DirectParserASTContentCascadeEnd(DirectParserASTType type)
       : super("Cascade", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -2725,6 +3036,7 @@
       {required this.caseKeyword})
       : super("CaseExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "caseKeyword": caseKeyword,
       };
@@ -2737,6 +3049,7 @@
       {required this.colon})
       : super("CaseExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "colon": colon,
       };
@@ -2751,6 +3064,7 @@
       {required this.kind, required this.token})
       : super("ClassOrMixinBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "kind": kind,
         "token": token,
@@ -2770,6 +3084,7 @@
       required this.endToken})
       : super("ClassOrMixinBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "kind": kind,
         "memberCount": memberCount,
@@ -2787,6 +3102,7 @@
       {required this.token})
       : super("ClassOrNamedMixinApplicationPrelude", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2802,6 +3118,7 @@
       {required this.begin, this.abstractToken, required this.name})
       : super("ClassDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "abstractToken": abstractToken,
@@ -2817,6 +3134,7 @@
       {this.extendsKeyword, required this.typeCount})
       : super("ClassExtends", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "extendsKeyword": extendsKeyword,
         "typeCount": typeCount,
@@ -2832,6 +3150,7 @@
       {this.implementsKeyword, required this.interfacesCount})
       : super("ClassOrMixinImplements", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "implementsKeyword": implementsKeyword,
         "interfacesCount": interfacesCount,
@@ -2847,6 +3166,7 @@
       {required this.begin, required this.classKeyword, this.nativeToken})
       : super("ClassHeader", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "classKeyword": classKeyword,
@@ -2859,6 +3179,7 @@
   DirectParserASTContentRecoverClassHeaderHandle(DirectParserASTType type)
       : super("RecoverClassHeader", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -2870,6 +3191,7 @@
       {required this.beginToken, required this.endToken})
       : super("ClassDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -2885,6 +3207,7 @@
       {required this.mixinKeyword, required this.name})
       : super("MixinDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "mixinKeyword": mixinKeyword,
         "name": name,
@@ -2899,6 +3222,7 @@
       {this.onKeyword, required this.typeCount})
       : super("MixinOn", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "onKeyword": onKeyword,
         "typeCount": typeCount,
@@ -2912,6 +3236,7 @@
       {required this.mixinKeyword})
       : super("MixinHeader", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "mixinKeyword": mixinKeyword,
       };
@@ -2922,6 +3247,7 @@
   DirectParserASTContentRecoverMixinHeaderHandle(DirectParserASTType type)
       : super("RecoverMixinHeader", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -2933,6 +3259,7 @@
       {required this.mixinKeyword, required this.endToken})
       : super("MixinDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "mixinKeyword": mixinKeyword,
         "endToken": endToken,
@@ -2948,6 +3275,7 @@
       {required this.token})
       : super("UncategorizedTopLevelDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -2962,6 +3290,7 @@
       {required this.extensionKeyword})
       : super("ExtensionDeclarationPrelude", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "extensionKeyword": extensionKeyword,
       };
@@ -2976,6 +3305,7 @@
       {required this.extensionKeyword, this.name})
       : super("ExtensionDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "extensionKeyword": extensionKeyword,
         "name": name,
@@ -2996,6 +3326,7 @@
       required this.endToken})
       : super("ExtensionDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "extensionKeyword": extensionKeyword,
         "typeKeyword": typeKeyword,
@@ -3011,6 +3342,7 @@
       {required this.token})
       : super("Combinators", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3023,6 +3355,7 @@
       {required this.count})
       : super("Combinators", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -3036,6 +3369,7 @@
       {required this.token})
       : super("CompilationUnit", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3046,6 +3380,7 @@
   DirectParserASTContentDirectivesOnlyHandle(DirectParserASTType type)
       : super("DirectivesOnly", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -3057,6 +3392,7 @@
       {required this.count, required this.token})
       : super("CompilationUnit", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "token": token,
@@ -3070,6 +3406,7 @@
       {required this.token})
       : super("ConstLiteral", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3082,6 +3419,7 @@
       {required this.token})
       : super("ConstLiteral", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3095,6 +3433,7 @@
       {required this.start})
       : super("ConstructorReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "start": start,
       };
@@ -3114,6 +3453,7 @@
       required this.constructorReferenceContext})
       : super("ConstructorReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "start": start,
         "periodBeforeName": periodBeforeName,
@@ -3130,6 +3470,7 @@
       {required this.token})
       : super("DoWhileStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3146,6 +3487,7 @@
       required this.endToken})
       : super("DoWhileStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "doKeyword": doKeyword,
         "whileKeyword": whileKeyword,
@@ -3161,6 +3503,7 @@
       {required this.token})
       : super("DoWhileStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3174,6 +3517,7 @@
       {required this.token})
       : super("DoWhileStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3187,6 +3531,7 @@
       {required this.token})
       : super("WhileStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3200,6 +3545,7 @@
       {required this.token})
       : super("WhileStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3212,6 +3558,7 @@
       {required this.enumKeyword})
       : super("Enum", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "enumKeyword": enumKeyword,
       };
@@ -3226,6 +3573,7 @@
       {required this.enumKeyword, required this.leftBrace, required this.count})
       : super("Enum", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "enumKeyword": enumKeyword,
         "leftBrace": leftBrace,
@@ -3240,6 +3588,7 @@
       {required this.token})
       : super("Export", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3253,6 +3602,7 @@
       {required this.exportKeyword, required this.semicolon})
       : super("Export", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "exportKeyword": exportKeyword,
         "semicolon": semicolon,
@@ -3268,6 +3618,7 @@
       {required this.token, required this.message})
       : super("ExtraneousExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "message": message,
@@ -3282,6 +3633,7 @@
       {required this.token})
       : super("ExpressionStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3296,6 +3648,7 @@
       {required this.lastConsumed, this.externalToken, this.constToken})
       : super("FactoryMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
         "externalToken": externalToken,
@@ -3315,6 +3668,7 @@
       required this.endToken})
       : super("ClassFactoryMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "factoryKeyword": factoryKeyword,
@@ -3334,6 +3688,7 @@
       required this.endToken})
       : super("MixinFactoryMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "factoryKeyword": factoryKeyword,
@@ -3353,6 +3708,7 @@
       required this.endToken})
       : super("ExtensionFactoryMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "factoryKeyword": factoryKeyword,
@@ -3376,6 +3732,7 @@
       this.varFinalOrConst})
       : super("FormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "kind": kind,
@@ -3404,6 +3761,7 @@
       required this.memberKind})
       : super("FormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "thisKeyword": thisKeyword,
         "periodAfterThis": periodAfterThis,
@@ -3424,6 +3782,7 @@
       {required this.token, required this.kind})
       : super("NoFormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "kind": kind,
@@ -3439,6 +3798,7 @@
       {required this.token, required this.kind})
       : super("FormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "kind": kind,
@@ -3458,6 +3818,7 @@
       required this.kind})
       : super("FormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -3489,6 +3850,7 @@
       required this.endToken})
       : super("ClassFields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
         "externalToken": externalToken,
@@ -3525,6 +3887,7 @@
       required this.endToken})
       : super("MixinFields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
         "externalToken": externalToken,
@@ -3561,6 +3924,7 @@
       required this.endToken})
       : super("ExtensionFields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
         "externalToken": externalToken,
@@ -3583,6 +3947,7 @@
       {required this.token})
       : super("ForInitializerEmptyStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3599,6 +3964,7 @@
       required this.forIn})
       : super("ForInitializerExpressionStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "forIn": forIn,
@@ -3616,6 +3982,7 @@
       required this.forIn})
       : super("ForInitializerLocalVariableDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "forIn": forIn,
@@ -3629,6 +3996,7 @@
       {required this.token})
       : super("ForStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3647,6 +4015,7 @@
       required this.updateExpressionCount})
       : super("ForLoopParts", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "forKeyword": forKeyword,
         "leftParen": leftParen,
@@ -3662,6 +4031,7 @@
       {required this.endToken})
       : super("ForStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -3675,6 +4045,7 @@
       {required this.token})
       : super("ForStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3687,6 +4058,7 @@
       {required this.token})
       : super("ForStatementBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3706,6 +4078,7 @@
       required this.inKeyword})
       : super("ForInLoopParts", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "awaitToken": awaitToken,
         "forToken": forToken,
@@ -3721,6 +4094,7 @@
       {required this.endToken})
       : super("ForIn", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -3734,6 +4108,7 @@
       {required this.token})
       : super("ForInExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3746,6 +4121,7 @@
       {required this.token})
       : super("ForInExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3758,6 +4134,7 @@
       {required this.token})
       : super("ForInBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3770,6 +4147,7 @@
       {required this.token})
       : super("ForInBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3783,6 +4161,7 @@
       {required this.token})
       : super("NamedFunctionExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3796,6 +4175,7 @@
       {required this.endToken})
       : super("NamedFunctionExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -3809,6 +4189,7 @@
       {required this.token})
       : super("LocalFunctionDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3822,6 +4203,7 @@
       {required this.endToken})
       : super("LocalFunctionDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -3835,6 +4217,7 @@
       {required this.token})
       : super("BlockFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3850,6 +4233,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("BlockFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -3865,6 +4249,7 @@
       {required this.token})
       : super("NoFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3879,6 +4264,7 @@
       {required this.token, required this.isExpressionBody})
       : super("FunctionBodySkipped", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "isExpressionBody": isExpressionBody,
@@ -3892,6 +4278,7 @@
       {required this.token})
       : super("FunctionName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3905,6 +4292,7 @@
       {required this.beginToken, required this.token})
       : super("FunctionName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "token": token,
@@ -3919,6 +4307,7 @@
       {required this.token})
       : super("FunctionTypeAlias", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -3934,6 +4323,7 @@
       {required this.typedefKeyword, this.equals, required this.endToken})
       : super("FunctionTypeAlias", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "typedefKeyword": typedefKeyword,
         "equals": equals,
@@ -3949,6 +4339,7 @@
       {required this.withKeyword})
       : super("ClassWithClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "withKeyword": withKeyword,
       };
@@ -3959,6 +4350,7 @@
   DirectParserASTContentClassNoWithClauseHandle(DirectParserASTType type)
       : super("ClassNoWithClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -3972,6 +4364,7 @@
       {required this.begin, this.abstractToken, required this.name})
       : super("NamedMixinApplication", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "abstractToken": abstractToken,
@@ -3988,6 +4381,7 @@
       {required this.withKeyword})
       : super("NamedMixinApplicationWithClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "withKeyword": withKeyword,
       };
@@ -4009,6 +4403,7 @@
       required this.endToken})
       : super("NamedMixinApplication", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "classKeyword": classKeyword,
@@ -4025,6 +4420,7 @@
       {required this.hideKeyword})
       : super("Hide", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hideKeyword": hideKeyword,
       };
@@ -4037,6 +4433,7 @@
       {required this.hideKeyword})
       : super("Hide", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hideKeyword": hideKeyword,
       };
@@ -4050,6 +4447,7 @@
       {required this.count})
       : super("IdentifierList", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -4062,6 +4460,7 @@
       {required this.token})
       : super("TypeList", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4074,6 +4473,7 @@
       {required this.count})
       : super("TypeList", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -4086,6 +4486,7 @@
       {required this.token})
       : super("IfStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4099,6 +4500,7 @@
       {required this.ifToken, this.elseToken})
       : super("IfStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "ifToken": ifToken,
         "elseToken": elseToken,
@@ -4112,6 +4514,7 @@
       {required this.token})
       : super("ThenStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4124,6 +4527,7 @@
       {required this.token})
       : super("ThenStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4136,6 +4540,7 @@
       {required this.token})
       : super("ElseStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4148,6 +4553,7 @@
       {required this.token})
       : super("ElseStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4160,6 +4566,7 @@
       {required this.importKeyword})
       : super("Import", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "importKeyword": importKeyword,
       };
@@ -4173,6 +4580,7 @@
       {this.deferredKeyword, this.asKeyword})
       : super("ImportPrefix", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "deferredKeyword": deferredKeyword,
         "asKeyword": asKeyword,
@@ -4187,6 +4595,7 @@
       {required this.importKeyword, this.semicolon})
       : super("Import", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "importKeyword": importKeyword,
         "semicolon": semicolon,
@@ -4200,6 +4609,7 @@
       {this.semicolon})
       : super("RecoverImport", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "semicolon": semicolon,
       };
@@ -4213,6 +4623,7 @@
       {required this.token})
       : super("ConditionalUris", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4225,6 +4636,7 @@
       {required this.count})
       : super("ConditionalUris", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -4237,6 +4649,7 @@
       {required this.ifKeyword})
       : super("ConditionalUri", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "ifKeyword": ifKeyword,
       };
@@ -4251,6 +4664,7 @@
       {required this.ifKeyword, required this.leftParen, this.equalSign})
       : super("ConditionalUri", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "ifKeyword": ifKeyword,
         "leftParen": leftParen,
@@ -4266,6 +4680,7 @@
       {required this.count, required this.firstIdentifier})
       : super("DottedName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "firstIdentifier": firstIdentifier,
@@ -4281,6 +4696,7 @@
       {required this.token})
       : super("ImplicitCreationExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4294,6 +4710,7 @@
       {required this.token})
       : super("ImplicitCreationExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4307,6 +4724,7 @@
       {required this.token})
       : super("InitializedIdentifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4320,6 +4738,7 @@
       {required this.nameToken})
       : super("InitializedIdentifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nameToken": nameToken,
       };
@@ -4333,6 +4752,7 @@
       {required this.token})
       : super("FieldInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4346,6 +4766,7 @@
       {required this.assignment, required this.token})
       : super("FieldInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "assignment": assignment,
         "token": token,
@@ -4360,6 +4781,7 @@
       {required this.token})
       : super("NoFieldInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4373,6 +4795,7 @@
       {required this.token})
       : super("VariableInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4386,6 +4809,7 @@
       {required this.assignmentOperator})
       : super("VariableInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "assignmentOperator": assignmentOperator,
       };
@@ -4399,6 +4823,7 @@
       {required this.token})
       : super("NoVariableInitializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4411,6 +4836,7 @@
       {required this.token})
       : super("Initializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4423,6 +4849,7 @@
       {required this.token})
       : super("Initializer", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4435,6 +4862,7 @@
       {required this.token})
       : super("Initializers", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4449,6 +4877,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("Initializers", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -4461,6 +4890,7 @@
   DirectParserASTContentNoInitializersHandle(DirectParserASTType type)
       : super("NoInitializers", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -4472,6 +4902,7 @@
       {required this.token})
       : super("InvalidExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4485,6 +4916,7 @@
       {required this.token})
       : super("InvalidFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4498,6 +4930,7 @@
       {required this.token})
       : super("InvalidTypeReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4510,6 +4943,7 @@
       {required this.token})
       : super("Label", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4524,6 +4958,7 @@
       {required this.token, required this.labelCount})
       : super("LabeledStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "labelCount": labelCount,
@@ -4537,6 +4972,7 @@
       {required this.labelCount})
       : super("LabeledStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "labelCount": labelCount,
       };
@@ -4549,6 +4985,7 @@
       {required this.token})
       : super("LibraryName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4562,6 +4999,7 @@
       {required this.libraryKeyword, required this.semicolon})
       : super("LibraryName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "libraryKeyword": libraryKeyword,
         "semicolon": semicolon,
@@ -4577,6 +5015,7 @@
       {required this.colon, required this.endToken})
       : super("LiteralMapEntry", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "colon": colon,
         "endToken": endToken,
@@ -4590,6 +5029,7 @@
       {required this.token})
       : super("LiteralString", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4604,6 +5044,7 @@
       {required this.leftBracket, this.rightBracket})
       : super("InterpolationExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "leftBracket": leftBracket,
         "rightBracket": rightBracket,
@@ -4618,6 +5059,7 @@
       {required this.interpolationCount, required this.endToken})
       : super("LiteralString", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "interpolationCount": interpolationCount,
         "endToken": endToken,
@@ -4633,6 +5075,7 @@
       {required this.startToken, required this.literalCount})
       : super("StringJuxtaposition", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "startToken": startToken,
         "literalCount": literalCount,
@@ -4643,6 +5086,7 @@
   DirectParserASTContentMemberBegin(DirectParserASTType type)
       : super("Member", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -4653,6 +5097,7 @@
       {required this.endToken})
       : super("InvalidMember", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -4662,6 +5107,7 @@
   DirectParserASTContentMemberEnd(DirectParserASTType type)
       : super("Member", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -4682,6 +5128,7 @@
       required this.name})
       : super("Method", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "externalToken": externalToken,
         "staticToken": staticToken,
@@ -4707,6 +5154,7 @@
       required this.endToken})
       : super("ClassMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4731,6 +5179,7 @@
       required this.endToken})
       : super("MixinMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4755,6 +5204,7 @@
       required this.endToken})
       : super("ExtensionMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4779,6 +5229,7 @@
       required this.endToken})
       : super("ClassConstructor", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4803,6 +5254,7 @@
       required this.endToken})
       : super("MixinConstructor", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4828,6 +5280,7 @@
       required this.endToken})
       : super("ExtensionConstructor", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "getOrSet": getOrSet,
         "beginToken": beginToken,
@@ -4844,6 +5297,7 @@
       {required this.token})
       : super("MetadataStar", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4856,6 +5310,7 @@
       {required this.count})
       : super("MetadataStar", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
       };
@@ -4868,6 +5323,7 @@
       {required this.token})
       : super("Metadata", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4882,6 +5338,7 @@
       {required this.beginToken, this.periodBeforeName, required this.endToken})
       : super("Metadata", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "periodBeforeName": periodBeforeName,
@@ -4897,6 +5354,7 @@
       {required this.token})
       : super("OptionalFormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4912,6 +5370,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("OptionalFormalParameters", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -4926,6 +5385,7 @@
       {required this.token})
       : super("Part", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4939,6 +5399,7 @@
       {required this.partKeyword, required this.semicolon})
       : super("Part", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "partKeyword": partKeyword,
         "semicolon": semicolon,
@@ -4952,6 +5413,7 @@
       {required this.token})
       : super("PartOf", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -4970,6 +5432,7 @@
       required this.hasName})
       : super("PartOf", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "partKeyword": partKeyword,
         "ofKeyword": ofKeyword,
@@ -4986,6 +5449,7 @@
       {required this.token})
       : super("RedirectingFactoryBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5000,6 +5464,7 @@
       {required this.beginToken, required this.endToken})
       : super("RedirectingFactoryBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -5014,6 +5479,7 @@
       {required this.token})
       : super("ReturnStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5028,6 +5494,7 @@
       {required this.nativeToken, required this.semicolon})
       : super("NativeFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nativeToken": nativeToken,
         "semicolon": semicolon,
@@ -5045,6 +5512,7 @@
       required this.semicolon})
       : super("NativeFunctionBodyIgnored", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nativeToken": nativeToken,
         "semicolon": semicolon,
@@ -5062,6 +5530,7 @@
       required this.semicolon})
       : super("NativeFunctionBodySkipped", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nativeToken": nativeToken,
         "semicolon": semicolon,
@@ -5076,6 +5545,7 @@
       {required this.semicolon})
       : super("EmptyFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "semicolon": semicolon,
       };
@@ -5090,6 +5560,7 @@
       {required this.arrowToken, this.endToken})
       : super("ExpressionFunctionBody", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "arrowToken": arrowToken,
         "endToken": endToken,
@@ -5107,6 +5578,7 @@
       required this.endToken})
       : super("ReturnStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hasExpression": hasExpression,
         "beginToken": beginToken,
@@ -5122,6 +5594,7 @@
       {required this.beginToken, required this.endToken})
       : super("Send", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -5135,6 +5608,7 @@
       {required this.showKeyword})
       : super("Show", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "showKeyword": showKeyword,
       };
@@ -5147,6 +5621,7 @@
       {required this.showKeyword})
       : super("Show", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "showKeyword": showKeyword,
       };
@@ -5160,6 +5635,7 @@
       {required this.token})
       : super("SwitchStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5173,6 +5649,7 @@
       {required this.switchKeyword, required this.endToken})
       : super("SwitchStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "switchKeyword": switchKeyword,
         "endToken": endToken,
@@ -5186,6 +5663,7 @@
       {required this.token})
       : super("SwitchBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5202,6 +5680,7 @@
       required this.endToken})
       : super("SwitchBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "caseCount": caseCount,
         "beginToken": beginToken,
@@ -5216,6 +5695,7 @@
       {required this.token})
       : super("LiteralSymbol", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5229,6 +5709,7 @@
       {required this.hashToken, required this.identifierCount})
       : super("LiteralSymbol", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hashToken": hashToken,
         "identifierCount": identifierCount,
@@ -5244,6 +5725,7 @@
       {required this.throwToken, required this.endToken})
       : super("ThrowExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "throwToken": throwToken,
         "endToken": endToken,
@@ -5258,6 +5740,7 @@
       {required this.token})
       : super("RethrowStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5271,6 +5754,7 @@
       {required this.rethrowToken, required this.endToken})
       : super("RethrowStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "rethrowToken": rethrowToken,
         "endToken": endToken,
@@ -5285,6 +5769,7 @@
       {required this.nextToken})
       : super("TopLevelDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nextToken": nextToken,
       };
@@ -5299,6 +5784,7 @@
       {required this.endToken})
       : super("InvalidTopLevelDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "endToken": endToken,
       };
@@ -5311,6 +5797,7 @@
       {required this.token})
       : super("TopLevelMember", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5323,6 +5810,7 @@
       {required this.lastConsumed})
       : super("Fields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
       };
@@ -5349,6 +5837,7 @@
       required this.endToken})
       : super("TopLevelFields", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "externalToken": externalToken,
         "staticToken": staticToken,
@@ -5369,6 +5858,7 @@
       {required this.lastConsumed, this.externalToken})
       : super("TopLevelMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
         "externalToken": externalToken,
@@ -5384,6 +5874,7 @@
       {required this.beginToken, this.getOrSet, required this.endToken})
       : super("TopLevelMethod", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "getOrSet": getOrSet,
@@ -5398,6 +5889,7 @@
       {required this.token})
       : super("TryStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5411,6 +5903,7 @@
       {required this.caseKeyword, required this.colon})
       : super("CaseMatch", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "caseKeyword": caseKeyword,
         "colon": colon,
@@ -5424,6 +5917,7 @@
       {required this.token})
       : super("CatchClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5436,6 +5930,7 @@
       {required this.token})
       : super("CatchClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5450,6 +5945,7 @@
       {this.onKeyword, this.catchKeyword, this.comma})
       : super("CatchBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "onKeyword": onKeyword,
         "catchKeyword": catchKeyword,
@@ -5464,6 +5960,7 @@
       {required this.finallyKeyword})
       : super("FinallyBlock", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "finallyKeyword": finallyKeyword,
       };
@@ -5478,6 +5975,7 @@
       {required this.catchCount, required this.tryKeyword, this.finallyKeyword})
       : super("TryStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "catchCount": catchCount,
         "tryKeyword": tryKeyword,
@@ -5493,6 +5991,7 @@
       {required this.beginToken, this.questionMark})
       : super("Type", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "questionMark": questionMark,
@@ -5507,6 +6006,7 @@
       {required this.bang})
       : super("NonNullAssertExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "bang": bang,
       };
@@ -5519,6 +6019,7 @@
       {required this.token})
       : super("NoName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5531,6 +6032,7 @@
       {required this.beginToken})
       : super("FunctionType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
       };
@@ -5544,6 +6046,7 @@
       {required this.functionToken, this.questionMark})
       : super("FunctionType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "functionToken": functionToken,
         "questionMark": questionMark,
@@ -5557,6 +6060,7 @@
       {required this.token})
       : super("TypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5571,6 +6075,7 @@
       {required this.count, required this.beginToken, required this.endToken})
       : super("TypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "beginToken": beginToken,
@@ -5586,6 +6091,7 @@
       {required this.token})
       : super("InvalidTypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5599,6 +6105,7 @@
       {required this.token})
       : super("NoTypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5611,6 +6118,7 @@
       {required this.token})
       : super("TypeVariable", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5625,6 +6133,7 @@
       {required this.token, required this.count})
       : super("TypeVariablesDefined", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "count": count,
@@ -5644,6 +6153,7 @@
       this.variance})
       : super("TypeVariable", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "index": index,
@@ -5659,6 +6169,7 @@
       {required this.token})
       : super("TypeVariables", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5672,6 +6183,7 @@
       {required this.beginToken, required this.endToken})
       : super("TypeVariables", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "endToken": endToken,
@@ -5686,6 +6198,7 @@
       {required this.token})
       : super("FunctionExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5700,6 +6213,7 @@
       {required this.beginToken, required this.token})
       : super("FunctionExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "token": token,
@@ -5716,6 +6230,7 @@
       {required this.token, this.lateToken, this.varFinalOrConst})
       : super("VariablesDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "lateToken": lateToken,
@@ -5732,6 +6247,7 @@
       {required this.count, this.endToken})
       : super("VariablesDeclaration", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "endToken": endToken,
@@ -5745,6 +6261,7 @@
       {required this.token})
       : super("WhileStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5758,6 +6275,7 @@
       {required this.whileKeyword, required this.endToken})
       : super("WhileStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "whileKeyword": whileKeyword,
         "endToken": endToken,
@@ -5771,6 +6289,7 @@
       {required this.operator})
       : super("AsOperatorType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -5783,6 +6302,7 @@
       {required this.operator})
       : super("AsOperatorType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -5795,6 +6315,7 @@
       {required this.operator})
       : super("AsOperator", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -5808,6 +6329,7 @@
       {required this.token})
       : super("AssignmentExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5821,6 +6343,7 @@
       {required this.token})
       : super("BinaryExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5833,6 +6356,7 @@
       {required this.token})
       : super("BinaryExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5846,6 +6370,7 @@
       {required this.token})
       : super("EndingBinaryExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5859,6 +6384,7 @@
       {required this.question})
       : super("ConditionalExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "question": question,
       };
@@ -5870,6 +6396,7 @@
       DirectParserASTType type)
       : super("ConditionalExpressionColon", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -5882,6 +6409,7 @@
       {required this.question, required this.colon})
       : super("ConditionalExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "question": question,
         "colon": colon,
@@ -5896,6 +6424,7 @@
       {required this.constKeyword})
       : super("ConstExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "constKeyword": constKeyword,
       };
@@ -5908,6 +6437,7 @@
       {required this.token})
       : super("ConstExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5920,6 +6450,7 @@
       {required this.constKeyword})
       : super("ConstFactory", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "constKeyword": constKeyword,
       };
@@ -5933,6 +6464,7 @@
       {this.awaitToken, required this.forToken})
       : super("ForControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "awaitToken": awaitToken,
         "forToken": forToken,
@@ -5946,6 +6478,7 @@
       {required this.token})
       : super("ForControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5958,6 +6491,7 @@
       {required this.token})
       : super("ForInControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5970,6 +6504,7 @@
       {required this.ifToken})
       : super("IfControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "ifToken": ifToken,
       };
@@ -5983,6 +6518,7 @@
       {required this.token})
       : super("ThenControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -5996,6 +6532,7 @@
       {required this.elseToken})
       : super("ElseControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "elseToken": elseToken,
       };
@@ -6008,6 +6545,7 @@
       {required this.token})
       : super("IfControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6021,6 +6559,7 @@
       {required this.token})
       : super("IfElseControlFlow", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6034,6 +6573,7 @@
       {required this.spreadToken})
       : super("SpreadExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "spreadToken": spreadToken,
       };
@@ -6048,6 +6588,7 @@
       {required this.token})
       : super("FunctionTypedFormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6064,6 +6605,7 @@
       this.question})
       : super("FunctionTypedFormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nameToken": nameToken,
         "question": question,
@@ -6078,6 +6620,7 @@
       {required this.token, required this.context})
       : super("Identifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "context": context,
@@ -6096,6 +6639,7 @@
       required this.closeSquareBracket})
       : super("IndexedExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "question": question,
         "openSquareBracket": openSquareBracket,
@@ -6110,6 +6654,7 @@
       {required this.operator})
       : super("IsOperatorType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -6122,6 +6667,7 @@
       {required this.operator})
       : super("IsOperatorType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operator": operator,
       };
@@ -6135,6 +6681,7 @@
       {required this.isOperator, this.not})
       : super("IsOperator", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "isOperator": isOperator,
         "not": not,
@@ -6148,6 +6695,7 @@
       {required this.token})
       : super("LiteralBool", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6165,6 +6713,7 @@
       required this.endToken})
       : super("BreakStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hasTarget": hasTarget,
         "breakKeyword": breakKeyword,
@@ -6184,6 +6733,7 @@
       required this.endToken})
       : super("ContinueStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "hasTarget": hasTarget,
         "continueKeyword": continueKeyword,
@@ -6199,6 +6749,7 @@
       {required this.token})
       : super("EmptyStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6212,6 +6763,7 @@
       {required this.assertKeyword, required this.kind})
       : super("Assert", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "assertKeyword": assertKeyword,
         "kind": kind,
@@ -6233,6 +6785,7 @@
       required this.semicolonToken})
       : super("Assert", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "assertKeyword": assertKeyword,
         "kind": kind,
@@ -6249,6 +6802,7 @@
       {required this.token})
       : super("LiteralDouble", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6261,6 +6815,7 @@
       {required this.token})
       : super("LiteralInt", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6279,6 +6834,7 @@
       required this.rightBracket})
       : super("LiteralList", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "leftBracket": leftBracket,
@@ -6303,6 +6859,7 @@
       required this.hasSetEntry})
       : super("LiteralSetOrMap", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "count": count,
         "leftBrace": leftBrace,
@@ -6319,6 +6876,7 @@
       {required this.token})
       : super("LiteralNull", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6332,6 +6890,7 @@
       {required this.nativeToken, required this.hasName})
       : super("NativeClause", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "nativeToken": nativeToken,
         "hasName": hasName,
@@ -6345,6 +6904,7 @@
       {required this.colon})
       : super("NamedArgument", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "colon": colon,
       };
@@ -6357,6 +6917,7 @@
       {required this.token})
       : super("NewExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6369,6 +6930,7 @@
       {required this.token})
       : super("NewExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6381,6 +6943,7 @@
       {required this.token})
       : super("NoArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6395,6 +6958,7 @@
       {required this.token})
       : super("NoConstructorReferenceContinuationAfterTypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6407,6 +6971,7 @@
       {required this.lastConsumed})
       : super("NoType", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
       };
@@ -6420,6 +6985,7 @@
       {required this.token})
       : super("NoTypeVariables", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6432,6 +6998,7 @@
       {required this.token})
       : super("Operator", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6444,6 +7011,7 @@
       {required this.token})
       : super("SymbolVoid", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6457,6 +7025,7 @@
       {required this.operatorKeyword, required this.token})
       : super("OperatorName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operatorKeyword": operatorKeyword,
         "token": token,
@@ -6472,6 +7041,7 @@
       {required this.operatorKeyword, required this.token})
       : super("InvalidOperatorName", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "operatorKeyword": operatorKeyword,
         "token": token,
@@ -6486,6 +7056,7 @@
       {required this.token})
       : super("ParenthesizedCondition", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6499,6 +7070,7 @@
       {required this.token})
       : super("ParenthesizedExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6511,6 +7083,7 @@
       {required this.period})
       : super("Qualified", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "period": period,
       };
@@ -6523,6 +7096,7 @@
       {required this.token})
       : super("StringPart", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6537,6 +7111,7 @@
       {required this.token, required this.context})
       : super("SuperExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "context": context,
@@ -6554,6 +7129,7 @@
       required this.firstToken})
       : super("SwitchCase", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "labelCount": labelCount,
         "expressionCount": expressionCount,
@@ -6580,6 +7156,7 @@
       required this.endToken})
       : super("SwitchCase", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "labelCount": labelCount,
         "expressionCount": expressionCount,
@@ -6600,6 +7177,7 @@
       {required this.token, required this.context})
       : super("ThisExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "context": context,
@@ -6615,6 +7193,7 @@
       {required this.token})
       : super("UnaryPostfixAssignmentExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6628,6 +7207,7 @@
       {required this.token})
       : super("UnaryPrefixExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6642,6 +7222,7 @@
       {required this.token})
       : super("UnaryPrefixAssignmentExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6653,6 +7234,7 @@
       DirectParserASTType type)
       : super("FormalParameterDefaultValueExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -6662,6 +7244,7 @@
       DirectParserASTType type)
       : super("FormalParameterDefaultValueExpression", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -6674,6 +7257,7 @@
       {required this.equals, required this.token})
       : super("ValuedFormalParameter", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "equals": equals,
         "token": token,
@@ -6689,6 +7273,7 @@
       {required this.token})
       : super("FormalParameterWithoutValue", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6701,6 +7286,7 @@
       {required this.token})
       : super("VoidKeyword", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6715,6 +7301,7 @@
       {required this.token})
       : super("VoidKeywordWithTypeArguments", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6727,6 +7314,7 @@
       {required this.token})
       : super("YieldStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6741,6 +7329,7 @@
       {required this.yieldToken, this.starToken, required this.endToken})
       : super("YieldStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "yieldToken": yieldToken,
         "starToken": starToken,
@@ -6762,6 +7351,7 @@
       required this.errorCode})
       : super("InvalidYieldStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
         "starToken": starToken,
@@ -6780,6 +7370,7 @@
       {required this.message, required this.startToken, required this.endToken})
       : super("RecoverableError", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "message": message,
         "startToken": startToken,
@@ -6794,6 +7385,7 @@
       {required this.token})
       : super("ErrorToken", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6812,6 +7404,7 @@
       required this.length})
       : super("UnescapeError", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "message": message,
         "location": location,
@@ -6829,6 +7422,7 @@
       {required this.token, required this.message})
       : super("InvalidStatement", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
         "message": message,
@@ -6842,6 +7436,7 @@
       {required this.token})
       : super("Script", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
@@ -6856,6 +7451,7 @@
       {required this.referenceSource, required this.referenceOffset})
       : super("CommentReferenceText", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "referenceSource": referenceSource,
         "referenceOffset": referenceOffset,
@@ -6873,6 +7469,7 @@
       {this.newKeyword, this.prefix, this.period, required this.token})
       : super("CommentReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "newKeyword": newKeyword,
         "prefix": prefix,
@@ -6886,6 +7483,7 @@
   DirectParserASTContentNoCommentReferenceHandle(DirectParserASTType type)
       : super("NoCommentReference", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {};
 }
 
@@ -6897,6 +7495,7 @@
       {required this.openAngleBracket})
       : super("TypeArgumentApplication", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "openAngleBracket": openAngleBracket,
       };
@@ -6910,6 +7509,7 @@
       {required this.token})
       : super("NewAsIdentifier", type);
 
+  @override
   Map<String, Object?> get deprecatedArguments => {
         "token": token,
       };
diff --git a/pkg/front_end/lib/src/fasta/util/textual_outline.dart b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
index d8785df..0bd4b47 100644
--- a/pkg/front_end/lib/src/fasta/util/textual_outline.dart
+++ b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
@@ -336,6 +336,7 @@
   _ProcedureEtcChunk(Token startToken, Token endToken)
       : super(startToken, endToken);
 
+  @override
   void _printOnWithoutHeaderAndMetadata(StringBuffer sb) {
     printTokenRange(startToken, endToken, sb,
         skipContentOnEndGroupUntilToToken: true);
@@ -393,6 +394,7 @@
       this.addMarkerForUnknownForTest, Token startToken, Token endToken)
       : super(startToken, endToken);
 
+  @override
   void _printOnWithoutHeaderAndMetadata(StringBuffer sb) {
     if (addMarkerForUnknownForTest) {
       sb.write("---- unknown chunk starts ----\n");
@@ -750,12 +752,14 @@
         new _TopLevelFieldsChunk(beginToken, endToken);
   }
 
+  @override
   void endFunctionTypeAlias(
       Token typedefKeyword, Token? equals, Token endToken) {
     elementStartToChunk[typedefKeyword] =
         new _FunctionTypeAliasChunk(typedefKeyword, endToken);
   }
 
+  @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
     elementStartToChunk[enumKeyword] =
         new _EnumChunk(enumKeyword, leftBrace.endGroup!);
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index b8b73a0..a95566c 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -185,23 +185,30 @@
 /// Result object of [generateKernel].
 class InternalCompilerResult implements CompilerResult {
   /// The generated summary bytes, if it was requested.
+  @override
   final List<int>? summary;
 
   /// The generated component, if it was requested.
+  @override
   final Component? component;
 
+  @override
   final Component? sdkComponent;
 
+  @override
   final List<Component> loadedComponents;
 
   /// Dependencies traversed by the compiler. Used only for generating
   /// dependency .GN files in the dart-sdk build system.
   /// Note this might be removed when we switch to compute dependencies without
   /// using the compiler itself.
+  @override
   final List<Uri> deps;
 
+  @override
   final ClassHierarchy? classHierarchy;
 
+  @override
   final CoreTypes? coreTypes;
 
   /// The [KernelTarget] used to generated the component.
diff --git a/pkg/front_end/lib/src/testing/id_testing_helper.dart b/pkg/front_end/lib/src/testing/id_testing_helper.dart
index 084e8a7..dead4a2 100644
--- a/pkg/front_end/lib/src/testing/id_testing_helper.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_helper.dart
@@ -55,7 +55,7 @@
   // TODO(johnniwinther): Tailor support to redefine selected platform
   // classes/members only.
   final bool compileSdk;
-  final TargetFlags targetFlags;
+  final TestTargetFlags targetFlags;
   final NnbdMode nnbdMode;
 
   const TestConfig(this.marker, this.name,
@@ -63,7 +63,7 @@
       this.allowedExperimentalFlags,
       this.librariesSpecificationUri,
       this.compileSdk: false,
-      this.targetFlags: const TargetFlags(),
+      this.targetFlags: const TestTargetFlags(),
       this.nnbdMode: NnbdMode.Weak});
 
   void customizeCompilerOptions(CompilerOptions options, TestData testData) {}
@@ -307,7 +307,8 @@
     if (!succinct) printDiagnosticMessage(message, print);
   };
   options.debugDump = printCode;
-  options.target = new NoneTarget(config.targetFlags);
+  options.target = new TestTargetWrapper(
+      new NoneTarget(config.targetFlags), config.targetFlags);
   options.explicitExperimentalFlags.addAll(config.explicitExperimentalFlags);
   options.allowedExperimentalFlagsForTesting = config.allowedExperimentalFlags;
   options.nnbdMode = config.nnbdMode;
diff --git a/pkg/front_end/lib/src/testing/id_testing_utils.dart b/pkg/front_end/lib/src/testing/id_testing_utils.dart
index 0067517..9aad4b2 100644
--- a/pkg/front_end/lib/src/testing/id_testing_utils.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart
@@ -330,33 +330,41 @@
     }
   }
 
+  @override
   void defaultConstant(Constant node) => throw new UnimplementedError(
       'Unexpected constant $node (${node.runtimeType})');
 
+  @override
   void visitNullConstant(NullConstant node) {
     sb.write('Null()');
   }
 
+  @override
   void visitBoolConstant(BoolConstant node) {
     sb.write('Bool(${node.value})');
   }
 
+  @override
   void visitIntConstant(IntConstant node) {
     sb.write('Int(${node.value})');
   }
 
+  @override
   void visitDoubleConstant(DoubleConstant node) {
     sb.write('Double(${node.value})');
   }
 
+  @override
   void visitStringConstant(StringConstant node) {
     sb.write('String(${node.value})');
   }
 
+  @override
   void visitSymbolConstant(SymbolConstant node) {
     sb.write('Symbol(${node.name})');
   }
 
+  @override
   void visitMapConstant(MapConstant node) {
     sb.write('Map<');
     typeToText.visit(node.keyType);
@@ -374,6 +382,7 @@
     sb.write(')');
   }
 
+  @override
   void visitListConstant(ListConstant node) {
     sb.write('List<');
     typeToText.visit(node.typeArgument);
@@ -382,6 +391,7 @@
     sb.write(')');
   }
 
+  @override
   void visitSetConstant(SetConstant node) {
     sb.write('Set<');
     typeToText.visit(node.typeArgument);
@@ -390,6 +400,7 @@
     sb.write(')');
   }
 
+  @override
   void visitInstanceConstant(InstanceConstant node) {
     sb.write('Instance(');
     sb.write(node.classNode.name);
@@ -413,6 +424,7 @@
     sb.write(')');
   }
 
+  @override
   void visitInstantiationConstant(InstantiationConstant node) {
     sb.write('Instantiation(');
     Constant tearOffConstant = node.tearOffConstant;
@@ -426,6 +438,7 @@
     sb.write('>)');
   }
 
+  @override
   void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
     sb.write('TypedefTearOff(');
     sb.write(getMemberName(node.tearOffConstant.target));
@@ -454,18 +467,21 @@
     sb.write('>)');
   }
 
+  @override
   void visitStaticTearOffConstant(StaticTearOffConstant node) {
     sb.write('Function(');
     sb.write(getMemberName(node.target));
     sb.write(')');
   }
 
+  @override
   void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
     sb.write('Constructor(');
     sb.write(getMemberName(node.target));
     sb.write(')');
   }
 
+  @override
   void visitRedirectingFactoryTearOffConstant(
       RedirectingFactoryTearOffConstant node) {
     sb.write('RedirectingFactory(');
@@ -473,12 +489,14 @@
     sb.write(')');
   }
 
+  @override
   void visitTypeLiteralConstant(TypeLiteralConstant node) {
     sb.write('TypeLiteral(');
     typeToText.visit(node.type);
     sb.write(')');
   }
 
+  @override
   void visitUnevaluatedConstant(UnevaluatedConstant node) {
     sb.write('Unevaluated()');
   }
@@ -509,21 +527,26 @@
     }
   }
 
+  @override
   void defaultDartType(DartType node) => throw new UnimplementedError(
       'Unexpected type $node (${node.runtimeType})');
 
+  @override
   void visitInvalidType(InvalidType node) {
     sb.write('<invalid>');
   }
 
+  @override
   void visitDynamicType(DynamicType node) {
     sb.write('dynamic');
   }
 
+  @override
   void visitVoidType(VoidType node) {
     sb.write('void');
   }
 
+  @override
   void visitNeverType(NeverType node) {
     sb.write('Never');
     if (node.nullability != Nullability.nonNullable) {
@@ -531,10 +554,12 @@
     }
   }
 
+  @override
   void visitNullType(NullType node) {
     sb.write('Null');
   }
 
+  @override
   void visitInterfaceType(InterfaceType node) {
     sb.write(node.classNode.name);
     if (node.typeArguments.isNotEmpty) {
@@ -547,6 +572,7 @@
     }
   }
 
+  @override
   void visitFutureOrType(FutureOrType node) {
     sb.write('FutureOr<');
     visit(node.typeArgument);
@@ -554,6 +580,7 @@
     sb.write(nullabilityToText(node.declaredNullability, typeRepresentation));
   }
 
+  @override
   void visitFunctionType(FunctionType node) {
     visit(node.returnType);
     sb.write(' Function');
@@ -610,6 +637,7 @@
     sb.write(nullabilityToText(node.nullability, typeRepresentation));
   }
 
+  @override
   void visitTypeParameterType(TypeParameterType node) {
     sb.write(node.parameter.name);
     sb.write(nullabilityToText(node.nullability, typeRepresentation));
@@ -619,6 +647,7 @@
     }
   }
 
+  @override
   void visitTypedefType(TypedefType node) {
     sb.write(node.typedefNode.name);
     if (node.typeArguments.isNotEmpty) {
@@ -629,6 +658,7 @@
     sb.write(nullabilityToText(node.nullability, typeRepresentation));
   }
 
+  @override
   void visitExtensionType(ExtensionType node) {
     sb.write(node.extension.name);
     if (node.typeArguments.isNotEmpty) {
diff --git a/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart b/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
index c5629b1..8608d6e 100644
--- a/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
+++ b/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
@@ -29,6 +29,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/comments_on_certain_arguments_tool.dart b/pkg/front_end/test/comments_on_certain_arguments_tool.dart
index 8d69722..ce02610 100644
--- a/pkg/front_end/test/comments_on_certain_arguments_tool.dart
+++ b/pkg/front_end/test/comments_on_certain_arguments_tool.dart
@@ -186,21 +186,25 @@
 }
 
 class InvocationVisitor extends RecursiveVisitor {
+  @override
   void visitProcedure(Procedure node) {
     if (node.isNoSuchMethodForwarder) return;
     super.visitProcedure(node);
   }
 
+  @override
   void visitSuperMethodInvocation(SuperMethodInvocation node) {
     super.visitSuperMethodInvocation(node);
     note(node.interfaceTargetReference.node, node.arguments, node);
   }
 
+  @override
   void visitStaticInvocation(StaticInvocation node) {
     super.visitStaticInvocation(node);
     note(node.targetReference.node, node.arguments, node);
   }
 
+  @override
   void visitConstructorInvocation(ConstructorInvocation node) {
     super.visitConstructorInvocation(node);
     note(node.targetReference.node, node.arguments, node);
@@ -337,6 +341,7 @@
     throw "Why did this happen?";
   }
 
+  @override
   String toString() {
     return "Edit[$editType @ $offset]";
   }
@@ -345,6 +350,7 @@
 class TestIncrementalCompiler extends IncrementalCompiler {
   TestIncrementalCompiler(CompilerContext context) : super(context);
 
+  @override
   IncrementalKernelTarget createIncrementalKernelTarget(
       api.FileSystem fileSystem,
       bool includeComments,
@@ -360,9 +366,11 @@
       DillTarget dillTarget, UriTranslator uriTranslator)
       : super(fileSystem, includeComments, dillTarget, uriTranslator);
 
+  @override
   SourceLoader createLoader() =>
       new TestSourceLoader(fileSystem, includeComments, this);
 
+  @override
   void runBuildTransformations() {
     // Don't do any transformations!
   }
@@ -373,6 +381,7 @@
       api.FileSystem fileSystem, bool includeComments, KernelTarget target)
       : super(fileSystem, includeComments, target);
 
+  @override
   Future<Token> tokenize(SourceLibraryBuilder library,
       {bool suppressLexicalErrors: false}) async {
     Token result = await super
diff --git a/pkg/front_end/test/compile_benchmark.dart b/pkg/front_end/test/compile_benchmark.dart
index da61b76..c731934 100644
--- a/pkg/front_end/test/compile_benchmark.dart
+++ b/pkg/front_end/test/compile_benchmark.dart
@@ -234,6 +234,7 @@
 
   IntPair(this.key, this.value);
 
+  @override
   String toString() {
     return "IntPair[$key: $value]";
   }
@@ -361,6 +362,7 @@
   RegisterCallTransformer(this.registerCallProcedure);
   List<Procedure> procedures = [];
 
+  @override
   visitLibrary(Library node) {
     if (node.importUri.scheme == "package" &&
         node.importUri.pathSegments.first == "front_end") {
@@ -368,6 +370,7 @@
     }
   }
 
+  @override
   visitProcedure(Procedure node) {
     if (node.function.body == null) return;
     int procedureNum = procedures.length;
@@ -391,6 +394,7 @@
 
   List<Procedure> procedures = [];
 
+  @override
   visitLibrary(Library node) {
     if (node.importUri.scheme == "package" &&
         node.importUri.pathSegments.first == "front_end") {
@@ -398,6 +402,7 @@
     }
   }
 
+  @override
   visitProcedure(Procedure node) {
     if (node.function.body == null) return;
     if (node.function.dartAsyncMarker != AsyncMarker.Sync) return;
diff --git a/pkg/front_end/test/constant_evaluator_benchmark.dart b/pkg/front_end/test/constant_evaluator_benchmark.dart
index 428f6d5..477c94c 100644
--- a/pkg/front_end/test/constant_evaluator_benchmark.dart
+++ b/pkg/front_end/test/constant_evaluator_benchmark.dart
@@ -235,6 +235,7 @@
 class HookInVmTarget extends VmTarget {
   HookInVmTarget(TargetFlags flags) : super(flags);
 
+  @override
   void performPreConstantEvaluationTransformations(
       Component component,
       CoreTypes coreTypes,
@@ -252,6 +253,7 @@
 class HookInDart2jsTarget extends Dart2jsTarget {
   HookInDart2jsTarget(String name, TargetFlags flags) : super(name, flags);
 
+  @override
   void performPreConstantEvaluationTransformations(
       Component component,
       CoreTypes coreTypes,
@@ -269,6 +271,7 @@
 class HookInDevCompilerTarget extends DevCompilerTarget {
   HookInDevCompilerTarget(TargetFlags flags) : super(flags);
 
+  @override
   void performPreConstantEvaluationTransformations(
       Component component,
       CoreTypes coreTypes,
@@ -286,6 +289,7 @@
 class HookInFlutterTarget extends FlutterTarget {
   HookInFlutterTarget(TargetFlags flags) : super(flags);
 
+  @override
   void performPreConstantEvaluationTransformations(
       Component component,
       CoreTypes coreTypes,
diff --git a/pkg/front_end/test/covariance_check/covariance_check_test.dart b/pkg/front_end/test/covariance_check/covariance_check_test.dart
index 622ebfa..440dab8 100644
--- a/pkg/front_end/test/covariance_check/covariance_check_test.dart
+++ b/pkg/front_end/test/covariance_check/covariance_check_test.dart
@@ -27,6 +27,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
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 72dd9f2..4615724 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -2068,6 +2068,7 @@
 class ParserErrorListener extends Listener {
   bool gotError = false;
   List<Message> messages = [];
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     gotError = true;
@@ -2150,6 +2151,7 @@
 
 class _FakeFileSystemEntity extends FileSystemEntity {
   final _FakeFileSystem fs;
+  @override
   final Uri uri;
   _FakeFileSystemEntity(this.fs, this.uri);
 
diff --git a/pkg/front_end/test/dartdoctest_suite.dart b/pkg/front_end/test/dartdoctest_suite.dart
index b8fde00..a6a2b8c 100644
--- a/pkg/front_end/test/dartdoctest_suite.dart
+++ b/pkg/front_end/test/dartdoctest_suite.dart
@@ -22,6 +22,7 @@
 
   Context(this.suiteName);
 
+  @override
   final List<Step> steps = const <Step>[
     const DartDocTestStep(),
   ];
@@ -33,6 +34,7 @@
     return result;
   }
 
+  @override
   Stream<DartDocTestTestDescription> list(Chain suite) async* {
     await for (TestDescription entry in super.list(suite)) {
       List<Test> tests = await dartDocTest.extractTestsFromUri(entry.uri);
@@ -45,7 +47,9 @@
 }
 
 class DartDocTestTestDescription extends TestDescription {
+  @override
   final String shortName;
+  @override
   final Uri uri;
   final List<Test> tests;
 
@@ -56,8 +60,10 @@
     DartDocTestTestDescription, Context> {
   const DartDocTestStep();
 
+  @override
   String get name => "DartDocTest";
 
+  @override
   Future<Result<DartDocTestTestDescription>> run(
       DartDocTestTestDescription description, Context context) async {
     List<TestResult> result = await context.dartDocTest
diff --git a/pkg/front_end/test/dijkstras_sssp_algorithm.dart b/pkg/front_end/test/dijkstras_sssp_algorithm.dart
index 0c93386..1c0a623 100644
--- a/pkg/front_end/test/dijkstras_sssp_algorithm.dart
+++ b/pkg/front_end/test/dijkstras_sssp_algorithm.dart
@@ -104,6 +104,7 @@
     }
   }
 
+  @override
   String toString() {
     return "GraphNode[$node]";
   }
diff --git a/pkg/front_end/test/explicit_creation_git_test.dart b/pkg/front_end/test/explicit_creation_git_test.dart
index 7402c6f..287b605 100644
--- a/pkg/front_end/test/explicit_creation_git_test.dart
+++ b/pkg/front_end/test/explicit_creation_git_test.dart
@@ -135,6 +135,7 @@
         library, hierarchy, coreTypes, typeInferenceEngine);
   }
 
+  @override
   BodyBuilder createBodyBuilderForOutlineExpression(
       SourceLibraryBuilder library,
       DeclarationBuilder declarationBuilder,
@@ -145,6 +146,7 @@
         library, declarationBuilder, member, scope, fileUri);
   }
 
+  @override
   BodyBuilder createBodyBuilderForField(
       FieldBuilder field, TypeInferrer typeInferrer) {
     return new BodyBuilderTest.forField(field, typeInferrer);
diff --git a/pkg/front_end/test/extensions/extensions_test.dart b/pkg/front_end/test/extensions/extensions_test.dart
index 5ccb1e8..44fb012 100644
--- a/pkg/front_end/test/extensions/extensions_test.dart
+++ b/pkg/front_end/test/extensions/extensions_test.dart
@@ -59,6 +59,7 @@
     new ExtensionsDataExtractor(compilerResult, actualMap).computeForClass(cls);
   }
 
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/fasta/bootstrap_test.dart b/pkg/front_end/test/fasta/bootstrap_test.dart
index bc75787..44651f3 100644
--- a/pkg/front_end/test/fasta/bootstrap_test.dart
+++ b/pkg/front_end/test/fasta/bootstrap_test.dart
@@ -106,5 +106,6 @@
 
   ComparisonFailed(this.a, this.b);
 
+  @override
   toString() => "Error: $a is different from $b";
 }
diff --git a/pkg/front_end/test/fasta/expression_suite.dart b/pkg/front_end/test/fasta/expression_suite.dart
index 4178a6f..90eae87 100644
--- a/pkg/front_end/test/fasta/expression_suite.dart
+++ b/pkg/front_end/test/fasta/expression_suite.dart
@@ -60,6 +60,7 @@
   final CompilerContext compilerContext;
   final List<DiagnosticMessage> errors;
 
+  @override
   final List<Step> steps;
 
   Context(this.compilerContext, this.errors, bool updateExpectations)
@@ -154,6 +155,7 @@
       this.className,
       this.expression);
 
+  @override
   String toString() {
     return "TestCase("
         "$entryPoint, "
@@ -190,8 +192,10 @@
   const MatchProcedureExpectations(this.suffix,
       {this.updateExpectations: false});
 
+  @override
   String get name => "match expectations";
 
+  @override
   Future<Result<Null>> run(List<TestCase> tests, Context context) async {
     String actual = "";
     for (var test in tests) {
@@ -239,8 +243,10 @@
 class ReadTest extends Step<TestDescription, List<TestCase>, Context> {
   const ReadTest();
 
+  @override
   String get name => "read test";
 
+  @override
   Future<Result<List<TestCase>>> run(
       TestDescription description, Context context) async {
     context.reset();
@@ -301,6 +307,7 @@
 class CompileExpression extends Step<List<TestCase>, List<TestCase>, Context> {
   const CompileExpression();
 
+  @override
   String get name => "compile expression";
 
   // Compile [test.expression], update [test.errors] with results.
@@ -335,6 +342,7 @@
     }
   }
 
+  @override
   Future<Result<List<TestCase>>> run(
       List<TestCase> tests, Context context) async {
     for (var test in tests) {
diff --git a/pkg/front_end/test/fasta/incremental_dartino_suite.dart b/pkg/front_end/test/fasta/incremental_dartino_suite.dart
index 0fc4330..35572e4 100644
--- a/pkg/front_end/test/fasta/incremental_dartino_suite.dart
+++ b/pkg/front_end/test/fasta/incremental_dartino_suite.dart
@@ -60,6 +60,7 @@
   final CompilerContext compilerContext;
   final List<DiagnosticMessage> errors;
 
+  @override
   final List<Step> steps = const <Step>[
     const ReadTest(),
     const RunCompilations(),
@@ -92,8 +93,10 @@
 class ReadTest extends Step<TestDescription, TestCase, Context> {
   const ReadTest();
 
+  @override
   String get name => "read test";
 
+  @override
   Future<Result<TestCase>> run(
       TestDescription description, Context context) async {
     context.reset();
@@ -125,8 +128,10 @@
 class RunCompilations extends Step<TestCase, TestCase, Context> {
   const RunCompilations();
 
+  @override
   String get name => "run compilations";
 
+  @override
   Future<Result<TestCase>> run(TestCase test, Context context) async {
     for (int edits = 0;; edits++) {
       bool foundSources = false;
@@ -177,6 +182,7 @@
 
   TestCase(this.description, this.sources, this.expectations);
 
+  @override
   String toString() {
     return "TestCase(${json.convert(sources)}, ${json.convert(expectations)})";
   }
diff --git a/pkg/front_end/test/fasta/incremental_expectations.dart b/pkg/front_end/test/fasta/incremental_expectations.dart
index 9839f4d..943b405 100644
--- a/pkg/front_end/test/fasta/incremental_expectations.dart
+++ b/pkg/front_end/test/fasta/incremental_expectations.dart
@@ -57,6 +57,7 @@
     return result;
   }
 
+  @override
   String toString() {
     return """
 IncrementalExpectation(
diff --git a/pkg/front_end/test/fasta/messages_suite.dart b/pkg/front_end/test/fasta/messages_suite.dart
index 7530042..0fa12e2 100644
--- a/pkg/front_end/test/fasta/messages_suite.dart
+++ b/pkg/front_end/test/fasta/messages_suite.dart
@@ -93,6 +93,7 @@
 }
 
 class MessageTestSuite extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const Validate(),
     const Compile(),
@@ -145,6 +146,7 @@
   /// problem that a message can have. This problem will then be reported as a
   /// failure by the [Validate] step that can be suppressed via the status
   /// file.
+  @override
   Stream<MessageTestDescription> list(Chain suite) async* {
     Uri uri = suite.uri.resolve("messages.yaml");
     File file = new File.fromUri(uri);
@@ -623,6 +625,7 @@
       : expression = node.value,
         super(name, code);
 
+  @override
   Map<String, Script> get scripts {
     return {
       mainFilename: new Script.fromSource("""
@@ -733,8 +736,10 @@
 class Validate extends Step<MessageTestDescription, Example, MessageTestSuite> {
   const Validate();
 
+  @override
   String get name => "validate";
 
+  @override
   Future<Result<Example>> run(
       MessageTestDescription description, MessageTestSuite suite) async {
     if (description.problem != null) {
@@ -748,8 +753,10 @@
 class Compile extends Step<Example, Null, MessageTestSuite> {
   const Compile();
 
+  @override
   String get name => "compile";
 
+  @override
   Future<Result<Null>> run(Example example, MessageTestSuite suite) async {
     if (example == null) return pass(null);
     String dir = "${example.expectedCode}/${example.name}";
diff --git a/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart b/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
index 318f02e81..52120bf 100644
--- a/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
@@ -1100,6 +1100,7 @@
     calls.add('handleUnaryPrefixAssignmentExpression $token');
   }
 
+  @override
   noSuchMethod(Invocation invocation) {
     throw '${invocation.memberName} should not be called.';
   }
diff --git a/pkg/front_end/test/fasta/parser/parser_suite.dart b/pkg/front_end/test/fasta/parser/parser_suite.dart
index 772922f..07a5487 100644
--- a/pkg/front_end/test/fasta/parser/parser_suite.dart
+++ b/pkg/front_end/test/fasta/parser/parser_suite.dart
@@ -17,6 +17,7 @@
 }
 
 class ScannerContext extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const Read(),
     const Scan(),
@@ -27,8 +28,10 @@
 class Parse extends Step<ScannedFile, Null, ChainContext> {
   const Parse();
 
+  @override
   String get name => "parse";
 
+  @override
   Future<Result<Null>> run(ScannedFile file, ChainContext context) async {
     try {
       List<ParserError> errors = parse(file.result.tokens,
diff --git a/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart b/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
index 713d142..2287d8e 100644
--- a/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
+++ b/pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart
@@ -220,8 +220,8 @@
     setupDone(a);
 
     TokenStreamRewriter rewriter = getTokenStreamRewriter();
-    ReplacementToken replacement = rewriter
-        .replaceNextTokensWithSyntheticToken(a, 3, TokenType.AMPERSAND);
+    ReplacementToken replacement =
+        rewriter.replaceNextTokensWithSyntheticToken(a, 3, TokenType.AMPERSAND);
     expect(b.offset, same(replacement.offset));
     expect(b.precedingComments, same(replacement.precedingComments));
     expect(replacement.replacedToken, same(b));
@@ -246,8 +246,8 @@
     setupDone(a);
 
     TokenStreamRewriter rewriter = getTokenStreamRewriter();
-    ReplacementToken replacement = rewriter
-        .replaceNextTokensWithSyntheticToken(a, 2, TokenType.AMPERSAND);
+    ReplacementToken replacement =
+        rewriter.replaceNextTokensWithSyntheticToken(a, 2, TokenType.AMPERSAND);
     expect(b.offset, same(replacement.offset));
     expect(b.precedingComments, same(replacement.precedingComments));
     expect(replacement.replacedToken, same(b));
@@ -354,6 +354,7 @@
   @override
   bool get setPrevious => false;
 
+  @override
   TokenStreamRewriter getTokenStreamRewriter() => new TokenStreamRewriterImpl();
 }
 
@@ -368,6 +369,7 @@
   @override
   bool get setPrevious => true;
 
+  @override
   TokenStreamRewriter getTokenStreamRewriter() => new TokenStreamRewriterImpl();
 }
 
@@ -378,11 +380,13 @@
   @override
   bool get setPrevious => true;
 
+  @override
   TokenStreamRewriter getTokenStreamRewriter() =>
       new UndoableTokenStreamRewriter();
 
   List<CachedTokenSetup> setup;
 
+  @override
   void setupDone(Token first) {
     setup = [];
     Token token = first;
@@ -392,6 +396,7 @@
     }
   }
 
+  @override
   void normalTestDone(TokenStreamRewriter rewriter, Token first) {
     UndoableTokenStreamRewriter undoableTokenStreamRewriter = rewriter;
     undoableTokenStreamRewriter.undo();
@@ -424,6 +429,7 @@
         next = token.next,
         precedingComments = token.precedingComments;
 
+  @override
   bool operator ==(Object other) {
     if (other is! CachedTokenSetup) return false;
     CachedTokenSetup o = other;
@@ -433,6 +439,7 @@
         precedingComments == o.precedingComments;
   }
 
+  @override
   String toString() {
     return "CachedTokenSetup["
         "token = $token, "
diff --git a/pkg/front_end/test/fasta/parser/type_info_test.dart b/pkg/front_end/test/fasta/parser/type_info_test.dart
index 0894483..a3fc5f0 100644
--- a/pkg/front_end/test/fasta/parser/type_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/type_info_test.dart
@@ -3018,6 +3018,7 @@
     calls.add('handleVoidKeywordWithTypeArguments $token');
   }
 
+  @override
   noSuchMethod(Invocation invocation) {
     throw '${invocation.memberName} should not be called.';
   }
diff --git a/pkg/front_end/test/fasta/scanner/scanner_suite.dart b/pkg/front_end/test/fasta/scanner/scanner_suite.dart
index 7039a40..f3b49ed 100644
--- a/pkg/front_end/test/fasta/scanner/scanner_suite.dart
+++ b/pkg/front_end/test/fasta/scanner/scanner_suite.dart
@@ -14,6 +14,7 @@
 }
 
 class ScannerContext extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const Read(),
     const Scan(),
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index f849bf2..1ab048a 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -123,14 +123,14 @@
 import 'package:kernel/target/targets.dart'
     show
         ConstantsBackend,
-        ConstructorTearOffLowering,
         DiagnosticReporter,
-        LateLowering,
-        NumberSemantics,
         NoneConstantsBackend,
         NoneTarget,
+        NumberSemantics,
         Target,
-        TargetFlags;
+        TestTargetFlags,
+        TestTargetMixin,
+        TestTargetWrapper;
 
 import 'package:kernel/type_environment.dart'
     show StaticTypeContext, TypeEnvironment;
@@ -261,11 +261,11 @@
 /// test folders.
 class FolderOptions {
   final Map<ExperimentalFlag, bool> _explicitExperimentalFlags;
-  final int forceLateLowerings;
-  final bool forceLateLoweringSentinel;
-  final bool forceStaticFieldLowering;
-  final bool forceNoExplicitGetterCalls;
-  final int forceConstructorTearOffLowering;
+  final int? forceLateLowerings;
+  final bool? forceLateLoweringSentinel;
+  final bool? forceStaticFieldLowering;
+  final bool? forceNoExplicitGetterCalls;
+  final int? forceConstructorTearOffLowering;
   final bool nnbdAgnosticMode;
   final Map<String, String>? defines;
   final bool noVerify;
@@ -273,11 +273,11 @@
   final String? overwriteCurrentSdkVersion;
 
   FolderOptions(this._explicitExperimentalFlags,
-      {this.forceLateLowerings: LateLowering.none,
-      this.forceLateLoweringSentinel: false,
-      this.forceStaticFieldLowering: false,
-      this.forceNoExplicitGetterCalls: false,
-      this.forceConstructorTearOffLowering: ConstructorTearOffLowering.none,
+      {this.forceLateLowerings,
+      this.forceLateLoweringSentinel,
+      this.forceStaticFieldLowering,
+      this.forceNoExplicitGetterCalls,
+      this.forceConstructorTearOffLowering,
       this.nnbdAgnosticMode: false,
       this.defines: const {},
       this.noVerify: false,
@@ -285,15 +285,7 @@
       // can be null
       this.overwriteCurrentSdkVersion})
       // ignore: unnecessary_null_comparison
-      : assert(forceLateLowerings != null),
-        // ignore: unnecessary_null_comparison
-        assert(forceLateLoweringSentinel != null),
-        // ignore: unnecessary_null_comparison
-        assert(forceStaticFieldLowering != null),
-        // ignore: unnecessary_null_comparison
-        assert(forceNoExplicitGetterCalls != null),
-        // ignore: unnecessary_null_comparison
-        assert(nnbdAgnosticMode != null),
+      : assert(nnbdAgnosticMode != null),
         assert(
             // no this doesn't make any sense but left to underline
             // that this is allowed to be null!
@@ -336,6 +328,7 @@
 
 class FastaContext extends ChainContext with MatchContext {
   final Uri baseUri;
+  @override
   final List<Step> steps;
   final Uri vm;
   final bool onlyCrashes;
@@ -448,11 +441,11 @@
   FolderOptions _computeFolderOptions(Directory directory) {
     FolderOptions? folderOptions = _folderOptions[directory.uri];
     if (folderOptions == null) {
-      int forceLateLowering = LateLowering.none;
-      bool forceLateLoweringSentinel = false;
-      bool forceStaticFieldLowering = false;
-      bool forceNoExplicitGetterCalls = false;
-      int forceConstructorTearOffLowering = ConstructorTearOffLowering.none;
+      int? forceLateLowering;
+      bool? forceLateLoweringSentinel;
+      bool? forceStaticFieldLowering;
+      bool? forceNoExplicitGetterCalls;
+      int? forceConstructorTearOffLowering;
       bool nnbdAgnosticMode = false;
       bool noVerify = false;
       Map<String, String>? defines = {};
@@ -815,11 +808,14 @@
 class Run extends Step<ComponentResult, ComponentResult, FastaContext> {
   const Run();
 
+  @override
   String get name => "run";
 
   /// WARNING: Every subsequent step in this test will run async as well!
+  @override
   bool get isAsync => true;
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     FolderOptions folderOptions =
@@ -876,8 +872,10 @@
     extends Step<ComponentResult, ComponentResult, FastaContext> {
   const StressConstantEvaluatorStep();
 
+  @override
   String get name => "stress constant evaluator";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     KernelTarget target = result.sourceTarget;
@@ -939,6 +937,7 @@
 
   Library? currentLibrary;
 
+  @override
   Library visitLibrary(Library node) {
     currentLibrary = node;
     node.visitChildren(this);
@@ -948,6 +947,7 @@
 
   Member? currentMember;
 
+  @override
   Node defaultMember(Member node) {
     Member? prevCurrentMember = currentMember;
     currentMember = node;
@@ -956,6 +956,7 @@
     return node;
   }
 
+  @override
   Node defaultExpression(Expression node) {
     if (node is BasicLiteral) return node;
     if (node is InvalidExpression) return node;
@@ -1132,10 +1133,12 @@
     extends Step<ComponentResult, ComponentResult, FastaContext> {
   const FuzzCompiles();
 
+  @override
   String get name {
     return "semifuzz";
   }
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     bool? originalFlag = context.explicitExperimentalFlags[
@@ -1405,6 +1408,7 @@
 
   FuzzAstVisitorSorterChunk(this.data, this.metadataAndComments, this.layer);
 
+  @override
   String toString() {
     return "FuzzAstVisitorSorterChunk[${getSource()}]";
   }
@@ -1643,6 +1647,7 @@
 
 class _FakeFileSystemEntity extends FileSystemEntity {
   final _FakeFileSystem fs;
+  @override
   final Uri uri;
   _FakeFileSystemEntity(this.fs, this.uri);
 
@@ -1692,7 +1697,7 @@
 }
 
 Target createTarget(FolderOptions folderOptions, FastaContext context) {
-  TargetFlags targetFlags = new TargetFlags(
+  TestTargetFlags targetFlags = new TestTargetFlags(
     forceLateLoweringsForTesting: folderOptions.forceLateLowerings,
     forceLateLoweringSentinelForTesting:
         folderOptions.forceLateLoweringSentinel,
@@ -1709,7 +1714,7 @@
       target = new TestVmTarget(targetFlags);
       break;
     case "none":
-      target = new NoneTarget(targetFlags);
+      target = new TestTargetWrapper(new NoneTarget(targetFlags), targetFlags);
       break;
     case "dart2js":
       target = new TestDart2jsTarget('dart2js', targetFlags);
@@ -1752,12 +1757,14 @@
 
   final bool updateComments;
 
+  @override
   String get name {
     return fullCompile ? "compile" : "outline";
   }
 
   bool get isCompiler => fullCompile;
 
+  @override
   Future<Result<ComponentResult>> run(
       TestDescription description, FastaContext context) async {
     CompilationSetup compilationSetup =
@@ -1898,8 +1905,10 @@
 class Transform extends Step<ComponentResult, ComponentResult, FastaContext> {
   const Transform();
 
+  @override
   String get name => "transform component";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     return await CompilerContext.runWithOptions(result.options, (_) async {
@@ -1947,8 +1956,10 @@
 
   const Verify(this.fullCompile);
 
+  @override
   String get name => "verify";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     FolderOptions folderOptions =
@@ -2047,16 +2058,20 @@
       component;
 }
 
-class TestVmTarget extends VmTarget with TestTarget {
-  TestVmTarget(TargetFlags flags) : super(flags);
+class TestVmTarget extends VmTarget with TestTarget, TestTargetMixin {
+  final TestTargetFlags flags;
+
+  TestVmTarget(this.flags) : super(flags);
 }
 
 class EnsureNoErrors
     extends Step<ComponentResult, ComponentResult, FastaContext> {
   const EnsureNoErrors();
 
+  @override
   String get name => "check errors";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     List<Iterable<String>> errors = result.compilationSetup.errors;
@@ -2073,8 +2088,10 @@
     extends Step<ComponentResult, ComponentResult, FastaContext> {
   const MatchHierarchy();
 
+  @override
   String get name => "check hierarchy";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, FastaContext context) async {
     Component component = result.component;
@@ -2118,10 +2135,15 @@
   NumberSemantics get numberSemantics => NumberSemantics.js;
 }
 
-class TestDart2jsTarget extends Dart2jsTarget with TestTarget {
-  TestDart2jsTarget(String name, TargetFlags flags) : super(name, flags);
+class TestDart2jsTarget extends Dart2jsTarget with TestTarget, TestTargetMixin {
+  final TestTargetFlags flags;
+
+  TestDart2jsTarget(String name, this.flags) : super(name, flags);
 }
 
-class TestDevCompilerTarget extends DevCompilerTarget with TestTarget {
-  TestDevCompilerTarget(TargetFlags flags) : super(flags);
+class TestDevCompilerTarget extends DevCompilerTarget
+    with TestTarget, TestTargetMixin {
+  final TestTargetFlags flags;
+
+  TestDevCompilerTarget(this.flags) : super(flags);
 }
diff --git a/pkg/front_end/test/fasta/textual_outline_suite.dart b/pkg/front_end/test/fasta/textual_outline_suite.dart
index 0a88cd1..8cdfe57 100644
--- a/pkg/front_end/test/fasta/textual_outline_suite.dart
+++ b/pkg/front_end/test/fasta/textual_outline_suite.dart
@@ -56,6 +56,7 @@
     runMe(arguments, createContext, configurationPath: "../../testing.json");
 
 class Context extends ChainContext with MatchContext {
+  @override
   final bool updateExpectations;
 
   @override
@@ -66,10 +67,12 @@
 
   Context(this.updateExpectations);
 
+  @override
   final List<Step> steps = const <Step>[
     const TextualOutline(),
   ];
 
+  @override
   final ExpectationSet expectationSet =
       new ExpectationSet.fromJsonList(EXPECTATIONS);
 }
@@ -77,8 +80,10 @@
 class TextualOutline extends Step<TestDescription, TestDescription, Context> {
   const TextualOutline();
 
+  @override
   String get name => "TextualOutline";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) async {
     List<int> bytes = new File.fromUri(description.uri).readAsBytesSync();
diff --git a/pkg/front_end/test/fasta/types/fasta_types_test.dart b/pkg/front_end/test/fasta/types/fasta_types_test.dart
index 25778ab..6e86bf6 100644
--- a/pkg/front_end/test/fasta/types/fasta_types_test.dart
+++ b/pkg/front_end/test/fasta/types/fasta_types_test.dart
@@ -73,15 +73,18 @@
 
   FastaTypesTest(this.hierarchy, this.environment);
 
+  @override
   DartType toType(String text, TypeParserEnvironment environment) {
     return environment.parseType(text);
   }
 
+  @override
   IsSubtypeOf isSubtypeImpl(DartType subtype, DartType supertype) {
     return hierarchy.types
         .performNullabilityAwareSubtypeCheck(subtype, supertype);
   }
 
+  @override
   TypeParserEnvironment extend(String typeParameters) {
     return environment.extendWithTypeParameters(typeParameters);
   }
diff --git a/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart b/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
index e9d5c00..a830713 100644
--- a/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
+++ b/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
@@ -135,15 +135,18 @@
   @override
   bool get skipFutureOrPromotion => true;
 
+  @override
   DartType toType(String text, TypeParserEnvironment environment) {
     return environment.parseType(text);
   }
 
+  @override
   IsSubtypeOf isSubtypeImpl(DartType subtype, DartType supertype) {
     return new TypeEnvironment(coreTypes, hierarchy)
         .performNullabilityAwareSubtypeCheck(subtype, supertype);
   }
 
+  @override
   TypeParserEnvironment extend(String typeParameters) {
     return environment.extendWithTypeParameters(typeParameters);
   }
diff --git a/pkg/front_end/test/fasta/types/subtypes_benchmark.dart b/pkg/front_end/test/fasta/types/subtypes_benchmark.dart
index ef6dfb0..99087fd 100644
--- a/pkg/front_end/test/fasta/types/subtypes_benchmark.dart
+++ b/pkg/front_end/test/fasta/types/subtypes_benchmark.dart
@@ -55,6 +55,7 @@
 
   SubtypeCheck(this.s, this.t, this.isSubtype);
 
+  @override
   String toString() {
     return (new StringBuffer()
           ..write(s)
diff --git a/pkg/front_end/test/id_testing/id_testing_test.dart b/pkg/front_end/test/id_testing/id_testing_test.dart
index 590515a..04049e1 100644
--- a/pkg/front_end/test/id_testing/id_testing_test.dart
+++ b/pkg/front_end/test/id_testing/id_testing_test.dart
@@ -62,6 +62,7 @@
     new IdTestingDataExtractor(compilerResult, actualMap).computeForClass(cls);
   }
 
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -75,6 +76,7 @@
   @override
   bool get supportsErrors => true;
 
+  @override
   String computeErrorData(TestConfig config, InternalCompilerResult compiler,
       Id id, List<FormattedMessage> errors) {
     return errorsToText(errors);
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 c74e39b..6b8c228 100644
--- a/pkg/front_end/test/id_tests/assigned_variables_test.dart
+++ b/pkg/front_end/test/id_tests/assigned_variables_test.dart
@@ -41,6 +41,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/constant_test.dart b/pkg/front_end/test/id_tests/constant_test.dart
index d01fd1e..07d9ed9 100644
--- a/pkg/front_end/test/id_tests/constant_test.dart
+++ b/pkg/front_end/test/id_tests/constant_test.dart
@@ -60,6 +60,7 @@
   bool get supportsErrors => true;
 
   /// Returns data corresponding to [error].
+  @override
   String computeErrorData(TestConfig config, InternalCompilerResult compiler,
       Id id, List<FormattedMessage> errors) {
     return errorsToText(errors);
diff --git a/pkg/front_end/test/id_tests/definite_assignment_test.dart b/pkg/front_end/test/id_tests/definite_assignment_test.dart
index a5e19c3..11ad085 100644
--- a/pkg/front_end/test/id_tests/definite_assignment_test.dart
+++ b/pkg/front_end/test/id_tests/definite_assignment_test.dart
@@ -35,6 +35,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/definite_unassignment_test.dart b/pkg/front_end/test/id_tests/definite_unassignment_test.dart
index 23291f8..1f0520c 100644
--- a/pkg/front_end/test/id_tests/definite_unassignment_test.dart
+++ b/pkg/front_end/test/id_tests/definite_unassignment_test.dart
@@ -35,6 +35,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart b/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
index 58473d5..f5ad80ad 100644
--- a/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
@@ -40,6 +40,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/inferred_variable_types_test.dart b/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
index ab812ed..f5cbdfb 100644
--- a/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
+++ b/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
@@ -40,6 +40,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/inheritance_test.dart b/pkg/front_end/test/id_tests/inheritance_test.dart
index 261efa6..29df835 100644
--- a/pkg/front_end/test/id_tests/inheritance_test.dart
+++ b/pkg/front_end/test/id_tests/inheritance_test.dart
@@ -47,6 +47,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/nullability_test.dart b/pkg/front_end/test/id_tests/nullability_test.dart
index c485ef9..222eb29 100644
--- a/pkg/front_end/test/id_tests/nullability_test.dart
+++ b/pkg/front_end/test/id_tests/nullability_test.dart
@@ -30,6 +30,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/reachability_test.dart b/pkg/front_end/test/id_tests/reachability_test.dart
index cf37a57..7e0e1e8 100644
--- a/pkg/front_end/test/id_tests/reachability_test.dart
+++ b/pkg/front_end/test/id_tests/reachability_test.dart
@@ -38,6 +38,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/type_promotion_test.dart b/pkg/front_end/test/id_tests/type_promotion_test.dart
index 1ac5fb3..1f37b47 100644
--- a/pkg/front_end/test/id_tests/type_promotion_test.dart
+++ b/pkg/front_end/test/id_tests/type_promotion_test.dart
@@ -35,6 +35,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/id_tests/why_not_promoted_test.dart b/pkg/front_end/test/id_tests/why_not_promoted_test.dart
index d339adc..0303df9 100644
--- a/pkg/front_end/test/id_tests/why_not_promoted_test.dart
+++ b/pkg/front_end/test/id_tests/why_not_promoted_test.dart
@@ -43,6 +43,7 @@
   /// Function that computes a data mapping for [member].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeMemberData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/incremental_bulk_compiler_full.dart b/pkg/front_end/test/incremental_bulk_compiler_full.dart
index b067117..64ecbaa 100644
--- a/pkg/front_end/test/incremental_bulk_compiler_full.dart
+++ b/pkg/front_end/test/incremental_bulk_compiler_full.dart
@@ -37,6 +37,7 @@
 }
 
 class Context extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const RunTest(),
   ];
@@ -67,8 +68,10 @@
 class RunTest extends Step<TestDescription, TestDescription, Context> {
   const RunTest();
 
+  @override
   String get name => "run test";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) async {
     Uri uri = description.uri;
diff --git a/pkg/front_end/test/incremental_compiler_leak_test.dart b/pkg/front_end/test/incremental_compiler_leak_test.dart
index 922866f..11c65f7 100644
--- a/pkg/front_end/test/incremental_compiler_leak_test.dart
+++ b/pkg/front_end/test/incremental_compiler_leak_test.dart
@@ -167,6 +167,7 @@
   }
 
   Completer<String> cProcessExited = new Completer();
+  @override
   void processExited(int exitCode) {
     cProcessExited.complete("Exit");
   }
diff --git a/pkg/front_end/test/incremental_flutter_tester.dart b/pkg/front_end/test/incremental_flutter_tester.dart
index d0dec4c..27ca233 100644
--- a/pkg/front_end/test/incremental_flutter_tester.dart
+++ b/pkg/front_end/test/incremental_flutter_tester.dart
@@ -298,6 +298,7 @@
             annotator: annotator,
             metadata: metadata);
 
+  @override
   PrinterPrime createInner(ImportTable importTable,
       Map<String, MetadataRepository<Object>> metadata) {
     return new PrinterPrime(sink,
@@ -309,6 +310,7 @@
         showMetadata: showMetadata);
   }
 
+  @override
   void writeInterfaceTarget(Name name, Reference target) {
     // Skipped!
   }
diff --git a/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart b/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
index 4cbd8e7..3f2d28b 100644
--- a/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
+++ b/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
@@ -305,6 +305,7 @@
       [Uri initializeFromDillUri])
       : super(context, initializeFromDillUri);
 
+  @override
   void recordTemporaryFileForTesting(Uri uri) {
     File f = new File.fromUri(uri);
     if (f.existsSync()) f.deleteSync();
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index 96dc4f3..377d68e 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -59,7 +59,13 @@
     show ClassHierarchy, ClosedWorldClassHierarchy, ForTestingClassInfo;
 
 import 'package:kernel/target/targets.dart'
-    show NoneTarget, LateLowering, Target, TargetFlags;
+    show
+        LateLowering,
+        NoneTarget,
+        Target,
+        TargetFlags,
+        TestTargetFlags,
+        TestTargetWrapper;
 
 import 'package:kernel/text/ast_to_text.dart'
     show NameSystem, Printer, componentToString;
@@ -128,6 +134,7 @@
 }
 
 class Context extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const ReadTest(),
     const RunCompilations(),
@@ -161,8 +168,10 @@
 class ReadTest extends Step<TestDescription, TestData, Context> {
   const ReadTest();
 
+  @override
   String get name => "read test";
 
+  @override
   Future<Result<TestData>> run(
       TestDescription description, Context context) async {
     Uri uri = description.uri;
@@ -179,8 +188,10 @@
 class RunCompilations extends Step<TestData, TestData, Context> {
   const RunCompilations();
 
+  @override
   String get name => "run compilations";
 
+  @override
   Future<Result<TestData>> run(TestData data, Context context) async {
     Result<TestData>? result;
     YamlMap map = data.map;
@@ -387,9 +398,9 @@
       NnbdMode nnbdMode) async {
     final Uri sdkRoot = computePlatformBinariesLocation(forceBuildDir: true);
 
-    TargetFlags targetFlags = new TargetFlags(
+    TestTargetFlags targetFlags = new TestTargetFlags(
         forceLateLoweringsForTesting:
-            forceLateLoweringForTesting ? LateLowering.all : LateLowering.none,
+            forceLateLoweringForTesting ? LateLowering.all : null,
         trackWidgetCreation: trackWidgetCreation);
     Target target = new VmTarget(targetFlags);
     if (targetName != null) {
@@ -405,6 +416,7 @@
         throw "Unknown target name '$targetName'";
       }
     }
+    target = new TestTargetWrapper(target, targetFlags);
 
     String sdkSummary = computePlatformDillName(
         target,
@@ -1933,6 +1945,7 @@
     return result;
   }
 
+  @override
   void recordTemporaryFileForTesting(Uri uri) {
     File f = new File.fromUri(uri);
     if (f.existsSync()) f.deleteSync();
diff --git a/pkg/front_end/test/incremental_utils.dart b/pkg/front_end/test/incremental_utils.dart
index b226780..38f97ad 100644
--- a/pkg/front_end/test/incremental_utils.dart
+++ b/pkg/front_end/test/incremental_utils.dart
@@ -109,6 +109,7 @@
 
 class UriFinder extends RecursiveVisitor {
   Set<Uri> seenUris = new Set<Uri>();
+  @override
   defaultNode(Node node) {
     super.defaultNode(node);
     if (node is FileUriNode) {
diff --git a/pkg/front_end/test/language_versioning/language_versioning_test.dart b/pkg/front_end/test/language_versioning/language_versioning_test.dart
index 72dc28e..e8efa59 100644
--- a/pkg/front_end/test/language_versioning/language_versioning_test.dart
+++ b/pkg/front_end/test/language_versioning/language_versioning_test.dart
@@ -83,6 +83,7 @@
 class LanguageVersioningDataComputer extends DataComputer<Features> {
   const LanguageVersioningDataComputer();
 
+  @override
   Future<void> inspectComponent(Component component) async {
     for (Library library in component.libraries) {
       if (library.importUri.scheme == "dart") continue;
@@ -103,6 +104,7 @@
     }
   }
 
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -116,6 +118,7 @@
   @override
   bool get supportsErrors => true;
 
+  @override
   Features computeErrorData(TestConfig config, InternalCompilerResult compiler,
       Id id, List<FormattedMessage> errors) {
     Features features = new Features();
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index dd393f6..d1c67db 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -47,7 +47,9 @@
 }
 
 class LintTestDescription extends TestDescription {
+  @override
   final String shortName;
+  @override
   final Uri uri;
   final LintTestCache cache;
   final LintListener listener;
@@ -81,6 +83,7 @@
   final bool onlyInGit;
   Context({this.onlyInGit});
 
+  @override
   final List<Step> steps = const <Step>[
     const LintStep(),
   ];
@@ -92,6 +95,7 @@
     return result;
   }
 
+  @override
   Stream<LintTestDescription> list(Chain suite) async* {
     Set<Uri> gitFiles;
     if (onlyInGit) {
@@ -148,8 +152,10 @@
 class LintStep extends Step<LintTestDescription, LintTestDescription, Context> {
   const LintStep();
 
+  @override
   String get name => "lint";
 
+  @override
   Future<Result<LintTestDescription>> run(
       LintTestDescription description, Context context) async {
     if (description.cache.rawBytes == null) {
@@ -201,6 +207,7 @@
 class LintListener extends Listener {
   List<String> problems = <String>[];
   LintTestDescription description;
+  @override
   Uri uri;
 
   onProblem(int offset, int squigglyLength, String message) {
@@ -235,6 +242,7 @@
     _latestTypes.add(new LatestType(functionToken, true));
   }
 
+  @override
   void endTopLevelFields(
       Token externalToken,
       Token staticToken,
@@ -250,6 +258,7 @@
     _latestTypes.removeLast();
   }
 
+  @override
   void endClassFields(
       Token abstractToken,
       Token externalToken,
@@ -267,6 +276,7 @@
     _latestTypes.removeLast();
   }
 
+  @override
   void endFormalParameter(
       Token thisKeyword,
       Token periodAfterThis,
@@ -289,6 +299,7 @@
 class ImportsTwiceLintListener extends LintListener {
   Set<Uri> seenImports = new Set<Uri>();
 
+  @override
   void endImport(Token importKeyword, Token semicolon) {
     Token importUriToken = importKeyword.next;
     String importUri = importUriToken.lexeme;
@@ -311,6 +322,7 @@
 }
 
 class ExportsLintListener extends LintListener {
+  @override
   void endExport(Token exportKeyword, Token semicolon) {
     Token exportUriToken = exportKeyword.next;
     String exportUri = exportUriToken.lexeme;
diff --git a/pkg/front_end/test/memory_file_system_test.dart b/pkg/front_end/test/memory_file_system_test.dart
index 802eace7..3e23b79 100644
--- a/pkg/front_end/test/memory_file_system_test.dart
+++ b/pkg/front_end/test/memory_file_system_test.dart
@@ -283,13 +283,18 @@
 }
 
 class _BaseTestNative extends _BaseTest {
+  @override
   final pathos.Context context = pathos.context;
+  @override
   MemoryFileSystem fileSystem;
+  @override
   String tempPath;
 
+  @override
   String join(String path1, String path2, [String path3, String path4]) =>
       pathos.join(path1, path2, path3, path4);
 
+  @override
   _baseSetUp() {
     tempPath = pathos.join(io.Directory.systemTemp.path, 'test_file_system');
     fileSystem = new MemoryFileSystem(pathos.toUri(io.Directory.current.path));
@@ -297,13 +302,18 @@
 }
 
 class _BaseTestPosix extends _BaseTest {
+  @override
   final pathos.Context context = pathos.posix;
+  @override
   MemoryFileSystem fileSystem;
+  @override
   String tempPath;
 
+  @override
   String join(String path1, String path2, [String path3, String path4]) =>
       pathos.posix.join(path1, path2, path3, path4);
 
+  @override
   void _baseSetUp() {
     tempPath = '/test_file_system';
     fileSystem = new MemoryFileSystem(Uri.parse('file:///cwd'));
@@ -311,13 +321,18 @@
 }
 
 class _BaseTestWindows extends _BaseTest {
+  @override
   final pathos.Context context = pathos.windows;
+  @override
   MemoryFileSystem fileSystem;
+  @override
   String tempPath;
 
+  @override
   String join(String path1, String path2, [String path3, String path4]) =>
       pathos.windows.join(path1, path2, path3, path4);
 
+  @override
   void _baseSetUp() {
     tempPath = r'c:\test_file_system';
     fileSystem = new MemoryFileSystem(Uri.parse('file:///c:/cwd'));
diff --git a/pkg/front_end/test/parser_equivalence_suite.dart b/pkg/front_end/test/parser_equivalence_suite.dart
index 0e473f3..3369a16 100644
--- a/pkg/front_end/test/parser_equivalence_suite.dart
+++ b/pkg/front_end/test/parser_equivalence_suite.dart
@@ -35,6 +35,7 @@
 
   Context(this.suiteName);
 
+  @override
   final List<Step> steps = const <Step>[
     const ListenerCompareStep(),
   ];
@@ -44,8 +45,10 @@
     extends Step<TestDescription, TestDescription, Context> {
   const ListenerCompareStep();
 
+  @override
   String get name => "listenerCompare";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     Uri uri = description.uri;
diff --git a/pkg/front_end/test/parser_suite.dart b/pkg/front_end/test/parser_suite.dart
index 1216380..cebf5f7 100644
--- a/pkg/front_end/test/parser_suite.dart
+++ b/pkg/front_end/test/parser_suite.dart
@@ -102,6 +102,7 @@
         enableNonNullable: true);
 
 class Context extends ChainContext with MatchContext {
+  @override
   final bool updateExpectations;
 
   @override
@@ -117,6 +118,7 @@
   Context(this.suiteName, this.updateExpectations, this.addTrace,
       this.annotateLines);
 
+  @override
   final List<Step> steps = const <Step>[
     const TokenStep(true, ".scanner.expect"),
     const TokenStep(false, ".parser.expect"),
@@ -124,6 +126,7 @@
     const IntertwinedStep(),
   ];
 
+  @override
   final ExpectationSet expectationSet =
       new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
 
@@ -138,11 +141,13 @@
 class ContextChecksOnly extends Context {
   ContextChecksOnly(String suiteName) : super(suiteName, false, false, false);
 
+  @override
   final List<Step> steps = const <Step>[
     const ListenerStep(false),
     const DirectParserASTStep(),
   ];
 
+  @override
   final ExpectationSet expectationSet =
       new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
 
@@ -157,7 +162,9 @@
 class DirectParserASTStep
     extends Step<TestDescription, TestDescription, Context> {
   const DirectParserASTStep();
+  @override
   String get name => "DirectParserAST";
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     Uri uri = description.uri;
@@ -176,6 +183,7 @@
   final bool doExpects;
   const ListenerStep(this.doExpects);
 
+  @override
   String get name => "listener";
 
   /// Scans the uri, parses it with the test listener and returns it.
@@ -205,6 +213,7 @@
     return parserTestListener;
   }
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     Uri uri = description.uri;
@@ -239,8 +248,10 @@
 class IntertwinedStep extends Step<TestDescription, TestDescription, Context> {
   const IntertwinedStep();
 
+  @override
   String get name => "intertwined";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     List<int> lineStarts = <int>[];
@@ -276,8 +287,10 @@
 
   const TokenStep(this.onlyScanner, this.suffix);
 
+  @override
   String get name => "token";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, Context context) {
     List<int> lineStarts = <int>[];
@@ -455,6 +468,7 @@
       bool trace, this.annotateLines, this.source, this.shortName)
       : super(trace);
 
+  @override
   void doPrint(String s) {
     super.doPrint(s);
     if (!annotateLines) {
@@ -473,6 +487,7 @@
     }
   }
 
+  @override
   void seen(Token? token) {
     if (!annotateLines) return;
     if (token == null) return;
@@ -489,6 +504,7 @@
     }
   }
 
+  @override
   bool checkEof(Token token) {
     bool result = super.checkEof(token);
     if (result) {
@@ -497,6 +513,7 @@
     return result;
   }
 
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     if (source != null) {
@@ -526,6 +543,7 @@
       bool trace, bool annotateLines, Source source)
       : super(trace, annotateLines, source, null);
 
+  @override
   void doPrint(String s) {
     int prevIndent = super.indent;
     super.indent = parser.indent;
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 3e5652c..1a797be 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -65,18 +65,22 @@
 
   void seen(Token? token) {}
 
+  @override
   Uri? get uri => null;
 
+  @override
   void logEvent(String name) {
     doPrint('logEvent(' '$name)');
   }
 
+  @override
   void beginArguments(Token token) {
     seen(token);
     doPrint('beginArguments(' '$token)');
     indent++;
   }
 
+  @override
   void endArguments(int count, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -84,18 +88,21 @@
     doPrint('endArguments(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleAsyncModifier(Token? asyncToken, Token? starToken) {
     seen(asyncToken);
     seen(starToken);
     doPrint('handleAsyncModifier(' '$asyncToken, ' '$starToken)');
   }
 
+  @override
   void beginAwaitExpression(Token token) {
     seen(token);
     doPrint('beginAwaitExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endAwaitExpression(Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -103,6 +110,7 @@
     doPrint('endAwaitExpression(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void endInvalidAwaitExpression(
       Token beginToken, Token endToken, MessageCode errorCode) {
     indent--;
@@ -114,12 +122,14 @@
         '$errorCode)');
   }
 
+  @override
   void beginBlock(Token token, BlockKind blockKind) {
     seen(token);
     doPrint('beginBlock(' '$token, ' '$blockKind)');
     indent++;
   }
 
+  @override
   void endBlock(
       int count, Token beginToken, Token endToken, BlockKind blockKind) {
     indent--;
@@ -128,40 +138,47 @@
     doPrint('endBlock(' '$count, ' '$beginToken, ' '$endToken, ' '$blockKind)');
   }
 
+  @override
   void handleInvalidTopLevelBlock(Token token) {
     seen(token);
     doPrint('handleInvalidTopLevelBlock(' '$token)');
   }
 
+  @override
   void beginCascade(Token token) {
     seen(token);
     doPrint('beginCascade(' '$token)');
     indent++;
   }
 
+  @override
   void endCascade() {
     indent--;
     doPrint('endCascade()');
   }
 
+  @override
   void beginCaseExpression(Token caseKeyword) {
     seen(caseKeyword);
     doPrint('beginCaseExpression(' '$caseKeyword)');
     indent++;
   }
 
+  @override
   void endCaseExpression(Token colon) {
     indent--;
     seen(colon);
     doPrint('endCaseExpression(' '$colon)');
   }
 
+  @override
   void beginClassOrMixinBody(DeclarationKind kind, Token token) {
     seen(token);
     doPrint('beginClassOrMixinBody(' '$kind, ' '$token)');
     indent++;
   }
 
+  @override
   void endClassOrMixinBody(
       DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
     indent--;
@@ -174,12 +191,14 @@
         '$endToken)');
   }
 
+  @override
   void beginClassOrNamedMixinApplicationPrelude(Token token) {
     seen(token);
     doPrint('beginClassOrNamedMixinApplicationPrelude(' '$token)');
     indent++;
   }
 
+  @override
   void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
     seen(begin);
     seen(abstractToken);
@@ -188,11 +207,13 @@
     indent++;
   }
 
+  @override
   void handleClassExtends(Token? extendsKeyword, int typeCount) {
     seen(extendsKeyword);
     doPrint('handleClassExtends(' '$extendsKeyword, ' '$typeCount)');
   }
 
+  @override
   void handleClassOrMixinImplements(
       Token? implementsKeyword, int interfacesCount) {
     seen(implementsKeyword);
@@ -201,6 +222,7 @@
         '$interfacesCount)');
   }
 
+  @override
   void handleClassHeader(Token begin, Token classKeyword, Token? nativeToken) {
     seen(begin);
     seen(classKeyword);
@@ -208,10 +230,12 @@
     doPrint('handleClassHeader(' '$begin, ' '$classKeyword, ' '$nativeToken)');
   }
 
+  @override
   void handleRecoverClassHeader() {
     doPrint('handleRecoverClassHeader()');
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -219,6 +243,7 @@
     doPrint('endClassDeclaration(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginMixinDeclaration(Token mixinKeyword, Token name) {
     seen(mixinKeyword);
     seen(name);
@@ -226,20 +251,24 @@
     indent++;
   }
 
+  @override
   void handleMixinOn(Token? onKeyword, int typeCount) {
     seen(onKeyword);
     doPrint('handleMixinOn(' '$onKeyword, ' '$typeCount)');
   }
 
+  @override
   void handleMixinHeader(Token mixinKeyword) {
     seen(mixinKeyword);
     doPrint('handleMixinHeader(' '$mixinKeyword)');
   }
 
+  @override
   void handleRecoverMixinHeader() {
     doPrint('handleRecoverMixinHeader()');
   }
 
+  @override
   void endMixinDeclaration(Token mixinKeyword, Token endToken) {
     indent--;
     seen(mixinKeyword);
@@ -247,18 +276,21 @@
     doPrint('endMixinDeclaration(' '$mixinKeyword, ' '$endToken)');
   }
 
+  @override
   void beginUncategorizedTopLevelDeclaration(Token token) {
     seen(token);
     doPrint('beginUncategorizedTopLevelDeclaration(' '$token)');
     indent++;
   }
 
+  @override
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {
     seen(extensionKeyword);
     doPrint('beginExtensionDeclarationPrelude(' '$extensionKeyword)');
     indent++;
   }
 
+  @override
   void beginExtensionDeclaration(Token extensionKeyword, Token? name) {
     seen(extensionKeyword);
     seen(name);
@@ -266,6 +298,7 @@
     indent++;
   }
 
+  @override
   void endExtensionDeclaration(Token extensionKeyword, Token? typeKeyword,
       Token onKeyword, Token endToken) {
     indent--;
@@ -280,51 +313,60 @@
         '$endToken)');
   }
 
+  @override
   void beginCombinators(Token token) {
     seen(token);
     doPrint('beginCombinators(' '$token)');
     indent++;
   }
 
+  @override
   void endCombinators(int count) {
     indent--;
     doPrint('endCombinators(' '$count)');
   }
 
+  @override
   void beginCompilationUnit(Token token) {
     seen(token);
     doPrint('beginCompilationUnit(' '$token)');
     indent++;
   }
 
+  @override
   void handleDirectivesOnly() {
     doPrint('handleDirectivesOnly()');
   }
 
+  @override
   void endCompilationUnit(int count, Token token) {
     indent--;
     seen(token);
     doPrint('endCompilationUnit(' '$count, ' '$token)');
   }
 
+  @override
   void beginConstLiteral(Token token) {
     seen(token);
     doPrint('beginConstLiteral(' '$token)');
     indent++;
   }
 
+  @override
   void endConstLiteral(Token token) {
     indent--;
     seen(token);
     doPrint('endConstLiteral(' '$token)');
   }
 
+  @override
   void beginConstructorReference(Token start) {
     seen(start);
     doPrint('beginConstructorReference(' '$start)');
     indent++;
   }
 
+  @override
   void endConstructorReference(Token start, Token? periodBeforeName,
       Token endToken, ConstructorReferenceContext constructorReferenceContext) {
     indent--;
@@ -338,12 +380,14 @@
         '$constructorReferenceContext)');
   }
 
+  @override
   void beginDoWhileStatement(Token token) {
     seen(token);
     doPrint('beginDoWhileStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endDoWhileStatement(
       Token doKeyword, Token whileKeyword, Token endToken) {
     indent--;
@@ -354,36 +398,42 @@
         'endDoWhileStatement(' '$doKeyword, ' '$whileKeyword, ' '$endToken)');
   }
 
+  @override
   void beginDoWhileStatementBody(Token token) {
     seen(token);
     doPrint('beginDoWhileStatementBody(' '$token)');
     indent++;
   }
 
+  @override
   void endDoWhileStatementBody(Token token) {
     indent--;
     seen(token);
     doPrint('endDoWhileStatementBody(' '$token)');
   }
 
+  @override
   void beginWhileStatementBody(Token token) {
     seen(token);
     doPrint('beginWhileStatementBody(' '$token)');
     indent++;
   }
 
+  @override
   void endWhileStatementBody(Token token) {
     indent--;
     seen(token);
     doPrint('endWhileStatementBody(' '$token)');
   }
 
+  @override
   void beginEnum(Token enumKeyword) {
     seen(enumKeyword);
     doPrint('beginEnum(' '$enumKeyword)');
     indent++;
   }
 
+  @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
     indent--;
     seen(enumKeyword);
@@ -391,12 +441,14 @@
     doPrint('endEnum(' '$enumKeyword, ' '$leftBrace, ' '$count)');
   }
 
+  @override
   void beginExport(Token token) {
     seen(token);
     doPrint('beginExport(' '$token)');
     indent++;
   }
 
+  @override
   void endExport(Token exportKeyword, Token semicolon) {
     indent--;
     seen(exportKeyword);
@@ -404,16 +456,19 @@
     doPrint('endExport(' '$exportKeyword, ' '$semicolon)');
   }
 
+  @override
   void handleExtraneousExpression(Token token, Message message) {
     seen(token);
     doPrint('handleExtraneousExpression(' '$token, ' '$message)');
   }
 
+  @override
   void handleExpressionStatement(Token token) {
     seen(token);
     doPrint('handleExpressionStatement(' '$token)');
   }
 
+  @override
   void beginFactoryMethod(
       Token lastConsumed, Token? externalToken, Token? constToken) {
     seen(lastConsumed);
@@ -426,6 +481,7 @@
     indent++;
   }
 
+  @override
   void endClassFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     indent--;
@@ -438,6 +494,7 @@
         '$endToken)');
   }
 
+  @override
   void endMixinFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     indent--;
@@ -450,6 +507,7 @@
         '$endToken)');
   }
 
+  @override
   void endExtensionFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     indent--;
@@ -462,6 +520,7 @@
         '$endToken)');
   }
 
+  @override
   void beginFormalParameter(Token token, MemberKind kind, Token? requiredToken,
       Token? covariantToken, Token? varFinalOrConst) {
     seen(token);
@@ -477,6 +536,7 @@
     indent++;
   }
 
+  @override
   void endFormalParameter(
       Token? thisKeyword,
       Token? periodAfterThis,
@@ -501,17 +561,20 @@
         '$memberKind)');
   }
 
+  @override
   void handleNoFormalParameters(Token token, MemberKind kind) {
     seen(token);
     doPrint('handleNoFormalParameters(' '$token, ' '$kind)');
   }
 
+  @override
   void beginFormalParameters(Token token, MemberKind kind) {
     seen(token);
     doPrint('beginFormalParameters(' '$token, ' '$kind)');
     indent++;
   }
 
+  @override
   void endFormalParameters(
       int count, Token beginToken, Token endToken, MemberKind kind) {
     indent--;
@@ -524,6 +587,7 @@
         '$kind)');
   }
 
+  @override
   void endClassFields(
       Token? abstractToken,
       Token? externalToken,
@@ -555,6 +619,7 @@
         '$endToken)');
   }
 
+  @override
   void endMixinFields(
       Token? abstractToken,
       Token? externalToken,
@@ -586,6 +651,7 @@
         '$endToken)');
   }
 
+  @override
   void endExtensionFields(
       Token? abstractToken,
       Token? externalToken,
@@ -617,28 +683,33 @@
         '$endToken)');
   }
 
+  @override
   void handleForInitializerEmptyStatement(Token token) {
     seen(token);
     doPrint('handleForInitializerEmptyStatement(' '$token)');
   }
 
+  @override
   void handleForInitializerExpressionStatement(Token token, bool forIn) {
     seen(token);
     doPrint('handleForInitializerExpressionStatement(' '$token, ' '$forIn)');
   }
 
+  @override
   void handleForInitializerLocalVariableDeclaration(Token token, bool forIn) {
     seen(token);
     doPrint(
         'handleForInitializerLocalVariableDeclaration(' '$token, ' '$forIn)');
   }
 
+  @override
   void beginForStatement(Token token) {
     seen(token);
     doPrint('beginForStatement(' '$token)');
     indent++;
   }
 
+  @override
   void handleForLoopParts(Token forKeyword, Token leftParen,
       Token leftSeparator, int updateExpressionCount) {
     seen(forKeyword);
@@ -651,24 +722,28 @@
         '$updateExpressionCount)');
   }
 
+  @override
   void endForStatement(Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endForStatement(' '$endToken)');
   }
 
+  @override
   void beginForStatementBody(Token token) {
     seen(token);
     doPrint('beginForStatementBody(' '$token)');
     indent++;
   }
 
+  @override
   void endForStatementBody(Token token) {
     indent--;
     seen(token);
     doPrint('endForStatementBody(' '$token)');
   }
 
+  @override
   void handleForInLoopParts(Token? awaitToken, Token forToken,
       Token leftParenthesis, Token inKeyword) {
     seen(awaitToken);
@@ -682,66 +757,77 @@
         '$inKeyword)');
   }
 
+  @override
   void endForIn(Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endForIn(' '$endToken)');
   }
 
+  @override
   void beginForInExpression(Token token) {
     seen(token);
     doPrint('beginForInExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endForInExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endForInExpression(' '$token)');
   }
 
+  @override
   void beginForInBody(Token token) {
     seen(token);
     doPrint('beginForInBody(' '$token)');
     indent++;
   }
 
+  @override
   void endForInBody(Token token) {
     indent--;
     seen(token);
     doPrint('endForInBody(' '$token)');
   }
 
+  @override
   void beginNamedFunctionExpression(Token token) {
     seen(token);
     doPrint('beginNamedFunctionExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endNamedFunctionExpression(Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endNamedFunctionExpression(' '$endToken)');
   }
 
+  @override
   void beginLocalFunctionDeclaration(Token token) {
     seen(token);
     doPrint('beginLocalFunctionDeclaration(' '$token)');
     indent++;
   }
 
+  @override
   void endLocalFunctionDeclaration(Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endLocalFunctionDeclaration(' '$endToken)');
   }
 
+  @override
   void beginBlockFunctionBody(Token token) {
     seen(token);
     doPrint('beginBlockFunctionBody(' '$token)');
     indent++;
   }
 
+  @override
   void endBlockFunctionBody(int count, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -749,22 +835,26 @@
     doPrint('endBlockFunctionBody(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleNoFunctionBody(Token token) {
     seen(token);
     doPrint('handleNoFunctionBody(' '$token)');
   }
 
+  @override
   void handleFunctionBodySkipped(Token token, bool isExpressionBody) {
     seen(token);
     doPrint('handleFunctionBodySkipped(' '$token, ' '$isExpressionBody)');
   }
 
+  @override
   void beginFunctionName(Token token) {
     seen(token);
     doPrint('beginFunctionName(' '$token)');
     indent++;
   }
 
+  @override
   void endFunctionName(Token beginToken, Token token) {
     indent--;
     seen(beginToken);
@@ -772,12 +862,14 @@
     doPrint('endFunctionName(' '$beginToken, ' '$token)');
   }
 
+  @override
   void beginFunctionTypeAlias(Token token) {
     seen(token);
     doPrint('beginFunctionTypeAlias(' '$token)');
     indent++;
   }
 
+  @override
   void endFunctionTypeAlias(
       Token typedefKeyword, Token? equals, Token endToken) {
     indent--;
@@ -788,15 +880,18 @@
         'endFunctionTypeAlias(' '$typedefKeyword, ' '$equals, ' '$endToken)');
   }
 
+  @override
   void handleClassWithClause(Token withKeyword) {
     seen(withKeyword);
     doPrint('handleClassWithClause(' '$withKeyword)');
   }
 
+  @override
   void handleClassNoWithClause() {
     doPrint('handleClassNoWithClause()');
   }
 
+  @override
   void beginNamedMixinApplication(
       Token begin, Token? abstractToken, Token name) {
     seen(begin);
@@ -807,11 +902,13 @@
     indent++;
   }
 
+  @override
   void handleNamedMixinApplicationWithClause(Token withKeyword) {
     seen(withKeyword);
     doPrint('handleNamedMixinApplicationWithClause(' '$withKeyword)');
   }
 
+  @override
   void endNamedMixinApplication(Token begin, Token classKeyword, Token equals,
       Token? implementsKeyword, Token endToken) {
     indent--;
@@ -828,39 +925,46 @@
         '$endToken)');
   }
 
+  @override
   void beginHide(Token hideKeyword) {
     seen(hideKeyword);
     doPrint('beginHide(' '$hideKeyword)');
     indent++;
   }
 
+  @override
   void endHide(Token hideKeyword) {
     indent--;
     seen(hideKeyword);
     doPrint('endHide(' '$hideKeyword)');
   }
 
+  @override
   void handleIdentifierList(int count) {
     doPrint('handleIdentifierList(' '$count)');
   }
 
+  @override
   void beginTypeList(Token token) {
     seen(token);
     doPrint('beginTypeList(' '$token)');
     indent++;
   }
 
+  @override
   void endTypeList(int count) {
     indent--;
     doPrint('endTypeList(' '$count)');
   }
 
+  @override
   void beginIfStatement(Token token) {
     seen(token);
     doPrint('beginIfStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endIfStatement(Token ifToken, Token? elseToken) {
     indent--;
     seen(ifToken);
@@ -868,42 +972,49 @@
     doPrint('endIfStatement(' '$ifToken, ' '$elseToken)');
   }
 
+  @override
   void beginThenStatement(Token token) {
     seen(token);
     doPrint('beginThenStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endThenStatement(Token token) {
     indent--;
     seen(token);
     doPrint('endThenStatement(' '$token)');
   }
 
+  @override
   void beginElseStatement(Token token) {
     seen(token);
     doPrint('beginElseStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endElseStatement(Token token) {
     indent--;
     seen(token);
     doPrint('endElseStatement(' '$token)');
   }
 
+  @override
   void beginImport(Token importKeyword) {
     seen(importKeyword);
     doPrint('beginImport(' '$importKeyword)');
     indent++;
   }
 
+  @override
   void handleImportPrefix(Token? deferredKeyword, Token? asKeyword) {
     seen(deferredKeyword);
     seen(asKeyword);
     doPrint('handleImportPrefix(' '$deferredKeyword, ' '$asKeyword)');
   }
 
+  @override
   void endImport(Token importKeyword, Token? semicolon) {
     indent--;
     seen(importKeyword);
@@ -911,28 +1022,33 @@
     doPrint('endImport(' '$importKeyword, ' '$semicolon)');
   }
 
+  @override
   void handleRecoverImport(Token? semicolon) {
     seen(semicolon);
     doPrint('handleRecoverImport(' '$semicolon)');
   }
 
+  @override
   void beginConditionalUris(Token token) {
     seen(token);
     doPrint('beginConditionalUris(' '$token)');
     indent++;
   }
 
+  @override
   void endConditionalUris(int count) {
     indent--;
     doPrint('endConditionalUris(' '$count)');
   }
 
+  @override
   void beginConditionalUri(Token ifKeyword) {
     seen(ifKeyword);
     doPrint('beginConditionalUri(' '$ifKeyword)');
     indent++;
   }
 
+  @override
   void endConditionalUri(Token ifKeyword, Token leftParen, Token? equalSign) {
     indent--;
     seen(ifKeyword);
@@ -941,41 +1057,48 @@
     doPrint('endConditionalUri(' '$ifKeyword, ' '$leftParen, ' '$equalSign)');
   }
 
+  @override
   void handleDottedName(int count, Token firstIdentifier) {
     seen(firstIdentifier);
     doPrint('handleDottedName(' '$count, ' '$firstIdentifier)');
   }
 
+  @override
   void beginImplicitCreationExpression(Token token) {
     seen(token);
     doPrint('beginImplicitCreationExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endImplicitCreationExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endImplicitCreationExpression(' '$token)');
   }
 
+  @override
   void beginInitializedIdentifier(Token token) {
     seen(token);
     doPrint('beginInitializedIdentifier(' '$token)');
     indent++;
   }
 
+  @override
   void endInitializedIdentifier(Token nameToken) {
     indent--;
     seen(nameToken);
     doPrint('endInitializedIdentifier(' '$nameToken)');
   }
 
+  @override
   void beginFieldInitializer(Token token) {
     seen(token);
     doPrint('beginFieldInitializer(' '$token)');
     indent++;
   }
 
+  @override
   void endFieldInitializer(Token assignment, Token token) {
     indent--;
     seen(assignment);
@@ -983,46 +1106,54 @@
     doPrint('endFieldInitializer(' '$assignment, ' '$token)');
   }
 
+  @override
   void handleNoFieldInitializer(Token token) {
     seen(token);
     doPrint('handleNoFieldInitializer(' '$token)');
   }
 
+  @override
   void beginVariableInitializer(Token token) {
     seen(token);
     doPrint('beginVariableInitializer(' '$token)');
     indent++;
   }
 
+  @override
   void endVariableInitializer(Token assignmentOperator) {
     indent--;
     seen(assignmentOperator);
     doPrint('endVariableInitializer(' '$assignmentOperator)');
   }
 
+  @override
   void handleNoVariableInitializer(Token token) {
     seen(token);
     doPrint('handleNoVariableInitializer(' '$token)');
   }
 
+  @override
   void beginInitializer(Token token) {
     seen(token);
     doPrint('beginInitializer(' '$token)');
     indent++;
   }
 
+  @override
   void endInitializer(Token token) {
     indent--;
     seen(token);
     doPrint('endInitializer(' '$token)');
   }
 
+  @override
   void beginInitializers(Token token) {
     seen(token);
     doPrint('beginInitializers(' '$token)');
     indent++;
   }
 
+  @override
   void endInitializers(int count, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1030,47 +1161,56 @@
     doPrint('endInitializers(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleNoInitializers() {
     doPrint('handleNoInitializers()');
   }
 
+  @override
   void handleInvalidExpression(Token token) {
     seen(token);
     doPrint('handleInvalidExpression(' '$token)');
   }
 
+  @override
   void handleInvalidFunctionBody(Token token) {
     seen(token);
     doPrint('handleInvalidFunctionBody(' '$token)');
   }
 
+  @override
   void handleInvalidTypeReference(Token token) {
     seen(token);
     doPrint('handleInvalidTypeReference(' '$token)');
   }
 
+  @override
   void handleLabel(Token token) {
     seen(token);
     doPrint('handleLabel(' '$token)');
   }
 
+  @override
   void beginLabeledStatement(Token token, int labelCount) {
     seen(token);
     doPrint('beginLabeledStatement(' '$token, ' '$labelCount)');
     indent++;
   }
 
+  @override
   void endLabeledStatement(int labelCount) {
     indent--;
     doPrint('endLabeledStatement(' '$labelCount)');
   }
 
+  @override
   void beginLibraryName(Token token) {
     seen(token);
     doPrint('beginLibraryName(' '$token)');
     indent++;
   }
 
+  @override
   void endLibraryName(Token libraryKeyword, Token semicolon) {
     indent--;
     seen(libraryKeyword);
@@ -1078,50 +1218,59 @@
     doPrint('endLibraryName(' '$libraryKeyword, ' '$semicolon)');
   }
 
+  @override
   void handleLiteralMapEntry(Token colon, Token endToken) {
     seen(colon);
     seen(endToken);
     doPrint('handleLiteralMapEntry(' '$colon, ' '$endToken)');
   }
 
+  @override
   void beginLiteralString(Token token) {
     seen(token);
     doPrint('beginLiteralString(' '$token)');
     indent++;
   }
 
+  @override
   void handleInterpolationExpression(Token leftBracket, Token? rightBracket) {
     seen(leftBracket);
     seen(rightBracket);
     doPrint('handleInterpolationExpression(' '$leftBracket, ' '$rightBracket)');
   }
 
+  @override
   void endLiteralString(int interpolationCount, Token endToken) {
     indent--;
     seen(endToken);
     doPrint('endLiteralString(' '$interpolationCount, ' '$endToken)');
   }
 
+  @override
   void handleStringJuxtaposition(Token startToken, int literalCount) {
     seen(startToken);
     doPrint('handleStringJuxtaposition(' '$startToken, ' '$literalCount)');
   }
 
+  @override
   void beginMember() {
     doPrint('beginMember()');
     indent++;
   }
 
+  @override
   void handleInvalidMember(Token endToken) {
     seen(endToken);
     doPrint('handleInvalidMember(' '$endToken)');
   }
 
+  @override
   void endMember() {
     indent--;
     doPrint('endMember()');
   }
 
+  @override
   void beginMethod(
       Token? externalToken,
       Token? staticToken,
@@ -1145,6 +1294,7 @@
     indent++;
   }
 
+  @override
   void endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1161,6 +1311,7 @@
         '$endToken)');
   }
 
+  @override
   void endMixinMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1177,6 +1328,7 @@
         '$endToken)');
   }
 
+  @override
   void endExtensionMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1193,6 +1345,7 @@
         '$endToken)');
   }
 
+  @override
   void endClassConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1209,6 +1362,7 @@
         '$endToken)');
   }
 
+  @override
   void endMixinConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     indent--;
@@ -1225,6 +1379,7 @@
         '$endToken)');
   }
 
+  @override
   void endExtensionConstructor(Token? getOrSet, Token beginToken,
       Token beginParam, Token? beginInitializers, Token endToken) {
     indent--;
@@ -1241,23 +1396,27 @@
         '$endToken)');
   }
 
+  @override
   void beginMetadataStar(Token token) {
     seen(token);
     doPrint('beginMetadataStar(' '$token)');
     indent++;
   }
 
+  @override
   void endMetadataStar(int count) {
     indent--;
     doPrint('endMetadataStar(' '$count)');
   }
 
+  @override
   void beginMetadata(Token token) {
     seen(token);
     doPrint('beginMetadata(' '$token)');
     indent++;
   }
 
+  @override
   void endMetadata(Token beginToken, Token? periodBeforeName, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1266,12 +1425,14 @@
     doPrint('endMetadata(' '$beginToken, ' '$periodBeforeName, ' '$endToken)');
   }
 
+  @override
   void beginOptionalFormalParameters(Token token) {
     seen(token);
     doPrint('beginOptionalFormalParameters(' '$token)');
     indent++;
   }
 
+  @override
   void endOptionalFormalParameters(
       int count, Token beginToken, Token endToken) {
     indent--;
@@ -1281,12 +1442,14 @@
         'endOptionalFormalParameters(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginPart(Token token) {
     seen(token);
     doPrint('beginPart(' '$token)');
     indent++;
   }
 
+  @override
   void endPart(Token partKeyword, Token semicolon) {
     indent--;
     seen(partKeyword);
@@ -1294,12 +1457,14 @@
     doPrint('endPart(' '$partKeyword, ' '$semicolon)');
   }
 
+  @override
   void beginPartOf(Token token) {
     seen(token);
     doPrint('beginPartOf(' '$token)');
     indent++;
   }
 
+  @override
   void endPartOf(
       Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
     indent--;
@@ -1313,12 +1478,14 @@
         '$hasName)');
   }
 
+  @override
   void beginRedirectingFactoryBody(Token token) {
     seen(token);
     doPrint('beginRedirectingFactoryBody(' '$token)');
     indent++;
   }
 
+  @override
   void endRedirectingFactoryBody(Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1326,41 +1493,48 @@
     doPrint('endRedirectingFactoryBody(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginReturnStatement(Token token) {
     seen(token);
     doPrint('beginReturnStatement(' '$token)');
     indent++;
   }
 
+  @override
   void handleNativeFunctionBody(Token nativeToken, Token semicolon) {
     seen(nativeToken);
     seen(semicolon);
     doPrint('handleNativeFunctionBody(' '$nativeToken, ' '$semicolon)');
   }
 
+  @override
   void handleNativeFunctionBodyIgnored(Token nativeToken, Token semicolon) {
     seen(nativeToken);
     seen(semicolon);
     doPrint('handleNativeFunctionBodyIgnored(' '$nativeToken, ' '$semicolon)');
   }
 
+  @override
   void handleNativeFunctionBodySkipped(Token nativeToken, Token semicolon) {
     seen(nativeToken);
     seen(semicolon);
     doPrint('handleNativeFunctionBodySkipped(' '$nativeToken, ' '$semicolon)');
   }
 
+  @override
   void handleEmptyFunctionBody(Token semicolon) {
     seen(semicolon);
     doPrint('handleEmptyFunctionBody(' '$semicolon)');
   }
 
+  @override
   void handleExpressionFunctionBody(Token arrowToken, Token? endToken) {
     seen(arrowToken);
     seen(endToken);
     doPrint('handleExpressionFunctionBody(' '$arrowToken, ' '$endToken)');
   }
 
+  @override
   void endReturnStatement(
       bool hasExpression, Token beginToken, Token endToken) {
     indent--;
@@ -1370,30 +1544,35 @@
         'endReturnStatement(' '$hasExpression, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleSend(Token beginToken, Token endToken) {
     seen(beginToken);
     seen(endToken);
     doPrint('handleSend(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginShow(Token showKeyword) {
     seen(showKeyword);
     doPrint('beginShow(' '$showKeyword)');
     indent++;
   }
 
+  @override
   void endShow(Token showKeyword) {
     indent--;
     seen(showKeyword);
     doPrint('endShow(' '$showKeyword)');
   }
 
+  @override
   void beginSwitchStatement(Token token) {
     seen(token);
     doPrint('beginSwitchStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endSwitchStatement(Token switchKeyword, Token endToken) {
     indent--;
     seen(switchKeyword);
@@ -1401,12 +1580,14 @@
     doPrint('endSwitchStatement(' '$switchKeyword, ' '$endToken)');
   }
 
+  @override
   void beginSwitchBlock(Token token) {
     seen(token);
     doPrint('beginSwitchBlock(' '$token)');
     indent++;
   }
 
+  @override
   void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1414,30 +1595,35 @@
     doPrint('endSwitchBlock(' '$caseCount, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void beginLiteralSymbol(Token token) {
     seen(token);
     doPrint('beginLiteralSymbol(' '$token)');
     indent++;
   }
 
+  @override
   void endLiteralSymbol(Token hashToken, int identifierCount) {
     indent--;
     seen(hashToken);
     doPrint('endLiteralSymbol(' '$hashToken, ' '$identifierCount)');
   }
 
+  @override
   void handleThrowExpression(Token throwToken, Token endToken) {
     seen(throwToken);
     seen(endToken);
     doPrint('handleThrowExpression(' '$throwToken, ' '$endToken)');
   }
 
+  @override
   void beginRethrowStatement(Token token) {
     seen(token);
     doPrint('beginRethrowStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endRethrowStatement(Token rethrowToken, Token endToken) {
     indent--;
     seen(rethrowToken);
@@ -1445,29 +1631,34 @@
     doPrint('endRethrowStatement(' '$rethrowToken, ' '$endToken)');
   }
 
+  @override
   void endTopLevelDeclaration(Token nextToken) {
     indent--;
     seen(nextToken);
     doPrint('endTopLevelDeclaration(' '$nextToken)');
   }
 
+  @override
   void handleInvalidTopLevelDeclaration(Token endToken) {
     seen(endToken);
     doPrint('handleInvalidTopLevelDeclaration(' '$endToken)');
   }
 
+  @override
   void beginTopLevelMember(Token token) {
     seen(token);
     doPrint('beginTopLevelMember(' '$token)');
     indent++;
   }
 
+  @override
   void beginFields(Token lastConsumed) {
     seen(lastConsumed);
     doPrint('beginFields(' '$lastConsumed)');
     indent++;
   }
 
+  @override
   void endTopLevelFields(
       Token? externalToken,
       Token? staticToken,
@@ -1496,6 +1687,7 @@
         '$endToken)');
   }
 
+  @override
   void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
     seen(lastConsumed);
     seen(externalToken);
@@ -1503,6 +1695,7 @@
     indent++;
   }
 
+  @override
   void endTopLevelMethod(Token beginToken, Token? getOrSet, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1511,30 +1704,35 @@
     doPrint('endTopLevelMethod(' '$beginToken, ' '$getOrSet, ' '$endToken)');
   }
 
+  @override
   void beginTryStatement(Token token) {
     seen(token);
     doPrint('beginTryStatement(' '$token)');
     indent++;
   }
 
+  @override
   void handleCaseMatch(Token caseKeyword, Token colon) {
     seen(caseKeyword);
     seen(colon);
     doPrint('handleCaseMatch(' '$caseKeyword, ' '$colon)');
   }
 
+  @override
   void beginCatchClause(Token token) {
     seen(token);
     doPrint('beginCatchClause(' '$token)');
     indent++;
   }
 
+  @override
   void endCatchClause(Token token) {
     indent--;
     seen(token);
     doPrint('endCatchClause(' '$token)');
   }
 
+  @override
   void handleCatchBlock(Token? onKeyword, Token? catchKeyword, Token? comma) {
     seen(onKeyword);
     seen(catchKeyword);
@@ -1542,11 +1740,13 @@
     doPrint('handleCatchBlock(' '$onKeyword, ' '$catchKeyword, ' '$comma)');
   }
 
+  @override
   void handleFinallyBlock(Token finallyKeyword) {
     seen(finallyKeyword);
     doPrint('handleFinallyBlock(' '$finallyKeyword)');
   }
 
+  @override
   void endTryStatement(
       int catchCount, Token tryKeyword, Token? finallyKeyword) {
     indent--;
@@ -1556,28 +1756,33 @@
         'endTryStatement(' '$catchCount, ' '$tryKeyword, ' '$finallyKeyword)');
   }
 
+  @override
   void handleType(Token beginToken, Token? questionMark) {
     seen(beginToken);
     seen(questionMark);
     doPrint('handleType(' '$beginToken, ' '$questionMark)');
   }
 
+  @override
   void handleNonNullAssertExpression(Token bang) {
     seen(bang);
     doPrint('handleNonNullAssertExpression(' '$bang)');
   }
 
+  @override
   void handleNoName(Token token) {
     seen(token);
     doPrint('handleNoName(' '$token)');
   }
 
+  @override
   void beginFunctionType(Token beginToken) {
     seen(beginToken);
     doPrint('beginFunctionType(' '$beginToken)');
     indent++;
   }
 
+  @override
   void endFunctionType(Token functionToken, Token? questionMark) {
     indent--;
     seen(functionToken);
@@ -1585,12 +1790,14 @@
     doPrint('endFunctionType(' '$functionToken, ' '$questionMark)');
   }
 
+  @override
   void beginTypeArguments(Token token) {
     seen(token);
     doPrint('beginTypeArguments(' '$token)');
     indent++;
   }
 
+  @override
   void endTypeArguments(int count, Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1598,27 +1805,32 @@
     doPrint('endTypeArguments(' '$count, ' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void handleInvalidTypeArguments(Token token) {
     seen(token);
     doPrint('handleInvalidTypeArguments(' '$token)');
   }
 
+  @override
   void handleNoTypeArguments(Token token) {
     seen(token);
     doPrint('handleNoTypeArguments(' '$token)');
   }
 
+  @override
   void beginTypeVariable(Token token) {
     seen(token);
     doPrint('beginTypeVariable(' '$token)');
     indent++;
   }
 
+  @override
   void handleTypeVariablesDefined(Token token, int count) {
     seen(token);
     doPrint('handleTypeVariablesDefined(' '$token, ' '$count)');
   }
 
+  @override
   void endTypeVariable(
       Token token, int index, Token? extendsOrSuper, Token? variance) {
     indent--;
@@ -1632,12 +1844,14 @@
         '$variance)');
   }
 
+  @override
   void beginTypeVariables(Token token) {
     seen(token);
     doPrint('beginTypeVariables(' '$token)');
     indent++;
   }
 
+  @override
   void endTypeVariables(Token beginToken, Token endToken) {
     indent--;
     seen(beginToken);
@@ -1645,17 +1859,20 @@
     doPrint('endTypeVariables(' '$beginToken, ' '$endToken)');
   }
 
+  @override
   void reportVarianceModifierNotEnabled(Token? variance) {
     seen(variance);
     doPrint('reportVarianceModifierNotEnabled(' '$variance)');
   }
 
+  @override
   void beginFunctionExpression(Token token) {
     seen(token);
     doPrint('beginFunctionExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endFunctionExpression(Token beginToken, Token token) {
     indent--;
     seen(beginToken);
@@ -1663,6 +1880,7 @@
     doPrint('endFunctionExpression(' '$beginToken, ' '$token)');
   }
 
+  @override
   void beginVariablesDeclaration(
       Token token, Token? lateToken, Token? varFinalOrConst) {
     seen(token);
@@ -1675,18 +1893,21 @@
     indent++;
   }
 
+  @override
   void endVariablesDeclaration(int count, Token? endToken) {
     indent--;
     seen(endToken);
     doPrint('endVariablesDeclaration(' '$count, ' '$endToken)');
   }
 
+  @override
   void beginWhileStatement(Token token) {
     seen(token);
     doPrint('beginWhileStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endWhileStatement(Token whileKeyword, Token endToken) {
     indent--;
     seen(whileKeyword);
@@ -1694,55 +1915,65 @@
     doPrint('endWhileStatement(' '$whileKeyword, ' '$endToken)');
   }
 
+  @override
   void beginAsOperatorType(Token operator) {
     seen(operator);
     doPrint('beginAsOperatorType(' '$operator)');
     indent++;
   }
 
+  @override
   void endAsOperatorType(Token operator) {
     indent--;
     seen(operator);
     doPrint('endAsOperatorType(' '$operator)');
   }
 
+  @override
   void handleAsOperator(Token operator) {
     seen(operator);
     doPrint('handleAsOperator(' '$operator)');
   }
 
+  @override
   void handleAssignmentExpression(Token token) {
     seen(token);
     doPrint('handleAssignmentExpression(' '$token)');
   }
 
+  @override
   void beginBinaryExpression(Token token) {
     seen(token);
     doPrint('beginBinaryExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endBinaryExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endBinaryExpression(' '$token)');
   }
 
+  @override
   void handleEndingBinaryExpression(Token token) {
     seen(token);
     doPrint('handleEndingBinaryExpression(' '$token)');
   }
 
+  @override
   void beginConditionalExpression(Token question) {
     seen(question);
     doPrint('beginConditionalExpression(' '$question)');
     indent++;
   }
 
+  @override
   void handleConditionalExpressionColon() {
     doPrint('handleConditionalExpressionColon()');
   }
 
+  @override
   void endConditionalExpression(Token question, Token colon) {
     indent--;
     seen(question);
@@ -1750,23 +1981,27 @@
     doPrint('endConditionalExpression(' '$question, ' '$colon)');
   }
 
+  @override
   void beginConstExpression(Token constKeyword) {
     seen(constKeyword);
     doPrint('beginConstExpression(' '$constKeyword)');
     indent++;
   }
 
+  @override
   void endConstExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endConstExpression(' '$token)');
   }
 
+  @override
   void handleConstFactory(Token constKeyword) {
     seen(constKeyword);
     doPrint('handleConstFactory(' '$constKeyword)');
   }
 
+  @override
   void beginForControlFlow(Token? awaitToken, Token forToken) {
     seen(awaitToken);
     seen(forToken);
@@ -1774,57 +2009,67 @@
     indent++;
   }
 
+  @override
   void endForControlFlow(Token token) {
     indent--;
     seen(token);
     doPrint('endForControlFlow(' '$token)');
   }
 
+  @override
   void endForInControlFlow(Token token) {
     indent--;
     seen(token);
     doPrint('endForInControlFlow(' '$token)');
   }
 
+  @override
   void beginIfControlFlow(Token ifToken) {
     seen(ifToken);
     doPrint('beginIfControlFlow(' '$ifToken)');
     indent++;
   }
 
+  @override
   void handleThenControlFlow(Token token) {
     seen(token);
     doPrint('handleThenControlFlow(' '$token)');
   }
 
+  @override
   void handleElseControlFlow(Token elseToken) {
     seen(elseToken);
     doPrint('handleElseControlFlow(' '$elseToken)');
   }
 
+  @override
   void endIfControlFlow(Token token) {
     indent--;
     seen(token);
     doPrint('endIfControlFlow(' '$token)');
   }
 
+  @override
   void endIfElseControlFlow(Token token) {
     indent--;
     seen(token);
     doPrint('endIfElseControlFlow(' '$token)');
   }
 
+  @override
   void handleSpreadExpression(Token spreadToken) {
     seen(spreadToken);
     doPrint('handleSpreadExpression(' '$spreadToken)');
   }
 
+  @override
   void beginFunctionTypedFormalParameter(Token token) {
     seen(token);
     doPrint('beginFunctionTypedFormalParameter(' '$token)');
     indent++;
   }
 
+  @override
   void endFunctionTypedFormalParameter(Token nameToken, Token? question) {
     indent--;
     seen(nameToken);
@@ -1832,11 +2077,13 @@
     doPrint('endFunctionTypedFormalParameter(' '$nameToken, ' '$question)');
   }
 
+  @override
   void handleIdentifier(Token token, IdentifierContext context) {
     seen(token);
     doPrint('handleIdentifier(' '$token, ' '$context)');
   }
 
+  @override
   void handleIndexedExpression(
       Token? question, Token openSquareBracket, Token closeSquareBracket) {
     seen(question);
@@ -1848,29 +2095,34 @@
         '$closeSquareBracket)');
   }
 
+  @override
   void beginIsOperatorType(Token operator) {
     seen(operator);
     doPrint('beginIsOperatorType(' '$operator)');
     indent++;
   }
 
+  @override
   void endIsOperatorType(Token operator) {
     indent--;
     seen(operator);
     doPrint('endIsOperatorType(' '$operator)');
   }
 
+  @override
   void handleIsOperator(Token isOperator, Token? not) {
     seen(isOperator);
     seen(not);
     doPrint('handleIsOperator(' '$isOperator, ' '$not)');
   }
 
+  @override
   void handleLiteralBool(Token token) {
     seen(token);
     doPrint('handleLiteralBool(' '$token)');
   }
 
+  @override
   void handleBreakStatement(
       bool hasTarget, Token breakKeyword, Token endToken) {
     seen(breakKeyword);
@@ -1879,6 +2131,7 @@
         'handleBreakStatement(' '$hasTarget, ' '$breakKeyword, ' '$endToken)');
   }
 
+  @override
   void handleContinueStatement(
       bool hasTarget, Token continueKeyword, Token endToken) {
     seen(continueKeyword);
@@ -1889,17 +2142,20 @@
         '$endToken)');
   }
 
+  @override
   void handleEmptyStatement(Token token) {
     seen(token);
     doPrint('handleEmptyStatement(' '$token)');
   }
 
+  @override
   void beginAssert(Token assertKeyword, Assert kind) {
     seen(assertKeyword);
     doPrint('beginAssert(' '$assertKeyword, ' '$kind)');
     indent++;
   }
 
+  @override
   void endAssert(Token assertKeyword, Assert kind, Token leftParenthesis,
       Token? commaToken, Token semicolonToken) {
     indent--;
@@ -1915,16 +2171,19 @@
         '$semicolonToken)');
   }
 
+  @override
   void handleLiteralDouble(Token token) {
     seen(token);
     doPrint('handleLiteralDouble(' '$token)');
   }
 
+  @override
   void handleLiteralInt(Token token) {
     seen(token);
     doPrint('handleLiteralInt(' '$token)');
   }
 
+  @override
   void handleLiteralList(
       int count, Token leftBracket, Token? constKeyword, Token rightBracket) {
     seen(leftBracket);
@@ -1937,6 +2196,7 @@
         '$rightBracket)');
   }
 
+  @override
   void handleLiteralSetOrMap(
     int count,
     Token leftBrace,
@@ -1955,101 +2215,120 @@
         '$hasSetEntry)');
   }
 
+  @override
   void handleLiteralNull(Token token) {
     seen(token);
     doPrint('handleLiteralNull(' '$token)');
   }
 
+  @override
   void handleNativeClause(Token nativeToken, bool hasName) {
     seen(nativeToken);
     doPrint('handleNativeClause(' '$nativeToken, ' '$hasName)');
   }
 
+  @override
   void handleNamedArgument(Token colon) {
     seen(colon);
     doPrint('handleNamedArgument(' '$colon)');
   }
 
+  @override
   void beginNewExpression(Token token) {
     seen(token);
     doPrint('beginNewExpression(' '$token)');
     indent++;
   }
 
+  @override
   void endNewExpression(Token token) {
     indent--;
     seen(token);
     doPrint('endNewExpression(' '$token)');
   }
 
+  @override
   void handleNoArguments(Token token) {
     seen(token);
     doPrint('handleNoArguments(' '$token)');
   }
 
+  @override
   void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
     seen(token);
     doPrint('handleNoConstructorReferenceContinuationAfterTypeArguments('
         '$token)');
   }
 
+  @override
   void handleNoType(Token lastConsumed) {
     seen(lastConsumed);
     doPrint('handleNoType(' '$lastConsumed)');
   }
 
+  @override
   void handleNoTypeVariables(Token token) {
     seen(token);
     doPrint('handleNoTypeVariables(' '$token)');
   }
 
+  @override
   void handleOperator(Token token) {
     seen(token);
     doPrint('handleOperator(' '$token)');
   }
 
+  @override
   void handleSymbolVoid(Token token) {
     seen(token);
     doPrint('handleSymbolVoid(' '$token)');
   }
 
+  @override
   void handleOperatorName(Token operatorKeyword, Token token) {
     seen(operatorKeyword);
     seen(token);
     doPrint('handleOperatorName(' '$operatorKeyword, ' '$token)');
   }
 
+  @override
   void handleInvalidOperatorName(Token operatorKeyword, Token token) {
     seen(operatorKeyword);
     seen(token);
     doPrint('handleInvalidOperatorName(' '$operatorKeyword, ' '$token)');
   }
 
+  @override
   void handleParenthesizedCondition(Token token) {
     seen(token);
     doPrint('handleParenthesizedCondition(' '$token)');
   }
 
+  @override
   void handleParenthesizedExpression(Token token) {
     seen(token);
     doPrint('handleParenthesizedExpression(' '$token)');
   }
 
+  @override
   void handleQualified(Token period) {
     seen(period);
     doPrint('handleQualified(' '$period)');
   }
 
+  @override
   void handleStringPart(Token token) {
     seen(token);
     doPrint('handleStringPart(' '$token)');
   }
 
+  @override
   void handleSuperExpression(Token token, IdentifierContext context) {
     seen(token);
     doPrint('handleSuperExpression(' '$token, ' '$context)');
   }
 
+  @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     seen(firstToken);
     doPrint(
@@ -2057,6 +2336,7 @@
     indent++;
   }
 
+  @override
   void endSwitchCase(
       int labelCount,
       int expressionCount,
@@ -2080,63 +2360,75 @@
         '$endToken)');
   }
 
+  @override
   void handleThisExpression(Token token, IdentifierContext context) {
     seen(token);
     doPrint('handleThisExpression(' '$token, ' '$context)');
   }
 
+  @override
   void handleUnaryPostfixAssignmentExpression(Token token) {
     seen(token);
     doPrint('handleUnaryPostfixAssignmentExpression(' '$token)');
   }
 
+  @override
   void handleUnaryPrefixExpression(Token token) {
     seen(token);
     doPrint('handleUnaryPrefixExpression(' '$token)');
   }
 
+  @override
   void handleUnaryPrefixAssignmentExpression(Token token) {
     seen(token);
     doPrint('handleUnaryPrefixAssignmentExpression(' '$token)');
   }
 
+  @override
   void beginFormalParameterDefaultValueExpression() {
     doPrint('beginFormalParameterDefaultValueExpression()');
     indent++;
   }
 
+  @override
   void endFormalParameterDefaultValueExpression() {
     indent--;
     doPrint('endFormalParameterDefaultValueExpression()');
   }
 
+  @override
   void handleValuedFormalParameter(Token equals, Token token) {
     seen(equals);
     seen(token);
     doPrint('handleValuedFormalParameter(' '$equals, ' '$token)');
   }
 
+  @override
   void handleFormalParameterWithoutValue(Token token) {
     seen(token);
     doPrint('handleFormalParameterWithoutValue(' '$token)');
   }
 
+  @override
   void handleVoidKeyword(Token token) {
     seen(token);
     doPrint('handleVoidKeyword(' '$token)');
   }
 
+  @override
   void handleVoidKeywordWithTypeArguments(Token token) {
     seen(token);
     doPrint('handleVoidKeywordWithTypeArguments(' '$token)');
   }
 
+  @override
   void beginYieldStatement(Token token) {
     seen(token);
     doPrint('beginYieldStatement(' '$token)');
     indent++;
   }
 
+  @override
   void endYieldStatement(Token yieldToken, Token? starToken, Token endToken) {
     indent--;
     seen(yieldToken);
@@ -2145,6 +2437,7 @@
     doPrint('endYieldStatement(' '$yieldToken, ' '$starToken, ' '$endToken)');
   }
 
+  @override
   void endInvalidYieldStatement(Token beginToken, Token? starToken,
       Token endToken, MessageCode errorCode) {
     indent--;
@@ -2158,6 +2451,7 @@
         '$errorCode)');
   }
 
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     seen(startToken);
@@ -2167,11 +2461,13 @@
     checkEof(endToken);
   }
 
+  @override
   void handleErrorToken(ErrorToken token) {
     doPrint('handleErrorToken(' '$token)');
     handleRecoverableError(token.assertionMessage, token, token);
   }
 
+  @override
   void handleUnescapeError(
       Message message, Token location, int stringOffset, int length) {
     seen(location);
@@ -2182,21 +2478,25 @@
         '$length)');
   }
 
+  @override
   void handleInvalidStatement(Token token, Message message) {
     seen(token);
     doPrint('handleInvalidStatement(' '$token, ' '$message)');
   }
 
+  @override
   void handleScript(Token token) {
     seen(token);
     doPrint('handleScript(' '$token)');
   }
 
+  @override
   void handleCommentReferenceText(String referenceSource, int referenceOffset) {
     doPrint(
         'handleCommentReferenceText(' '$referenceSource, ' '$referenceOffset)');
   }
 
+  @override
   void handleCommentReference(
       Token? newKeyword, Token? prefix, Token? period, Token token) {
     seen(newKeyword);
@@ -2210,15 +2510,18 @@
         '$token)');
   }
 
+  @override
   void handleNoCommentReference() {
     doPrint('handleNoCommentReference()');
   }
 
+  @override
   void handleTypeArgumentApplication(Token openAngleBracket) {
     seen(openAngleBracket);
     doPrint('handleTypeArgumentApplication(' '$openAngleBracket)');
   }
 
+  @override
   void handleNewAsIdentifier(Token token) {
     seen(token);
     doPrint('handleNewAsIdentifier(' '$token)');
diff --git a/pkg/front_end/test/parser_test_listener_creator.dart b/pkg/front_end/test/parser_test_listener_creator.dart
index 4ab6ba5..648b5e0 100644
--- a/pkg/front_end/test/parser_test_listener_creator.dart
+++ b/pkg/front_end/test/parser_test_listener_creator.dart
@@ -127,22 +127,27 @@
 
   ParserCreatorListener(this.out);
 
+  @override
   void beginClassDeclaration(Token begin, Token abstractToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     insideListenerClass = false;
   }
 
+  @override
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
       Token varFinalOrConst, Token getOrSet, Token name) {
     currentMethodName = name.lexeme;
   }
 
+  @override
   void endClassMethod(Token getOrSet, Token beginToken, Token beginParam,
       Token beginInitializers, Token endToken) {
     if (insideListenerClass) {
+      out.writeln("  @override");
       out.write("  ");
       Token token = beginToken;
       Token latestToken;
@@ -212,10 +217,12 @@
     latestSeenParameterTypeToken = null;
   }
 
+  @override
   void handleType(Token beginToken, Token questionMark) {
     latestSeenParameterTypeToken = beginToken.lexeme;
   }
 
+  @override
   void endFormalParameter(
       Token thisKeyword,
       Token periodAfterThis,
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index dad75c5..3ea2b0c 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -52,6 +52,7 @@
     sb.writeln(("  " * indent) + s + traceString);
   }
 
+  @override
   Uri? get uri {
     doPrint('uri()');
     indent++;
@@ -60,6 +61,7 @@
     return result;
   }
 
+  @override
   TokenStreamRewriter get rewriter {
     doPrint('rewriter()');
     indent++;
@@ -68,6 +70,7 @@
     return result;
   }
 
+  @override
   bool get inGenerator {
     doPrint('inGenerator()');
     indent++;
@@ -76,6 +79,7 @@
     return result;
   }
 
+  @override
   bool get inAsync {
     doPrint('inAsync()');
     indent++;
@@ -84,6 +88,7 @@
     return result;
   }
 
+  @override
   bool get inPlainSync {
     doPrint('inPlainSync()');
     indent++;
@@ -92,6 +97,7 @@
     return result;
   }
 
+  @override
   bool get isBreakAllowed {
     doPrint('isBreakAllowed()');
     indent++;
@@ -100,6 +106,7 @@
     return result;
   }
 
+  @override
   bool get isContinueAllowed {
     doPrint('isContinueAllowed()');
     indent++;
@@ -108,6 +115,7 @@
     return result;
   }
 
+  @override
   bool get isContinueWithLabelAllowed {
     doPrint('isContinueWithLabelAllowed()');
     indent++;
@@ -116,6 +124,7 @@
     return result;
   }
 
+  @override
   Token parseUnit(Token token) {
     doPrint('parseUnit(' '$token)');
     indent++;
@@ -124,6 +133,7 @@
     return result;
   }
 
+  @override
   Token parseDirectives(Token token) {
     doPrint('parseDirectives(' '$token)');
     indent++;
@@ -132,6 +142,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelDeclaration(Token token) {
     doPrint('parseTopLevelDeclaration(' '$token)');
     indent++;
@@ -140,6 +151,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelDeclarationImpl(
       Token token, DirectiveContext? directiveState) {
     doPrint('parseTopLevelDeclarationImpl(' '$token, ' '$directiveState)');
@@ -149,6 +161,7 @@
     return result;
   }
 
+  @override
   Token? parseClassDeclarationModifiers(Token start, Token keyword) {
     doPrint('parseClassDeclarationModifiers(' '$start, ' '$keyword)');
     indent++;
@@ -157,6 +170,7 @@
     return result;
   }
 
+  @override
   void parseTopLevelKeywordModifiers(Token start, Token keyword) {
     doPrint('parseTopLevelKeywordModifiers(' '$start, ' '$keyword)');
     indent++;
@@ -165,6 +179,7 @@
     return result;
   }
 
+  @override
   void reportTopLevelModifierError(Token modifier, Token afterModifiers) {
     doPrint('reportTopLevelModifierError(' '$modifier, ' '$afterModifiers)');
     indent++;
@@ -173,6 +188,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelKeywordDeclaration(
       Token start, Token keyword, DirectiveContext? directiveState) {
     doPrint('parseTopLevelKeywordDeclaration('
@@ -186,6 +202,7 @@
     return result;
   }
 
+  @override
   Token parseLibraryName(Token libraryKeyword) {
     doPrint('parseLibraryName(' '$libraryKeyword)');
     indent++;
@@ -194,6 +211,7 @@
     return result;
   }
 
+  @override
   Token parseImportPrefixOpt(Token token) {
     doPrint('parseImportPrefixOpt(' '$token)');
     indent++;
@@ -202,6 +220,7 @@
     return result;
   }
 
+  @override
   Token parseImport(Token importKeyword) {
     doPrint('parseImport(' '$importKeyword)');
     indent++;
@@ -210,6 +229,7 @@
     return result;
   }
 
+  @override
   Token parseImportRecovery(Token token) {
     doPrint('parseImportRecovery(' '$token)');
     indent++;
@@ -218,6 +238,7 @@
     return result;
   }
 
+  @override
   Token parseConditionalUriStar(Token token) {
     doPrint('parseConditionalUriStar(' '$token)');
     indent++;
@@ -226,6 +247,7 @@
     return result;
   }
 
+  @override
   Token parseConditionalUri(Token token) {
     doPrint('parseConditionalUri(' '$token)');
     indent++;
@@ -234,6 +256,7 @@
     return result;
   }
 
+  @override
   Token parseDottedName(Token token) {
     doPrint('parseDottedName(' '$token)');
     indent++;
@@ -242,6 +265,7 @@
     return result;
   }
 
+  @override
   Token parseExport(Token exportKeyword) {
     doPrint('parseExport(' '$exportKeyword)');
     indent++;
@@ -250,6 +274,7 @@
     return result;
   }
 
+  @override
   Token parseCombinatorStar(Token token) {
     doPrint('parseCombinatorStar(' '$token)');
     indent++;
@@ -258,6 +283,7 @@
     return result;
   }
 
+  @override
   Token parseHide(Token token) {
     doPrint('parseHide(' '$token)');
     indent++;
@@ -266,6 +292,7 @@
     return result;
   }
 
+  @override
   Token parseShow(Token token) {
     doPrint('parseShow(' '$token)');
     indent++;
@@ -274,6 +301,7 @@
     return result;
   }
 
+  @override
   Token parseIdentifierList(Token token) {
     doPrint('parseIdentifierList(' '$token)');
     indent++;
@@ -282,6 +310,7 @@
     return result;
   }
 
+  @override
   Token parseTypeList(Token token) {
     doPrint('parseTypeList(' '$token)');
     indent++;
@@ -290,6 +319,7 @@
     return result;
   }
 
+  @override
   Token parsePartOrPartOf(Token partKeyword, DirectiveContext? directiveState) {
     doPrint('parsePartOrPartOf(' '$partKeyword, ' '$directiveState)');
     indent++;
@@ -298,6 +328,7 @@
     return result;
   }
 
+  @override
   Token parsePart(Token partKeyword) {
     doPrint('parsePart(' '$partKeyword)');
     indent++;
@@ -306,6 +337,7 @@
     return result;
   }
 
+  @override
   Token parsePartOf(Token partKeyword) {
     doPrint('parsePartOf(' '$partKeyword)');
     indent++;
@@ -314,6 +346,7 @@
     return result;
   }
 
+  @override
   Token parseMetadataStar(Token token) {
     doPrint('parseMetadataStar(' '$token)');
     indent++;
@@ -322,6 +355,7 @@
     return result;
   }
 
+  @override
   Token parseMetadata(Token token) {
     doPrint('parseMetadata(' '$token)');
     indent++;
@@ -330,6 +364,7 @@
     return result;
   }
 
+  @override
   Token parseScript(Token token) {
     doPrint('parseScript(' '$token)');
     indent++;
@@ -338,6 +373,7 @@
     return result;
   }
 
+  @override
   Token parseTypedef(Token typedefKeyword) {
     doPrint('parseTypedef(' '$typedefKeyword)');
     indent++;
@@ -346,6 +382,7 @@
     return result;
   }
 
+  @override
   Token parseMixinApplicationRest(Token token) {
     doPrint('parseMixinApplicationRest(' '$token)');
     indent++;
@@ -354,6 +391,7 @@
     return result;
   }
 
+  @override
   Token parseWithClauseOpt(Token token) {
     doPrint('parseWithClauseOpt(' '$token)');
     indent++;
@@ -362,6 +400,7 @@
     return result;
   }
 
+  @override
   Token parseGetterOrFormalParameters(
       Token token, Token name, bool isGetter, MemberKind kind) {
     doPrint('parseGetterOrFormalParameters('
@@ -376,6 +415,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParametersOpt(Token token, MemberKind kind) {
     doPrint('parseFormalParametersOpt(' '$token, ' '$kind)');
     indent++;
@@ -384,6 +424,7 @@
     return result;
   }
 
+  @override
   Token skipFormalParameters(Token token, MemberKind kind) {
     doPrint('skipFormalParameters(' '$token, ' '$kind)');
     indent++;
@@ -392,6 +433,7 @@
     return result;
   }
 
+  @override
   Token skipFormalParametersRest(Token token, MemberKind kind) {
     doPrint('skipFormalParametersRest(' '$token, ' '$kind)');
     indent++;
@@ -400,6 +442,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParametersRequiredOpt(Token token, MemberKind kind) {
     doPrint('parseFormalParametersRequiredOpt(' '$token, ' '$kind)');
     indent++;
@@ -408,6 +451,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParameters(Token token, MemberKind kind) {
     doPrint('parseFormalParameters(' '$token, ' '$kind)');
     indent++;
@@ -416,6 +460,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParametersRest(Token token, MemberKind kind) {
     doPrint('parseFormalParametersRest(' '$token, ' '$kind)');
     indent++;
@@ -424,6 +469,7 @@
     return result;
   }
 
+  @override
   codes.Message missingParameterMessage(MemberKind kind) {
     doPrint('missingParameterMessage(' '$kind)');
     indent++;
@@ -432,6 +478,7 @@
     return result;
   }
 
+  @override
   Token parseFormalParameter(
       Token token, FormalParameterKind parameterKind, MemberKind memberKind) {
     doPrint(
@@ -442,6 +489,7 @@
     return result;
   }
 
+  @override
   Token parseOptionalPositionalParameters(Token token, MemberKind kind) {
     doPrint('parseOptionalPositionalParameters(' '$token, ' '$kind)');
     indent++;
@@ -450,6 +498,7 @@
     return result;
   }
 
+  @override
   Token parseOptionalNamedParameters(Token token, MemberKind kind) {
     doPrint('parseOptionalNamedParameters(' '$token, ' '$kind)');
     indent++;
@@ -458,6 +507,7 @@
     return result;
   }
 
+  @override
   Token parseQualified(Token token, IdentifierContext context,
       IdentifierContext continuationContext) {
     doPrint('parseQualified(' '$token, ' '$context, ' '$continuationContext)');
@@ -467,6 +517,7 @@
     return result;
   }
 
+  @override
   Token parseQualifiedRestOpt(
       Token token, IdentifierContext continuationContext) {
     doPrint('parseQualifiedRestOpt(' '$token, ' '$continuationContext)');
@@ -476,6 +527,7 @@
     return result;
   }
 
+  @override
   Token parseQualifiedRest(Token token, IdentifierContext context) {
     doPrint('parseQualifiedRest(' '$token, ' '$context)');
     indent++;
@@ -484,6 +536,7 @@
     return result;
   }
 
+  @override
   Token skipBlock(Token token) {
     doPrint('skipBlock(' '$token)');
     indent++;
@@ -492,6 +545,7 @@
     return result;
   }
 
+  @override
   Token parseEnum(Token enumKeyword) {
     doPrint('parseEnum(' '$enumKeyword)');
     indent++;
@@ -500,6 +554,7 @@
     return result;
   }
 
+  @override
   Token parseClassOrNamedMixinApplication(
       Token? abstractToken, Token classKeyword) {
     doPrint('parseClassOrNamedMixinApplication('
@@ -512,6 +567,7 @@
     return result;
   }
 
+  @override
   Token parseNamedMixinApplication(
       Token token, Token begin, Token classKeyword) {
     doPrint(
@@ -522,6 +578,7 @@
     return result;
   }
 
+  @override
   Token parseClass(
       Token token, Token begin, Token classKeyword, String className) {
     doPrint(
@@ -532,6 +589,7 @@
     return result;
   }
 
+  @override
   Token parseClassHeaderOpt(Token token, Token begin, Token classKeyword) {
     doPrint('parseClassHeaderOpt(' '$token, ' '$begin, ' '$classKeyword)');
     indent++;
@@ -540,6 +598,7 @@
     return result;
   }
 
+  @override
   Token parseClassHeaderRecovery(Token token, Token begin, Token classKeyword) {
     doPrint('parseClassHeaderRecovery(' '$token, ' '$begin, ' '$classKeyword)');
     indent++;
@@ -548,6 +607,7 @@
     return result;
   }
 
+  @override
   Token parseClassExtendsOpt(Token token) {
     doPrint('parseClassExtendsOpt(' '$token)');
     indent++;
@@ -556,6 +616,7 @@
     return result;
   }
 
+  @override
   Token parseClassExtendsSeenExtendsClause(Token extendsKeyword, Token token) {
     doPrint(
         'parseClassExtendsSeenExtendsClause(' '$extendsKeyword, ' '$token)');
@@ -566,6 +627,7 @@
     return result;
   }
 
+  @override
   Token parseClassOrMixinImplementsOpt(Token token) {
     doPrint('parseClassOrMixinImplementsOpt(' '$token)');
     indent++;
@@ -574,6 +636,7 @@
     return result;
   }
 
+  @override
   Token parseMixin(Token mixinKeyword) {
     doPrint('parseMixin(' '$mixinKeyword)');
     indent++;
@@ -582,6 +645,7 @@
     return result;
   }
 
+  @override
   Token parseMixinHeaderOpt(Token token, Token mixinKeyword) {
     doPrint('parseMixinHeaderOpt(' '$token, ' '$mixinKeyword)');
     indent++;
@@ -590,6 +654,7 @@
     return result;
   }
 
+  @override
   Token parseMixinHeaderRecovery(
       Token token, Token mixinKeyword, Token headerStart) {
     doPrint('parseMixinHeaderRecovery('
@@ -603,6 +668,7 @@
     return result;
   }
 
+  @override
   Token parseMixinOnOpt(Token token) {
     doPrint('parseMixinOnOpt(' '$token)');
     indent++;
@@ -611,6 +677,7 @@
     return result;
   }
 
+  @override
   Token parseMixinOn(Token token) {
     doPrint('parseMixinOn(' '$token)');
     indent++;
@@ -619,6 +686,7 @@
     return result;
   }
 
+  @override
   Token parseExtension(Token extensionKeyword) {
     doPrint('parseExtension(' '$extensionKeyword)');
     indent++;
@@ -627,6 +695,7 @@
     return result;
   }
 
+  @override
   Token parseStringPart(Token token) {
     doPrint('parseStringPart(' '$token)');
     indent++;
@@ -635,6 +704,7 @@
     return result;
   }
 
+  @override
   Token insertSyntheticIdentifier(Token token, IdentifierContext context,
       {codes.Message? message, Token? messageOnToken}) {
     doPrint('insertSyntheticIdentifier('
@@ -649,6 +719,7 @@
     return result;
   }
 
+  @override
   Token ensureIdentifier(Token token, IdentifierContext context) {
     doPrint('ensureIdentifier(' '$token, ' '$context)');
     indent++;
@@ -657,6 +728,7 @@
     return result;
   }
 
+  @override
   bool isNextIdentifier(Token token) {
     doPrint('isNextIdentifier(' '$token)');
     indent++;
@@ -665,6 +737,7 @@
     return result;
   }
 
+  @override
   Token ensureIdentifierPotentiallyRecovered(
       Token token, IdentifierContext context, bool isRecovered) {
     doPrint('ensureIdentifierPotentiallyRecovered('
@@ -678,6 +751,7 @@
     return result;
   }
 
+  @override
   bool notEofOrValue(String value, Token token) {
     doPrint('notEofOrValue(' '$value, ' '$token)');
     indent++;
@@ -686,6 +760,7 @@
     return result;
   }
 
+  @override
   Token parseTypeVariablesOpt(Token token) {
     doPrint('parseTypeVariablesOpt(' '$token)');
     indent++;
@@ -694,6 +769,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelMember(Token token) {
     doPrint('parseTopLevelMember(' '$token)');
     indent++;
@@ -702,6 +778,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelMemberImpl(Token token) {
     doPrint('parseTopLevelMemberImpl(' '$token)');
     indent++;
@@ -710,6 +787,7 @@
     return result;
   }
 
+  @override
   Token parseFields(
       Token beforeStart,
       Token? abstractToken,
@@ -757,6 +835,7 @@
     return result;
   }
 
+  @override
   Token parseTopLevelMethod(
       Token beforeStart,
       Token? externalToken,
@@ -780,6 +859,7 @@
     return result;
   }
 
+  @override
   Token parseMethodTypeVar(Token name) {
     doPrint('parseMethodTypeVar(' '$name)');
     indent++;
@@ -788,6 +868,7 @@
     return result;
   }
 
+  @override
   Token parseFieldInitializerOpt(
       Token token,
       Token name,
@@ -820,6 +901,7 @@
     return result;
   }
 
+  @override
   Token parseVariableInitializerOpt(Token token) {
     doPrint('parseVariableInitializerOpt(' '$token)');
     indent++;
@@ -828,6 +910,7 @@
     return result;
   }
 
+  @override
   Token parseInitializersOpt(Token token) {
     doPrint('parseInitializersOpt(' '$token)');
     indent++;
@@ -836,6 +919,7 @@
     return result;
   }
 
+  @override
   Token parseInitializers(Token token) {
     doPrint('parseInitializers(' '$token)');
     indent++;
@@ -844,6 +928,7 @@
     return result;
   }
 
+  @override
   Token parseInitializer(Token token) {
     doPrint('parseInitializer(' '$token)');
     indent++;
@@ -852,6 +937,7 @@
     return result;
   }
 
+  @override
   Token parseSuperInitializerExpression(final Token start) {
     doPrint('parseSuperInitializerExpression(' '$start)');
     indent++;
@@ -860,6 +946,7 @@
     return result;
   }
 
+  @override
   Token parseInitializerExpressionRest(Token token) {
     doPrint('parseInitializerExpressionRest(' '$token)');
     indent++;
@@ -868,6 +955,7 @@
     return result;
   }
 
+  @override
   Token ensureBlock(
       Token token,
       codes.Template<codes.Message Function(Token token)>? template,
@@ -879,6 +967,7 @@
     return result;
   }
 
+  @override
   Token insertBlock(Token token) {
     doPrint('insertBlock(' '$token)');
     indent++;
@@ -887,6 +976,7 @@
     return result;
   }
 
+  @override
   Token ensureCloseParen(Token token, Token openParen) {
     doPrint('ensureCloseParen(' '$token, ' '$openParen)');
     indent++;
@@ -895,6 +985,7 @@
     return result;
   }
 
+  @override
   Token ensureColon(Token token) {
     doPrint('ensureColon(' '$token)');
     indent++;
@@ -903,6 +994,7 @@
     return result;
   }
 
+  @override
   Token ensureLiteralString(Token token) {
     doPrint('ensureLiteralString(' '$token)');
     indent++;
@@ -911,6 +1003,7 @@
     return result;
   }
 
+  @override
   Token ensureSemicolon(Token token) {
     doPrint('ensureSemicolon(' '$token)');
     indent++;
@@ -919,6 +1012,7 @@
     return result;
   }
 
+  @override
   Token rewriteAndRecover(Token token, codes.Message message, Token newToken) {
     doPrint('rewriteAndRecover(' '$token, ' '$message, ' '$newToken)');
     indent++;
@@ -927,6 +1021,7 @@
     return result;
   }
 
+  @override
   Token rewriteSquareBrackets(Token token) {
     doPrint('rewriteSquareBrackets(' '$token)');
     indent++;
@@ -935,6 +1030,7 @@
     return result;
   }
 
+  @override
   Token skipUnexpectedTokenOpt(Token token, List<String> expectedNext) {
     doPrint('skipUnexpectedTokenOpt(' '$token, ' '$expectedNext)');
     indent++;
@@ -943,6 +1039,7 @@
     return result;
   }
 
+  @override
   Token parseNativeClause(Token token) {
     doPrint('parseNativeClause(' '$token)');
     indent++;
@@ -951,6 +1048,7 @@
     return result;
   }
 
+  @override
   Token skipClassOrMixinOrExtensionBody(Token token) {
     doPrint('skipClassOrMixinOrExtensionBody(' '$token)');
     indent++;
@@ -959,6 +1057,7 @@
     return result;
   }
 
+  @override
   Token parseClassOrMixinOrExtensionBody(
       Token token, DeclarationKind kind, String? enclosingDeclarationName) {
     doPrint('parseClassOrMixinOrExtensionBody('
@@ -972,6 +1071,7 @@
     return result;
   }
 
+  @override
   bool isUnaryMinus(Token token) {
     doPrint('isUnaryMinus(' '$token)');
     indent++;
@@ -980,6 +1080,7 @@
     return result;
   }
 
+  @override
   Token parseClassMember(Token token, String? className) {
     doPrint('parseClassMember(' '$token, ' '$className)');
     indent++;
@@ -988,6 +1089,7 @@
     return result;
   }
 
+  @override
   Token parseMixinMember(Token token, String mixinName) {
     doPrint('parseMixinMember(' '$token, ' '$mixinName)');
     indent++;
@@ -996,6 +1098,7 @@
     return result;
   }
 
+  @override
   Token parseExtensionMember(Token token, String extensionName) {
     doPrint('parseExtensionMember(' '$token, ' '$extensionName)');
     indent++;
@@ -1004,6 +1107,7 @@
     return result;
   }
 
+  @override
   bool isReservedKeyword(Token token) {
     doPrint('isReservedKeyword(' '$token)');
     indent++;
@@ -1012,6 +1116,7 @@
     return result;
   }
 
+  @override
   bool indicatesMethodOrField(Token token) {
     doPrint('indicatesMethodOrField(' '$token)');
     indent++;
@@ -1020,6 +1125,7 @@
     return result;
   }
 
+  @override
   Token parseClassOrMixinOrExtensionMemberImpl(
       Token token, DeclarationKind kind, String? enclosingDeclarationName) {
     doPrint('parseClassOrMixinOrExtensionMemberImpl('
@@ -1033,6 +1139,7 @@
     return result;
   }
 
+  @override
   Token parseMethod(
       Token beforeStart,
       Token? abstractToken,
@@ -1083,6 +1190,7 @@
     return result;
   }
 
+  @override
   Token parseFactoryMethod(Token token, DeclarationKind kind, Token beforeStart,
       Token? externalToken, Token? staticOrCovariant, Token? varFinalOrConst) {
     doPrint('parseFactoryMethod('
@@ -1099,6 +1207,7 @@
     return result;
   }
 
+  @override
   Token parseOperatorName(Token token) {
     doPrint('parseOperatorName(' '$token)');
     indent++;
@@ -1107,6 +1216,7 @@
     return result;
   }
 
+  @override
   Token parseFunctionExpression(Token token) {
     doPrint('parseFunctionExpression(' '$token)');
     indent++;
@@ -1115,6 +1225,7 @@
     return result;
   }
 
+  @override
   Token parseFunctionLiteral(
       Token start,
       Token beforeName,
@@ -1136,6 +1247,7 @@
     return result;
   }
 
+  @override
   Token parseNamedFunctionRest(
       Token beforeName, Token begin, Token formals, bool isFunctionExpression) {
     doPrint('parseNamedFunctionRest('
@@ -1150,6 +1262,7 @@
     return result;
   }
 
+  @override
   Token parseAsyncOptBody(
       Token token, bool ofFunctionExpression, bool allowAbstract) {
     doPrint('parseAsyncOptBody('
@@ -1163,6 +1276,7 @@
     return result;
   }
 
+  @override
   Token parseConstructorReference(
       Token token, ConstructorReferenceContext constructorReferenceContext,
       [TypeParamOrArgInfo? typeArg]) {
@@ -1177,6 +1291,7 @@
     return result;
   }
 
+  @override
   Token parseRedirectingFactoryBody(Token token) {
     doPrint('parseRedirectingFactoryBody(' '$token)');
     indent++;
@@ -1185,6 +1300,7 @@
     return result;
   }
 
+  @override
   Token skipFunctionBody(Token token, bool isExpression, bool allowAbstract) {
     doPrint('skipFunctionBody(' '$token, ' '$isExpression, ' '$allowAbstract)');
     indent++;
@@ -1193,6 +1309,7 @@
     return result;
   }
 
+  @override
   Token parseFunctionBody(
       Token token, bool ofFunctionExpression, bool allowAbstract) {
     doPrint('parseFunctionBody('
@@ -1206,6 +1323,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionFunctionBody(Token token, bool ofFunctionExpression) {
     doPrint('parseExpressionFunctionBody(' '$token, ' '$ofFunctionExpression)');
     indent++;
@@ -1214,6 +1332,7 @@
     return result;
   }
 
+  @override
   Token skipAsyncModifier(Token token) {
     doPrint('skipAsyncModifier(' '$token)');
     indent++;
@@ -1222,6 +1341,7 @@
     return result;
   }
 
+  @override
   Token parseAsyncModifierOpt(Token token) {
     doPrint('parseAsyncModifierOpt(' '$token)');
     indent++;
@@ -1230,6 +1350,7 @@
     return result;
   }
 
+  @override
   Token parseStatement(Token token) {
     doPrint('parseStatement(' '$token)');
     indent++;
@@ -1238,6 +1359,7 @@
     return result;
   }
 
+  @override
   Token parseStatementX(Token token) {
     doPrint('parseStatementX(' '$token)');
     indent++;
@@ -1246,6 +1368,7 @@
     return result;
   }
 
+  @override
   Token parseYieldStatement(Token token) {
     doPrint('parseYieldStatement(' '$token)');
     indent++;
@@ -1254,6 +1377,7 @@
     return result;
   }
 
+  @override
   Token parseReturnStatement(Token token) {
     doPrint('parseReturnStatement(' '$token)');
     indent++;
@@ -1262,6 +1386,7 @@
     return result;
   }
 
+  @override
   Token parseLabel(Token token) {
     doPrint('parseLabel(' '$token)');
     indent++;
@@ -1270,6 +1395,7 @@
     return result;
   }
 
+  @override
   Token parseLabeledStatement(Token token) {
     doPrint('parseLabeledStatement(' '$token)');
     indent++;
@@ -1278,6 +1404,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionStatement(Token token) {
     doPrint('parseExpressionStatement(' '$token)');
     indent++;
@@ -1286,6 +1413,7 @@
     return result;
   }
 
+  @override
   Token parseExpression(Token token) {
     doPrint('parseExpression(' '$token)');
     indent++;
@@ -1294,6 +1422,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionWithoutCascade(Token token) {
     doPrint('parseExpressionWithoutCascade(' '$token)');
     indent++;
@@ -1302,6 +1431,7 @@
     return result;
   }
 
+  @override
   bool canParseAsConditional(Token question) {
     doPrint('canParseAsConditional(' '$question)');
     indent++;
@@ -1310,6 +1440,7 @@
     return result;
   }
 
+  @override
   Token parseConditionalExpressionRest(Token token) {
     doPrint('parseConditionalExpressionRest(' '$token)');
     indent++;
@@ -1318,6 +1449,7 @@
     return result;
   }
 
+  @override
   Token parsePrecedenceExpression(
       Token token, int precedence, bool allowCascades) {
     doPrint('parsePrecedenceExpression('
@@ -1331,6 +1463,7 @@
     return result;
   }
 
+  @override
   Token parseCascadeExpression(Token token) {
     doPrint('parseCascadeExpression(' '$token)');
     indent++;
@@ -1339,6 +1472,7 @@
     return result;
   }
 
+  @override
   Token parseUnaryExpression(Token token, bool allowCascades) {
     doPrint('parseUnaryExpression(' '$token, ' '$allowCascades)');
     indent++;
@@ -1347,6 +1481,7 @@
     return result;
   }
 
+  @override
   Token parseArgumentOrIndexStar(
       Token token, TypeParamOrArgInfo typeArg, bool checkedNullAware) {
     doPrint('parseArgumentOrIndexStar('
@@ -1360,6 +1495,7 @@
     return result;
   }
 
+  @override
   Token parsePrimary(Token token, IdentifierContext context) {
     doPrint('parsePrimary(' '$token, ' '$context)');
     indent++;
@@ -1368,6 +1504,7 @@
     return result;
   }
 
+  @override
   Token parseParenthesizedExpressionOrFunctionLiteral(Token token) {
     doPrint('parseParenthesizedExpressionOrFunctionLiteral(' '$token)');
     indent++;
@@ -1376,6 +1513,7 @@
     return result;
   }
 
+  @override
   Token ensureParenthesizedCondition(Token token) {
     doPrint('ensureParenthesizedCondition(' '$token)');
     indent++;
@@ -1384,6 +1522,7 @@
     return result;
   }
 
+  @override
   Token parseParenthesizedExpression(Token token) {
     doPrint('parseParenthesizedExpression(' '$token)');
     indent++;
@@ -1392,6 +1531,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionInParenthesis(Token token) {
     doPrint('parseExpressionInParenthesis(' '$token)');
     indent++;
@@ -1400,6 +1540,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionInParenthesisRest(Token token) {
     doPrint('parseExpressionInParenthesisRest(' '$token)');
     indent++;
@@ -1408,6 +1549,7 @@
     return result;
   }
 
+  @override
   Token parseThisExpression(Token token, IdentifierContext context) {
     doPrint('parseThisExpression(' '$token, ' '$context)');
     indent++;
@@ -1416,6 +1558,7 @@
     return result;
   }
 
+  @override
   Token parseSuperExpression(Token token, IdentifierContext context) {
     doPrint('parseSuperExpression(' '$token, ' '$context)');
     indent++;
@@ -1424,6 +1567,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralListSuffix(Token token, Token? constKeyword) {
     doPrint('parseLiteralListSuffix(' '$token, ' '$constKeyword)');
     indent++;
@@ -1432,6 +1576,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralSetOrMapSuffix(Token token, Token? constKeyword) {
     doPrint('parseLiteralSetOrMapSuffix(' '$token, ' '$constKeyword)');
     indent++;
@@ -1440,6 +1585,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralFunctionSuffix(Token token) {
     doPrint('parseLiteralFunctionSuffix(' '$token)');
     indent++;
@@ -1448,6 +1594,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralListSetMapOrFunction(
       final Token start, Token? constKeyword) {
     doPrint('parseLiteralListSetMapOrFunction(' '$start, ' '$constKeyword)');
@@ -1457,6 +1604,7 @@
     return result;
   }
 
+  @override
   Token parseMapLiteralEntry(Token token) {
     doPrint('parseMapLiteralEntry(' '$token)');
     indent++;
@@ -1465,6 +1613,7 @@
     return result;
   }
 
+  @override
   Token parseSendOrFunctionLiteral(Token token, IdentifierContext context) {
     doPrint('parseSendOrFunctionLiteral(' '$token, ' '$context)');
     indent++;
@@ -1473,6 +1622,7 @@
     return result;
   }
 
+  @override
   Token ensureArguments(Token token) {
     doPrint('ensureArguments(' '$token)');
     indent++;
@@ -1481,6 +1631,7 @@
     return result;
   }
 
+  @override
   Token parseConstructorInvocationArguments(Token token) {
     doPrint('parseConstructorInvocationArguments(' '$token)');
     indent++;
@@ -1489,6 +1640,7 @@
     return result;
   }
 
+  @override
   Token parseNewExpression(Token token) {
     doPrint('parseNewExpression(' '$token)');
     indent++;
@@ -1497,6 +1649,7 @@
     return result;
   }
 
+  @override
   Token parseImplicitCreationExpression(
       Token token, TypeParamOrArgInfo typeArg) {
     doPrint('parseImplicitCreationExpression(' '$token, ' '$typeArg)');
@@ -1506,6 +1659,7 @@
     return result;
   }
 
+  @override
   Token parseConstExpression(Token token) {
     doPrint('parseConstExpression(' '$token)');
     indent++;
@@ -1514,6 +1668,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralInt(Token token) {
     doPrint('parseLiteralInt(' '$token)');
     indent++;
@@ -1522,6 +1677,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralDouble(Token token) {
     doPrint('parseLiteralDouble(' '$token)');
     indent++;
@@ -1530,6 +1686,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralString(Token token) {
     doPrint('parseLiteralString(' '$token)');
     indent++;
@@ -1538,6 +1695,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralSymbol(Token token) {
     doPrint('parseLiteralSymbol(' '$token)');
     indent++;
@@ -1546,6 +1704,7 @@
     return result;
   }
 
+  @override
   Token parseSingleLiteralString(Token token) {
     doPrint('parseSingleLiteralString(' '$token)');
     indent++;
@@ -1554,6 +1713,7 @@
     return result;
   }
 
+  @override
   Token parseIdentifierExpression(Token token) {
     doPrint('parseIdentifierExpression(' '$token)');
     indent++;
@@ -1562,6 +1722,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralBool(Token token) {
     doPrint('parseLiteralBool(' '$token)');
     indent++;
@@ -1570,6 +1731,7 @@
     return result;
   }
 
+  @override
   Token parseLiteralNull(Token token) {
     doPrint('parseLiteralNull(' '$token)');
     indent++;
@@ -1578,6 +1740,7 @@
     return result;
   }
 
+  @override
   Token parseSend(Token token, IdentifierContext context) {
     doPrint('parseSend(' '$token, ' '$context)');
     indent++;
@@ -1586,6 +1749,7 @@
     return result;
   }
 
+  @override
   Token skipArgumentsOpt(Token token) {
     doPrint('skipArgumentsOpt(' '$token)');
     indent++;
@@ -1594,6 +1758,7 @@
     return result;
   }
 
+  @override
   Token parseArgumentsOpt(Token token) {
     doPrint('parseArgumentsOpt(' '$token)');
     indent++;
@@ -1602,6 +1767,7 @@
     return result;
   }
 
+  @override
   Token parseArguments(Token token) {
     doPrint('parseArguments(' '$token)');
     indent++;
@@ -1610,6 +1776,7 @@
     return result;
   }
 
+  @override
   Token parseArgumentsRest(Token token) {
     doPrint('parseArgumentsRest(' '$token)');
     indent++;
@@ -1618,6 +1785,7 @@
     return result;
   }
 
+  @override
   Token parseIsOperatorRest(Token token) {
     doPrint('parseIsOperatorRest(' '$token)');
     indent++;
@@ -1626,6 +1794,7 @@
     return result;
   }
 
+  @override
   TypeInfo computeTypeAfterIsOrAs(Token token) {
     doPrint('computeTypeAfterIsOrAs(' '$token)');
     indent++;
@@ -1634,6 +1803,7 @@
     return result;
   }
 
+  @override
   Token parseAsOperatorRest(Token token) {
     doPrint('parseAsOperatorRest(' '$token)');
     indent++;
@@ -1642,6 +1812,7 @@
     return result;
   }
 
+  @override
   Token skipChainedAsIsOperators(Token token) {
     doPrint('skipChainedAsIsOperators(' '$token)');
     indent++;
@@ -1650,6 +1821,7 @@
     return result;
   }
 
+  @override
   bool looksLikeLocalFunction(Token token) {
     doPrint('looksLikeLocalFunction(' '$token)');
     indent++;
@@ -1658,6 +1830,7 @@
     return result;
   }
 
+  @override
   bool looksLikeFunctionBody(Token token) {
     doPrint('looksLikeFunctionBody(' '$token)');
     indent++;
@@ -1666,6 +1839,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionStatementOrConstDeclaration(final Token start) {
     doPrint('parseExpressionStatementOrConstDeclaration(' '$start)');
     indent++;
@@ -1674,6 +1848,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionStatementOrDeclaration(final Token start,
       [bool onlyParseVariableDeclarationStart = false]) {
     doPrint('parseExpressionStatementOrDeclaration('
@@ -1686,6 +1861,7 @@
     return result;
   }
 
+  @override
   Token parseExpressionStatementOrDeclarationAfterModifiers(
       Token beforeType,
       Token start,
@@ -1712,6 +1888,7 @@
     return result;
   }
 
+  @override
   Token parseVariablesDeclarationRest(Token token, bool endWithSemicolon) {
     doPrint('parseVariablesDeclarationRest(' '$token, ' '$endWithSemicolon)');
     indent++;
@@ -1720,6 +1897,7 @@
     return result;
   }
 
+  @override
   Token parseOptionallyInitializedIdentifier(Token token) {
     doPrint('parseOptionallyInitializedIdentifier(' '$token)');
     indent++;
@@ -1728,6 +1906,7 @@
     return result;
   }
 
+  @override
   Token parseIfStatement(Token token) {
     doPrint('parseIfStatement(' '$token)');
     indent++;
@@ -1736,6 +1915,7 @@
     return result;
   }
 
+  @override
   Token parseForStatement(Token token, Token? awaitToken) {
     doPrint('parseForStatement(' '$token, ' '$awaitToken)');
     indent++;
@@ -1744,6 +1924,7 @@
     return result;
   }
 
+  @override
   Token parseForLoopPartsStart(Token? awaitToken, Token forToken) {
     doPrint('parseForLoopPartsStart(' '$awaitToken, ' '$forToken)');
     indent++;
@@ -1752,6 +1933,7 @@
     return result;
   }
 
+  @override
   Token parseForLoopPartsMid(Token token, Token? awaitToken, Token forToken) {
     doPrint('parseForLoopPartsMid(' '$token, ' '$awaitToken, ' '$forToken)');
     indent++;
@@ -1760,6 +1942,7 @@
     return result;
   }
 
+  @override
   Token parseForRest(Token? awaitToken, Token token, Token forToken) {
     doPrint('parseForRest(' '$awaitToken, ' '$token, ' '$forToken)');
     indent++;
@@ -1768,6 +1951,7 @@
     return result;
   }
 
+  @override
   Token parseForLoopPartsRest(Token token, Token forToken, Token? awaitToken) {
     doPrint('parseForLoopPartsRest(' '$token, ' '$forToken, ' '$awaitToken)');
     indent++;
@@ -1776,6 +1960,7 @@
     return result;
   }
 
+  @override
   Token parseForInRest(
       Token token, Token? awaitToken, Token forToken, Token identifier) {
     doPrint('parseForInRest('
@@ -1789,6 +1974,7 @@
     return result;
   }
 
+  @override
   Token parseForInLoopPartsRest(
       Token token, Token? awaitToken, Token forToken, Token identifier) {
     doPrint('parseForInLoopPartsRest('
@@ -1803,6 +1989,7 @@
     return result;
   }
 
+  @override
   Token parseWhileStatement(Token token) {
     doPrint('parseWhileStatement(' '$token)');
     indent++;
@@ -1811,6 +1998,7 @@
     return result;
   }
 
+  @override
   Token parseDoWhileStatement(Token token) {
     doPrint('parseDoWhileStatement(' '$token)');
     indent++;
@@ -1819,6 +2007,7 @@
     return result;
   }
 
+  @override
   Token parseBlock(Token token, BlockKind blockKind) {
     doPrint('parseBlock(' '$token, ' '$blockKind)');
     indent++;
@@ -1827,6 +2016,7 @@
     return result;
   }
 
+  @override
   Token parseInvalidBlock(Token token) {
     doPrint('parseInvalidBlock(' '$token)');
     indent++;
@@ -1835,6 +2025,7 @@
     return result;
   }
 
+  @override
   bool looksLikeExpression(Token token) {
     doPrint('looksLikeExpression(' '$token)');
     indent++;
@@ -1843,6 +2034,7 @@
     return result;
   }
 
+  @override
   bool looksLikeAwaitExpression(Token token) {
     doPrint('looksLikeAwaitExpression(' '$token)');
     indent++;
@@ -1851,6 +2043,7 @@
     return result;
   }
 
+  @override
   bool looksLikeYieldStatement(Token token) {
     doPrint('looksLikeYieldStatement(' '$token)');
     indent++;
@@ -1859,6 +2052,7 @@
     return result;
   }
 
+  @override
   Token parseAwaitExpression(Token token, bool allowCascades) {
     doPrint('parseAwaitExpression(' '$token, ' '$allowCascades)');
     indent++;
@@ -1867,6 +2061,7 @@
     return result;
   }
 
+  @override
   Token parseThrowExpression(Token token, bool allowCascades) {
     doPrint('parseThrowExpression(' '$token, ' '$allowCascades)');
     indent++;
@@ -1875,6 +2070,7 @@
     return result;
   }
 
+  @override
   Token parseRethrowStatement(Token token) {
     doPrint('parseRethrowStatement(' '$token)');
     indent++;
@@ -1883,6 +2079,7 @@
     return result;
   }
 
+  @override
   Token parseTryStatement(Token token) {
     doPrint('parseTryStatement(' '$token)');
     indent++;
@@ -1891,6 +2088,7 @@
     return result;
   }
 
+  @override
   Token parseSwitchStatement(Token token) {
     doPrint('parseSwitchStatement(' '$token)');
     indent++;
@@ -1899,6 +2097,7 @@
     return result;
   }
 
+  @override
   Token parseSwitchBlock(Token token) {
     doPrint('parseSwitchBlock(' '$token)');
     indent++;
@@ -1907,6 +2106,7 @@
     return result;
   }
 
+  @override
   Token peekPastLabels(Token token) {
     doPrint('peekPastLabels(' '$token)');
     indent++;
@@ -1915,6 +2115,7 @@
     return result;
   }
 
+  @override
   Token parseStatementsInSwitchCase(
       Token token,
       Token peek,
@@ -1938,6 +2139,7 @@
     return result;
   }
 
+  @override
   Token parseBreakStatement(Token token) {
     doPrint('parseBreakStatement(' '$token)');
     indent++;
@@ -1946,6 +2148,7 @@
     return result;
   }
 
+  @override
   Token parseAssert(Token token, Assert kind) {
     doPrint('parseAssert(' '$token, ' '$kind)');
     indent++;
@@ -1954,6 +2157,7 @@
     return result;
   }
 
+  @override
   Token parseAssertStatement(Token token) {
     doPrint('parseAssertStatement(' '$token)');
     indent++;
@@ -1962,6 +2166,7 @@
     return result;
   }
 
+  @override
   Token parseContinueStatement(Token token) {
     doPrint('parseContinueStatement(' '$token)');
     indent++;
@@ -1970,6 +2175,7 @@
     return result;
   }
 
+  @override
   Token parseEmptyStatement(Token token) {
     doPrint('parseEmptyStatement(' '$token)');
     indent++;
@@ -1978,6 +2184,7 @@
     return result;
   }
 
+  @override
   Token previousToken(Token beforeToken, Token token) {
     doPrint('previousToken(' '$beforeToken, ' '$token)');
     indent++;
@@ -1986,6 +2193,7 @@
     return result;
   }
 
+  @override
   Token parseInvalidOperatorDeclaration(
       Token beforeStart,
       Token? abstractToken,
@@ -2024,6 +2232,7 @@
     return result;
   }
 
+  @override
   Token recoverFromInvalidMember(
       Token token,
       Token beforeStart,
@@ -2071,6 +2280,7 @@
     return result;
   }
 
+  @override
   Token recoverFromStackOverflow(Token token) {
     doPrint('recoverFromStackOverflow(' '$token)');
     indent++;
@@ -2079,6 +2289,7 @@
     return result;
   }
 
+  @override
   void reportRecoverableError(Token token, codes.Message message) {
     doPrint('reportRecoverableError(' '$token, ' '$message)');
     indent++;
@@ -2087,6 +2298,7 @@
     return result;
   }
 
+  @override
   void reportRecoverableErrorWithEnd(
       Token startToken, Token endToken, codes.Message message) {
     doPrint('reportRecoverableErrorWithEnd('
@@ -2100,6 +2312,7 @@
     return result;
   }
 
+  @override
   void reportRecoverableErrorWithToken(Token token, dynamic template) {
     doPrint('reportRecoverableErrorWithToken(' '$token, ' '$template)');
     indent++;
@@ -2108,6 +2321,7 @@
     return result;
   }
 
+  @override
   Token reportAllErrorTokens(Token token) {
     doPrint('reportAllErrorTokens(' '$token)');
     indent++;
@@ -2116,6 +2330,7 @@
     return result;
   }
 
+  @override
   Token skipErrorTokens(Token token) {
     doPrint('skipErrorTokens(' '$token)');
     indent++;
@@ -2124,6 +2339,7 @@
     return result;
   }
 
+  @override
   Token parseInvalidTopLevelDeclaration(Token token) {
     doPrint('parseInvalidTopLevelDeclaration(' '$token)');
     indent++;
@@ -2132,6 +2348,7 @@
     return result;
   }
 
+  @override
   Token reportAndSkipClassInClass(Token token) {
     doPrint('reportAndSkipClassInClass(' '$token)');
     indent++;
@@ -2140,6 +2357,7 @@
     return result;
   }
 
+  @override
   Token reportAndSkipEnumInClass(Token token) {
     doPrint('reportAndSkipEnumInClass(' '$token)');
     indent++;
@@ -2148,6 +2366,7 @@
     return result;
   }
 
+  @override
   Token reportAndSkipTypedefInClass(Token token) {
     doPrint('reportAndSkipTypedefInClass(' '$token)');
     indent++;
@@ -2156,6 +2375,7 @@
     return result;
   }
 
+  @override
   Token link(BeginToken beginToken, Token endToken) {
     doPrint('link(' '$beginToken, ' '$endToken)');
     indent++;
@@ -2164,6 +2384,7 @@
     return result;
   }
 
+  @override
   Token syntheticPreviousToken(Token token) {
     doPrint('syntheticPreviousToken(' '$token)');
     indent++;
@@ -2172,6 +2393,7 @@
     return result;
   }
 
+  @override
   Token? findDartDoc(Token token) {
     doPrint('findDartDoc(' '$token)');
     indent++;
@@ -2180,6 +2402,7 @@
     return result;
   }
 
+  @override
   int parseCommentReferences(Token dartdoc) {
     doPrint('parseCommentReferences(' '$dartdoc)');
     indent++;
@@ -2188,6 +2411,7 @@
     return result;
   }
 
+  @override
   int parseReferencesInMultiLineComment(Token multiLineDoc) {
     doPrint('parseReferencesInMultiLineComment(' '$multiLineDoc)');
     indent++;
@@ -2196,6 +2420,7 @@
     return result;
   }
 
+  @override
   int parseReferencesInSingleLineComments(Token? token) {
     doPrint('parseReferencesInSingleLineComments(' '$token)');
     indent++;
@@ -2204,6 +2429,7 @@
     return result;
   }
 
+  @override
   int parseCommentReferencesInText(Token commentToken, int start, int end) {
     doPrint(
         'parseCommentReferencesInText(' '$commentToken, ' '$start, ' '$end)');
@@ -2213,6 +2439,7 @@
     return result;
   }
 
+  @override
   int findReferenceEnd(String comment, int index, int end) {
     doPrint('findReferenceEnd(' '$comment, ' '$index, ' '$end)');
     indent++;
@@ -2221,6 +2448,7 @@
     return result;
   }
 
+  @override
   bool parseOneCommentReference(Token token, int referenceOffset) {
     doPrint('parseOneCommentReference(' '$token, ' '$referenceOffset)');
     indent++;
@@ -2229,6 +2457,7 @@
     return result;
   }
 
+  @override
   void parseOneCommentReferenceRest(
       Token begin,
       int referenceOffset,
@@ -2250,6 +2479,7 @@
     return result;
   }
 
+  @override
   bool isLinkText(String comment, int rightIndex) {
     doPrint('isLinkText(' '$comment, ' '$rightIndex)');
     indent++;
diff --git a/pkg/front_end/test/parser_test_parser_creator.dart b/pkg/front_end/test/parser_test_parser_creator.dart
index e7a826f..0a4d4d7 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -112,19 +112,23 @@
 
   ParserCreatorListener(this.out);
 
+  @override
   void beginClassDeclaration(Token begin, Token abstractToken, Token name) {
     if (name.lexeme == "Parser") insideParserClass = true;
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     insideParserClass = false;
   }
 
+  @override
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
       Token varFinalOrConst, Token getOrSet, Token name) {
     currentMethodName = name.lexeme;
   }
 
+  @override
   void endClassConstructor(Token getOrSet, Token beginToken, Token beginParam,
       Token beginInitializers, Token endToken) {
     parameters.clear();
@@ -132,11 +136,13 @@
     currentMethodName = null;
   }
 
+  @override
   void endClassMethod(Token getOrSet, Token beginToken, Token beginParam,
       Token beginInitializers, Token endToken) {
     if (insideParserClass && !currentMethodName.startsWith("_")) {
       Token token = beginToken;
       Token latestToken;
+      out.writeln("  @override");
       out.write("  ");
       while (true) {
         if (troubleParameterTokens.containsKey(token)) {
@@ -221,10 +227,12 @@
   }
 
   int formalParametersNestLevel = 0;
+  @override
   void beginFormalParameters(Token token, MemberKind kind) {
     formalParametersNestLevel++;
   }
 
+  @override
   void endFormalParameters(
       int count, Token beginToken, Token endToken, MemberKind kind) {
     formalParametersNestLevel--;
@@ -232,6 +240,7 @@
 
   Token currentFormalParameterToken;
 
+  @override
   void beginFormalParameter(Token token, MemberKind kind, Token requiredToken,
       Token covariantToken, Token varFinalOrConst) {
     if (formalParametersNestLevel == 1) {
@@ -241,12 +250,14 @@
 
   Map<Token, Token> troubleParameterTokens = {};
 
+  @override
   void handleIdentifier(Token token, IdentifierContext context) {
     if (formalParametersNestLevel > 0 && token.lexeme.startsWith("_")) {
       troubleParameterTokens[currentFormalParameterToken] = null;
     }
   }
 
+  @override
   void endFormalParameter(
       Token thisKeyword,
       Token periodAfterThis,
diff --git a/pkg/front_end/test/predicates/predicate_test.dart b/pkg/front_end/test/predicates/predicate_test.dart
index 5d98cff..8398984 100644
--- a/pkg/front_end/test/predicates/predicate_test.dart
+++ b/pkg/front_end/test/predicates/predicate_test.dart
@@ -34,7 +34,7 @@
             explicitExperimentalFlags: const {
               ExperimentalFlag.nonNullable: true
             },
-            targetFlags: const TargetFlags(
+            targetFlags: const TestTargetFlags(
                 forceLateLoweringsForTesting: LateLowering.all,
                 forceLateLoweringSentinelForTesting: false),
             nnbdMode: NnbdMode.Strong),
@@ -42,7 +42,7 @@
             explicitExperimentalFlags: const {
               ExperimentalFlag.nonNullable: true
             },
-            targetFlags: const TargetFlags(
+            targetFlags: const TestTargetFlags(
                 forceLateLoweringsForTesting: LateLowering.all,
                 forceLateLoweringSentinelForTesting: true),
             nnbdMode: NnbdMode.Strong)
@@ -72,6 +72,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -160,6 +161,7 @@
     return null;
   }
 
+  @override
   void visitProcedure(Procedure node) {
     super.visitProcedure(node);
     nodeIdMap.forEach((String name, NodeId id) {
@@ -174,6 +176,7 @@
     featureMap.clear();
   }
 
+  @override
   void visitVariableDeclaration(VariableDeclaration node) {
     String name;
     String tag;
diff --git a/pkg/front_end/test/scanner_fasta_test.dart b/pkg/front_end/test/scanner_fasta_test.dart
index 7b59523..8f02119 100644
--- a/pkg/front_end/test/scanner_fasta_test.dart
+++ b/pkg/front_end/test/scanner_fasta_test.dart
@@ -742,6 +742,7 @@
 /// Scanner tests that exercise the Fasta scanner directly.
 @reflectiveTest
 class ScannerTest_Fasta_Direct_UTF8 extends ScannerTest_Fasta_Direct {
+  @override
   ScannerResult scanSource(source, {includeComments: true}) {
     List<int> encoded = utf8.encode(source).toList(growable: true);
     encoded.add(0); // Ensure 0 terminated bytes for UTF8 scanner
diff --git a/pkg/front_end/test/scanner_replacement_test.dart b/pkg/front_end/test/scanner_replacement_test.dart
index 0e90322..9666738 100644
--- a/pkg/front_end/test/scanner_replacement_test.dart
+++ b/pkg/front_end/test/scanner_replacement_test.dart
@@ -89,6 +89,7 @@
     expect(error.offset, source.length - 1);
   }
 
+  @override
   void test_lt() {
     // fasta does not automatically insert a closer for '<'
     // because it could be part of an expression rather than an opener
@@ -110,6 +111,7 @@
     _assertOpenClosePair('{ }');
   }
 
+  @override
   void test_open_paren() {
     _assertOpenOnly('(', ')');
   }
@@ -118,6 +120,7 @@
     _assertOpenClosePair('( )');
   }
 
+  @override
   void test_open_square_bracket() {
     _assertOpenOnly('[', ']');
   }
diff --git a/pkg/front_end/test/scheme_based_file_system_test.dart b/pkg/front_end/test/scheme_based_file_system_test.dart
index f5c018e..35ae1bf 100644
--- a/pkg/front_end/test/scheme_based_file_system_test.dart
+++ b/pkg/front_end/test/scheme_based_file_system_test.dart
@@ -44,9 +44,11 @@
 }
 
 class MockFileSystemEntity implements FileSystemEntity {
+  @override
   final Uri uri;
   final FileSystem fileSystem;
   MockFileSystemEntity(this.uri, this.fileSystem);
 
+  @override
   noSuchMethod(m) => super.noSuchMethod(m);
 }
diff --git a/pkg/front_end/test/simple_stats.dart b/pkg/front_end/test/simple_stats.dart
index 6ffd5c5..6a94bbe 100644
--- a/pkg/front_end/test/simple_stats.dart
+++ b/pkg/front_end/test/simple_stats.dart
@@ -105,6 +105,7 @@
   TTestResult(this.significant, this.percentDiff, this.percentDiffConfidence,
       this.diff, this.confidence);
 
+  @override
   String toString() {
     if (significant) {
       double leastConfidentChange;
diff --git a/pkg/front_end/test/spelling_test_base.dart b/pkg/front_end/test/spelling_test_base.dart
index a7dd236..fd1c94a 100644
--- a/pkg/front_end/test/spelling_test_base.dart
+++ b/pkg/front_end/test/spelling_test_base.dart
@@ -29,6 +29,7 @@
 import 'testing_utils.dart' show filterList;
 
 abstract class SpellContext extends ChainContext {
+  @override
   final List<Step> steps = const <Step>[
     const SpellTest(),
   ];
@@ -81,8 +82,10 @@
 class SpellTest extends Step<TestDescription, TestDescription, SpellContext> {
   const SpellTest();
 
+  @override
   String get name => "spell test";
 
+  @override
   Future<Result<TestDescription>> run(
       TestDescription description, SpellContext context) async {
     File f = new File.fromUri(description.uri);
diff --git a/pkg/front_end/test/spelling_test_external_targets.dart b/pkg/front_end/test/spelling_test_external_targets.dart
index 9bae907..0c48782 100644
--- a/pkg/front_end/test/spelling_test_external_targets.dart
+++ b/pkg/front_end/test/spelling_test_external_targets.dart
@@ -43,6 +43,7 @@
   String get repoRelativeSuitePath =>
       "pkg/front_end/test/spelling_test_external_targets.dart";
 
+  @override
   Stream<TestDescription> list(Chain suite) async* {
     for (String subdir in const ["pkg/", "sdk/"]) {
       Directory testRoot = new Directory.fromUri(suite.uri.resolve(subdir));
diff --git a/pkg/front_end/test/standard_file_system_test.dart b/pkg/front_end/test/standard_file_system_test.dart
index a7becd7..2e2d1eb 100644
--- a/pkg/front_end/test/standard_file_system_test.dart
+++ b/pkg/front_end/test/standard_file_system_test.dart
@@ -34,6 +34,7 @@
   String path;
   FileSystemEntity dir;
 
+  @override
   setUp() {
     super.setUp();
     path = p.join(tempPath, 'dir');
@@ -72,6 +73,7 @@
   String path;
   FileSystemEntity file;
 
+  @override
   setUp() {
     super.setUp();
     path = p.join(tempPath, 'file.txt');
@@ -146,6 +148,7 @@
 class StandardFileSystemTest extends _BaseTest {
   Uri tempUri;
 
+  @override
   setUp() {
     super.setUp();
     tempUri = new Uri.directory(tempPath);
diff --git a/pkg/front_end/test/static_types/static_type_test.dart b/pkg/front_end/test/static_types/static_type_test.dart
index 9e35c25..69adbea 100644
--- a/pkg/front_end/test/static_types/static_type_test.dart
+++ b/pkg/front_end/test/static_types/static_type_test.dart
@@ -40,6 +40,7 @@
   /// Function that computes a data mapping for [library].
   ///
   /// Fills [actualMap] with the data.
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
@@ -169,6 +170,7 @@
       isNewReachabilityErrorArgument(object) ||
       isNewReachabilityError(object);
 
+  @override
   ActualData<String> mergeData(
       ActualData<String> value1, ActualData<String> value2) {
     if (value1.object is NullLiteral && value2.object is! NullLiteral) {
diff --git a/pkg/front_end/test/text_representation/text_representation_test.dart b/pkg/front_end/test/text_representation/text_representation_test.dart
index 8b188e7..db3b48c 100644
--- a/pkg/front_end/test/text_representation/text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/text_representation_test.dart
@@ -86,6 +86,7 @@
             },
             nnbdMode: NnbdMode.Strong);
 
+  @override
   void customizeCompilerOptions(CompilerOptions options, TestData testData) {
     if (testData.name.endsWith('_opt_out.dart')) {
       options.nnbdMode = NnbdMode.Weak;
@@ -96,6 +97,7 @@
 class TextRepresentationDataComputer extends DataComputer<String> {
   const TextRepresentationDataComputer();
 
+  @override
   void computeLibraryData(
       TestConfig config,
       InternalCompilerResult compilerResult,
diff --git a/pkg/front_end/test/unit_test_suites_impl.dart b/pkg/front_end/test/unit_test_suites_impl.dart
index cbf00f0..0f208a1 100644
--- a/pkg/front_end/test/unit_test_suites_impl.dart
+++ b/pkg/front_end/test/unit_test_suites_impl.dart
@@ -295,6 +295,7 @@
     }
   }
 
+  @override
   void logTestStart(int completed, int failed, int total, testing.Suite suite,
       TestDescription description) {
     String name = getTestName(description);
@@ -308,6 +309,7 @@
   @override
   void logUncaughtError(error, StackTrace stackTrace) {}
 
+  @override
   void logExpectedResult(testing.Suite suite, TestDescription description,
       Result result, Set<Expectation> expectedOutcomes) {
     handleTestResult(
diff --git a/pkg/front_end/test/utils/kernel_chain.dart b/pkg/front_end/test/utils/kernel_chain.dart
index f106a1a..a7c055b 100644
--- a/pkg/front_end/test/utils/kernel_chain.dart
+++ b/pkg/front_end/test/utils/kernel_chain.dart
@@ -70,6 +70,7 @@
 
   bool get canBeFixWithUpdateExpectations;
 
+  @override
   ExpectationSet get expectationSet;
 
   Expectation get expectationFileMismatch =>
@@ -143,8 +144,10 @@
 class Print extends Step<ComponentResult, ComponentResult, ChainContext> {
   const Print();
 
+  @override
   String get name => "print";
 
+  @override
   Future<Result<ComponentResult>> run(ComponentResult result, _) async {
     Component component = result.component;
 
@@ -168,8 +171,10 @@
 class TypeCheck extends Step<ComponentResult, ComponentResult, ChainContext> {
   const TypeCheck();
 
+  @override
   String get name => "typeCheck";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, ChainContext context) async {
     Component component = result.component;
@@ -205,8 +210,10 @@
       // ignore: unnecessary_null_comparison
       : assert(isLastMatchStep != null);
 
+  @override
   String get name => "match expectations";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, MatchContext context) {
     Component component = result.component;
@@ -354,8 +361,10 @@
 
   const KernelTextSerialization();
 
+  @override
   String get name => "kernel text serialization";
 
+  @override
   Future<Result<ComponentResult>> run(
       ComponentResult result, ChainContext context) async {
     Component component = result.component;
@@ -415,8 +424,10 @@
 class WriteDill extends Step<ComponentResult, ComponentResult, ChainContext> {
   const WriteDill();
 
+  @override
   String get name => "write .dill";
 
+  @override
   Future<Result<ComponentResult>> run(ComponentResult result, _) async {
     Component component = result.component;
     Directory tmp = await Directory.systemTemp.createTemp();
@@ -445,8 +456,10 @@
 class ReadDill extends Step<Uri, Uri, ChainContext> {
   const ReadDill();
 
+  @override
   String get name => "read .dill";
 
+  @override
   Future<Result<Uri>> run(Uri uri, _) async {
     try {
       loadComponentFromBinary(uri.toFilePath());
@@ -462,6 +475,7 @@
 
   int length = 0;
 
+  @override
   void add(List<int> data) {
     lists.add(data);
     length += data.length;
@@ -478,6 +492,7 @@
     return result;
   }
 
+  @override
   void close() {}
 }
 
diff --git a/pkg/front_end/test/utils/scanner_chain.dart b/pkg/front_end/test/utils/scanner_chain.dart
index 1bf5b45..c312851 100644
--- a/pkg/front_end/test/utils/scanner_chain.dart
+++ b/pkg/front_end/test/utils/scanner_chain.dart
@@ -31,8 +31,10 @@
 class Read extends Step<TestDescription, ReadFile, ChainContext> {
   const Read();
 
+  @override
   String get name => "read";
 
+  @override
   Future<Result<ReadFile>> run(
       TestDescription input, ChainContext context) async {
     return pass(new ReadFile(input.uri, await readBytesFromFile(input.uri)));
@@ -42,8 +44,10 @@
 class Scan extends Step<ReadFile, ScannedFile, ChainContext> {
   const Scan();
 
+  @override
   String get name => "scan";
 
+  @override
   Future<Result<ScannedFile>> run(ReadFile file, ChainContext context) async {
     return pass(new ScannedFile(file, scan(file.bytes)));
   }
diff --git a/pkg/front_end/test/vm_service_coverage.dart b/pkg/front_end/test/vm_service_coverage.dart
index f5fd805..2608419 100644
--- a/pkg/front_end/test/vm_service_coverage.dart
+++ b/pkg/front_end/test/vm_service_coverage.dart
@@ -108,6 +108,7 @@
   }
 
   Completer<String> cProcessExited = new Completer();
+  @override
   void processExited(int exitCode) {
     cProcessExited.complete("Exit");
   }
@@ -137,6 +138,7 @@
 
   StartEndPair(this.startPos, this.endPos);
 
+  @override
   String toString() => "[$startPos - $endPos]";
 
   @override
diff --git a/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart b/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
index 5ea2bd0..77fe41e 100644
--- a/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
+++ b/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
@@ -23,6 +23,7 @@
 class CoverageHelper extends helper.CoverageHelper {
   CoverageHelper() : super(printHits: false);
 
+  @override
   bool includeCoverageFor(Uri uri) {
     if (uri.scheme != "package") return false;
     if (uri.path.startsWith("front_end/src/fasta/kernel/constant_")) {
diff --git a/pkg/front_end/test/vm_service_heap_helper_test.dart b/pkg/front_end/test/vm_service_heap_helper_test.dart
index d72a28d..470e114 100644
--- a/pkg/front_end/test/vm_service_heap_helper_test.dart
+++ b/pkg/front_end/test/vm_service_heap_helper_test.dart
@@ -139,6 +139,7 @@
 
 class LeakFinderTest extends helper.VMServiceHeapHelperSpecificExactLeakFinder {
   List<String> leakData = [];
+  @override
   int iterationNumber = -1;
   Completer<List<String>> completer = new Completer<List<String>>();
 
@@ -151,21 +152,25 @@
             prettyPrints: prettyPrints,
             throwOnPossibleLeak: throwOnPossibleLeak);
 
+  @override
   void processExited(int exitCode) {
     print("Process exited!");
     leakData.sort();
     completer.complete(leakData);
   }
 
+  @override
   void leakDetected(String duplicate, int count, List<String> prettyPrints) {
     prettyPrints.sort();
     leakData.add("$iterationNumber: $count: $prettyPrints");
   }
 
+  @override
   void noLeakDetected() {
     leakData.add("$iterationNumber: no leak");
   }
 
+  @override
   bool shouldDoAnotherIteration(int iterationNumber) {
     this.iterationNumber = iterationNumber;
     return iterationNumber <= 6;
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index a4a76a2..61caaf3 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -51,7 +51,7 @@
     show SchemeBasedFileSystem;
 
 import 'package:kernel/target/targets.dart'
-    show Target, TargetFlags, getTarget, targets;
+    show Target, TargetFlags, TestTargetFlags, getTarget, targets;
 
 // Before adding new options here, you must:
 //  * Document the option.
@@ -125,7 +125,7 @@
           onError: throwCommandLineProblem,
           onWarning: print);
 
-  final TargetFlags flags = new TargetFlags(
+  final TargetFlags flags = new TestTargetFlags(
       forceLateLoweringsForTesting:
           Options.forceLateLowering.read(parsedOptions),
       forceStaticFieldLoweringForTesting:
diff --git a/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart b/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart
index ce22dc6..88168b0 100644
--- a/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart
+++ b/pkg/front_end/tool/_fasta/direct_parser_ast_helper_creator.dart
@@ -101,14 +101,17 @@
 
   ParserCreatorListener(this.out);
 
+  @override
   void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
+  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     insideListenerClass = false;
   }
 
+  @override
   void beginMethod(
       Token? externalToken,
       Token? staticToken,
@@ -119,6 +122,7 @@
     currentMethodName = name.lexeme;
   }
 
+  @override
   void endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
     void end() {
@@ -131,6 +135,7 @@
             currentMethodName!.startsWith("end") ||
             currentMethodName!.startsWith("handle"))) {
       StringBuffer sb = new StringBuffer();
+      sb.writeln("  @override");
       sb.write("  ");
       Token token = beginToken;
       Token? latestToken;
@@ -222,6 +227,7 @@
           newClasses.write('}');
         }
         newClasses.write(') : super("$name", type);\n\n');
+        newClasses.writeln("@override");
         newClasses.write("Map<String, Object?> get deprecatedArguments => {");
         for (int i = 0; i < parameters.length; i++) {
           Parameter param = parameters[i];
@@ -249,11 +255,13 @@
     latestSeenParameterTypeTokenQuestion = null;
   }
 
+  @override
   void handleType(Token beginToken, Token? questionMark) {
     latestSeenParameterTypeToken = beginToken.lexeme;
     latestSeenParameterTypeTokenQuestion = questionMark?.lexeme;
   }
 
+  @override
   void endFormalParameter(
       Token? thisKeyword,
       Token? periodAfterThis,
diff --git a/pkg/front_end/tool/ast_model.dart b/pkg/front_end/tool/ast_model.dart
index 4deffd1..2e4d7f2 100644
--- a/pkg/front_end/tool/ast_model.dart
+++ b/pkg/front_end/tool/ast_model.dart
@@ -374,6 +374,7 @@
     return sb.toString();
   }
 
+  @override
   String toString() => '${runtimeType}(${name})';
 }
 
@@ -420,6 +421,7 @@
 
   FieldType(this.type, this.kind);
 
+  @override
   String toString() => 'FieldType($type,$kind)';
 }
 
@@ -429,6 +431,7 @@
   ListFieldType(DartType type, this.elementType)
       : super(type, AstFieldKind.list);
 
+  @override
   String toString() => 'ListFieldType($type,$elementType)';
 }
 
@@ -437,6 +440,7 @@
 
   SetFieldType(DartType type, this.elementType) : super(type, AstFieldKind.set);
 
+  @override
   String toString() => 'SetFieldType($type,$elementType)';
 }
 
@@ -447,6 +451,7 @@
   MapFieldType(DartType type, this.keyType, this.valueType)
       : super(type, AstFieldKind.map);
 
+  @override
   String toString() => 'MapFieldType($type,$keyType,$valueType)';
 }
 
@@ -456,6 +461,7 @@
   UtilityFieldType(DartType type, this.astClass)
       : super(type, AstFieldKind.utility);
 
+  @override
   String toString() => 'UtilityFieldType($type,$astClass)';
 }
 
@@ -474,6 +480,7 @@
     return sb.toString();
   }
 
+  @override
   String toString() => '${runtimeType}(${name})';
 }
 
diff --git a/pkg/front_end/tool/dart_doctest_impl.dart b/pkg/front_end/tool/dart_doctest_impl.dart
index 09978cc..92316dc 100644
--- a/pkg/front_end/tool/dart_doctest_impl.dart
+++ b/pkg/front_end/tool/dart_doctest_impl.dart
@@ -474,6 +474,7 @@
 
   ExpectTest(this.call, this.result);
 
+  @override
   bool operator ==(Object other) {
     if (other is! ExpectTest) return false;
     if (other.call != call) return false;
@@ -481,6 +482,7 @@
     return true;
   }
 
+  @override
   String toString() {
     return "ExpectTest[$call, $result]";
   }
@@ -492,6 +494,7 @@
 
   TestParseError(this.message, this.position);
 
+  @override
   bool operator ==(Object other) {
     if (other is! TestParseError) return false;
     if (other.message != message) return false;
@@ -499,6 +502,7 @@
     return true;
   }
 
+  @override
   String toString() {
     return "TestParseError[$position, $message]";
   }
@@ -521,6 +525,7 @@
 
   TestResult(this.test, this.outcome);
 
+  @override
   bool operator ==(Object other) {
     if (other is! TestResult) return false;
     if (other.test != test) return false;
@@ -529,6 +534,7 @@
     return true;
   }
 
+  @override
   String toString() {
     if (message != null) {
       return "TestResult[$outcome, $test, $message]";
@@ -731,6 +737,7 @@
 
   CommentString(this.string, this.charOffset);
 
+  @override
   bool operator ==(Object other) {
     if (other is! CommentString) return false;
     if (other.string != string) return false;
@@ -738,6 +745,7 @@
     return true;
   }
 
+  @override
   String toString() {
     return "CommentString[$charOffset, $string]";
   }
@@ -767,6 +775,7 @@
       new Uri(scheme: "dartdoctest", path: "tester");
   DocTestIncrementalCompiler(CompilerContext context) : super(context);
 
+  @override
   bool dontReissueLibraryProblemsFor(Uri? uri) {
     return super.dontReissueLibraryProblemsFor(uri) || uri == dartDocTestUri;
   }
diff --git a/pkg/front_end/tool/generate_ast_equivalence.dart b/pkg/front_end/tool/generate_ast_equivalence.dart
index 22af276..4047380 100644
--- a/pkg/front_end/tool/generate_ast_equivalence.dart
+++ b/pkg/front_end/tool/generate_ast_equivalence.dart
@@ -416,6 +416,7 @@
     return false;''');
   }
 
+  @override
   void generateHeader(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
 $preamble
diff --git a/pkg/front_end/tool/incremental_perf.dart b/pkg/front_end/tool/incremental_perf.dart
index 58fe1d4..e7dfb97 100644
--- a/pkg/front_end/tool/incremental_perf.dart
+++ b/pkg/front_end/tool/incremental_perf.dart
@@ -226,6 +226,7 @@
 }
 
 class OverlayFileSystemEntity implements FileSystemEntity {
+  @override
   final Uri uri;
   FileSystemEntity? _delegate;
   final OverlayFileSystem _fs;
@@ -272,6 +273,7 @@
   Edit(String uriString, this.original, this.replacement)
       : uri = _resolveOverlayUri(uriString);
 
+  @override
   String toString() => 'Edit($uri, "$original" -> "$replacement")';
 }
 
@@ -282,6 +284,7 @@
 
   ChangeSet(this.name, this.edits);
 
+  @override
   String toString() => 'ChangeSet($name, $edits)';
 }
 
diff --git a/pkg/front_end/tool/parser_direct_ast/console_helper.dart b/pkg/front_end/tool/parser_direct_ast/console_helper.dart
index 281e89d..c87b878 100644
--- a/pkg/front_end/tool/parser_direct_ast/console_helper.dart
+++ b/pkg/front_end/tool/parser_direct_ast/console_helper.dart
@@ -378,7 +378,9 @@
 }
 
 class _Output implements WriteOnlyOutput {
+  @override
   final int rows;
+  @override
   final int columns;
   final Uint16List _text;
   final Uint16List _modifiers;
@@ -391,6 +393,7 @@
     return row * columns + column;
   }
 
+  @override
   void setCell(int row, int column,
       {String? char,
       Modifier? modifier,
@@ -475,7 +478,9 @@
   final WriteOnlyOutput _output;
   final int offsetRow;
   final int offsetColumn;
+  @override
   final int rows;
+  @override
   final int columns;
   WriteOnlyPartialOutput(this._output, this.offsetRow, this.offsetColumn,
       this.rows, this.columns) {
diff --git a/pkg/front_end/tool/visitor_generator.dart b/pkg/front_end/tool/visitor_generator.dart
index 22bef62..02f6d92 100644
--- a/pkg/front_end/tool/visitor_generator.dart
+++ b/pkg/front_end/tool/visitor_generator.dart
@@ -143,6 +143,7 @@
   /// The generated visitor will implement `Visitor<$returnType>`.
   String get returnType;
 
+  @override
   void generateHeader(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
 $preamble
@@ -153,6 +154,7 @@
 class $visitorName$visitorTypeParameters implements Visitor<$returnType> {''');
   }
 
+  @override
   void generateFooter(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
 }''');
@@ -253,6 +255,7 @@
   /// `Visitor1<$returnType, $argumentType>`.
   String get returnType;
 
+  @override
   void generateHeader(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
 import 'package:kernel/ast.dart';
@@ -262,6 +265,7 @@
     implements Visitor1<$returnType, $argumentType> {''');
   }
 
+  @override
   void generateFooter(AstModel astModel, StringBuffer sb) {
     sb.writeln('''
 }''');
diff --git a/pkg/kernel/analysis_options.yaml b/pkg/kernel/analysis_options.yaml
index d9d722e..4d00632 100644
--- a/pkg/kernel/analysis_options.yaml
+++ b/pkg/kernel/analysis_options.yaml
@@ -17,4 +17,5 @@
     - lines_longer_than_80_chars
     - unrelated_type_equality_checks
     - annotate_overrides
+    - always_declare_return_types
     # - always_specify_types
diff --git a/pkg/kernel/bin/count_breakdown.dart b/pkg/kernel/bin/count_breakdown.dart
index b704879..0771034 100755
--- a/pkg/kernel/bin/count_breakdown.dart
+++ b/pkg/kernel/bin/count_breakdown.dart
@@ -17,7 +17,7 @@
   exit(1);
 }
 
-main(List<String> args) {
+void main(List<String> args) {
   CommandLineHelper.requireExactlyOneArgument(args, usage,
       requireFileExists: true);
   Component component = CommandLineHelper.tryLoadDill(args[0]);
@@ -30,13 +30,13 @@
   Map<String, int> _typeCounts = <String, int>{};
 
   @override
-  defaultNode(Node node) {
+  void defaultNode(Node node) {
     String key = node.runtimeType.toString();
     _typeCounts[key] = (_typeCounts[key] ??= 0) + 1;
     super.defaultNode(node);
   }
 
-  printStats() {
+  void printStats() {
     List<List<Object>> data = [];
     _typeCounts.forEach((type, count) {
       data.add([type, count]);
diff --git a/pkg/kernel/bin/dill_forensic.dart b/pkg/kernel/bin/dill_forensic.dart
index 54c1bab..c95d02a 100755
--- a/pkg/kernel/bin/dill_forensic.dart
+++ b/pkg/kernel/bin/dill_forensic.dart
@@ -10,7 +10,7 @@
     show Component, Source, loadComponentFromBytes;
 import 'package:kernel/binary/tag.dart' show Tag;
 
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length != 1) {
     throw "Usage: dart <script> <dillfile>";
   }
diff --git a/pkg/kernel/bin/dump.dart b/pkg/kernel/bin/dump.dart
index 0c3ab47..0f901a2 100755
--- a/pkg/kernel/bin/dump.dart
+++ b/pkg/kernel/bin/dump.dart
@@ -22,7 +22,7 @@
   exit(1);
 }
 
-main(List<String> args) {
+void main(List<String> args) {
   CommandLineHelper.requireVariableArgumentCount([1, 2], args, usage);
   CommandLineHelper.requireFileExists(args[0]);
   var binary = CommandLineHelper.tryLoadDill(args[0]);
diff --git a/pkg/kernel/bin/size_breakdown.dart b/pkg/kernel/bin/size_breakdown.dart
index a5faac2..51661fe 100755
--- a/pkg/kernel/bin/size_breakdown.dart
+++ b/pkg/kernel/bin/size_breakdown.dart
@@ -19,7 +19,7 @@
   exit(1);
 }
 
-main(args) {
+void main(args) {
   CommandLineHelper.requireExactlyOneArgument(args, usage,
       requireFileExists: true);
   List<int> bytes = new File(args[0]).readAsBytesSync();
diff --git a/pkg/kernel/bin/split.dart b/pkg/kernel/bin/split.dart
index e3c99e8..90f1028 100755
--- a/pkg/kernel/bin/split.dart
+++ b/pkg/kernel/bin/split.dart
@@ -21,7 +21,7 @@
   exit(1);
 }
 
-main(args) async {
+void main(args) async {
   CommandLineHelper.requireExactlyOneArgument(args, usage,
       requireFileExists: true);
   Component binary = CommandLineHelper.tryLoadDill(args[0]);
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 99992d8..2ebf049 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -12129,7 +12129,7 @@
   R accept1<R, A>(Visitor1<R, A> v, A arg) => v.visitSupertype(this, arg);
 
   @override
-  visitChildren(Visitor v) {
+  void visitChildren(Visitor v) {
     classNode.acceptReference(v);
     visitList(typeArguments, v);
   }
@@ -12690,7 +12690,7 @@
   Class get classNode => classReference.asClass;
 
   @override
-  visitChildren(Visitor v) {
+  void visitChildren(Visitor v) {
     classReference.asClass.acceptReference(v);
     visitList(typeArguments, v);
     for (final Reference reference in fieldValues.keys) {
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 87e536d..d53d7de 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -183,7 +183,7 @@
             (alwaysCreateNewNamedNodes == true),
         this.alwaysCreateNewNamedNodes = alwaysCreateNewNamedNodes ?? false;
 
-  fail(String message) {
+  Never fail(String message) {
     throw ParseError(message,
         byteIndex: _byteOffset, filename: filename, path: debugPath.join('::'));
   }
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index c8df796..a295640 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -990,7 +990,7 @@
     writeNullAllowedCanonicalNameReference(node.reference.canonicalName);
   }
 
-  writeOffset(int offset) {
+  void writeOffset(int offset) {
     // TODO(jensj): Delta-encoding.
     // File offset ranges from -1 and up,
     // but is here saved as unsigned (thus the +1)
@@ -1867,7 +1867,7 @@
     writeInteger(node.value);
   }
 
-  writeInteger(int value) {
+  void writeInteger(int value) {
     int biasedValue = value + Tag.SpecializedIntLiteralBias;
     if (biasedValue >= 0 &&
         biasedValue & Tag.SpecializedPayloadMask == biasedValue) {
@@ -1893,7 +1893,7 @@
     writeDouble(node.value);
   }
 
-  writeDouble(double value) {
+  void writeDouble(double value) {
     _sink.addDouble(value);
   }
 
@@ -2024,7 +2024,7 @@
     writeLibraryDependencyReference(node.import);
   }
 
-  writeStatementOrEmpty(Statement? node) {
+  void writeStatementOrEmpty(Statement? node) {
     if (node == null) {
       writeByte(Tag.EmptyStatement);
     } else {
@@ -2858,7 +2858,7 @@
   }
 
   @override
-  defaultConstantReference(Constant node) {
+  void defaultConstantReference(Constant node) {
     put(node);
   }
 }
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 257a3ed..fec13cc 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -159,111 +159,111 @@
   }
 
   @override
-  visitInvalidExpression(InvalidExpression node) {
+  TreeNode visitInvalidExpression(InvalidExpression node) {
     return new InvalidExpression(
         node.message, node.expression != null ? clone(node.expression!) : null);
   }
 
   @override
-  visitVariableGet(VariableGet node) {
+  TreeNode visitVariableGet(VariableGet node) {
     return new VariableGet(
         getVariableClone(node.variable)!, visitOptionalType(node.promotedType));
   }
 
   @override
-  visitVariableSet(VariableSet node) {
+  TreeNode visitVariableSet(VariableSet node) {
     return new VariableSet(getVariableClone(node.variable)!, clone(node.value));
   }
 
   @override
-  visitSuperPropertyGet(SuperPropertyGet node) {
+  TreeNode visitSuperPropertyGet(SuperPropertyGet node) {
     return new SuperPropertyGet.byReference(
         node.name, node.interfaceTargetReference);
   }
 
   @override
-  visitSuperPropertySet(SuperPropertySet node) {
+  TreeNode visitSuperPropertySet(SuperPropertySet node) {
     return new SuperPropertySet.byReference(
         node.name, clone(node.value), node.interfaceTargetReference);
   }
 
   @override
-  visitStaticGet(StaticGet node) {
+  TreeNode visitStaticGet(StaticGet node) {
     return new StaticGet.byReference(node.targetReference);
   }
 
   @override
-  visitStaticSet(StaticSet node) {
+  TreeNode visitStaticSet(StaticSet node) {
     return new StaticSet.byReference(node.targetReference, clone(node.value));
   }
 
   @override
-  visitSuperMethodInvocation(SuperMethodInvocation node) {
+  TreeNode visitSuperMethodInvocation(SuperMethodInvocation node) {
     return new SuperMethodInvocation.byReference(
         node.name, clone(node.arguments), node.interfaceTargetReference);
   }
 
   @override
-  visitStaticInvocation(StaticInvocation node) {
+  TreeNode visitStaticInvocation(StaticInvocation node) {
     return new StaticInvocation.byReference(
         node.targetReference, clone(node.arguments),
         isConst: node.isConst);
   }
 
   @override
-  visitConstructorInvocation(ConstructorInvocation node) {
+  TreeNode visitConstructorInvocation(ConstructorInvocation node) {
     return new ConstructorInvocation.byReference(
         node.targetReference, clone(node.arguments),
         isConst: node.isConst);
   }
 
   @override
-  visitNot(Not node) {
+  TreeNode visitNot(Not node) {
     return new Not(clone(node.operand));
   }
 
   @override
-  visitNullCheck(NullCheck node) {
+  TreeNode visitNullCheck(NullCheck node) {
     return new NullCheck(clone(node.operand));
   }
 
   @override
-  visitLogicalExpression(LogicalExpression node) {
+  TreeNode visitLogicalExpression(LogicalExpression node) {
     return new LogicalExpression(
         clone(node.left), node.operatorEnum, clone(node.right));
   }
 
   @override
-  visitConditionalExpression(ConditionalExpression node) {
+  TreeNode visitConditionalExpression(ConditionalExpression node) {
     return new ConditionalExpression(clone(node.condition), clone(node.then),
         clone(node.otherwise), visitType(node.staticType));
   }
 
   @override
-  visitStringConcatenation(StringConcatenation node) {
+  TreeNode visitStringConcatenation(StringConcatenation node) {
     return new StringConcatenation(node.expressions.map(clone).toList());
   }
 
   @override
-  visitListConcatenation(ListConcatenation node) {
+  TreeNode visitListConcatenation(ListConcatenation node) {
     return new ListConcatenation(node.lists.map(clone).toList(),
         typeArgument: visitType(node.typeArgument));
   }
 
   @override
-  visitSetConcatenation(SetConcatenation node) {
+  TreeNode visitSetConcatenation(SetConcatenation node) {
     return new SetConcatenation(node.sets.map(clone).toList(),
         typeArgument: visitType(node.typeArgument));
   }
 
   @override
-  visitMapConcatenation(MapConcatenation node) {
+  TreeNode visitMapConcatenation(MapConcatenation node) {
     return new MapConcatenation(node.maps.map(clone).toList(),
         keyType: visitType(node.keyType), valueType: visitType(node.valueType));
   }
 
   @override
-  visitInstanceCreation(InstanceCreation node) {
+  TreeNode visitInstanceCreation(InstanceCreation node) {
     final Map<Reference, Expression> fieldValues = <Reference, Expression>{};
     node.fieldValues.forEach((Reference fieldRef, Expression value) {
       fieldValues[fieldRef] = clone(value);
@@ -277,61 +277,61 @@
   }
 
   @override
-  visitFileUriExpression(FileUriExpression node) {
+  TreeNode visitFileUriExpression(FileUriExpression node) {
     return new FileUriExpression(clone(node.expression), _activeFileUri!);
   }
 
   @override
-  visitIsExpression(IsExpression node) {
+  TreeNode visitIsExpression(IsExpression node) {
     return new IsExpression(clone(node.operand), visitType(node.type))
       ..flags = node.flags;
   }
 
   @override
-  visitAsExpression(AsExpression node) {
+  TreeNode visitAsExpression(AsExpression node) {
     return new AsExpression(clone(node.operand), visitType(node.type))
       ..flags = node.flags;
   }
 
   @override
-  visitSymbolLiteral(SymbolLiteral node) {
+  TreeNode visitSymbolLiteral(SymbolLiteral node) {
     return new SymbolLiteral(node.value);
   }
 
   @override
-  visitTypeLiteral(TypeLiteral node) {
+  TreeNode visitTypeLiteral(TypeLiteral node) {
     return new TypeLiteral(visitType(node.type));
   }
 
   @override
-  visitThisExpression(ThisExpression node) {
+  TreeNode visitThisExpression(ThisExpression node) {
     return new ThisExpression();
   }
 
   @override
-  visitRethrow(Rethrow node) {
+  TreeNode visitRethrow(Rethrow node) {
     return new Rethrow();
   }
 
   @override
-  visitThrow(Throw node) {
+  TreeNode visitThrow(Throw node) {
     return new Throw(clone(node.expression));
   }
 
   @override
-  visitListLiteral(ListLiteral node) {
+  TreeNode visitListLiteral(ListLiteral node) {
     return new ListLiteral(node.expressions.map(clone).toList(),
         typeArgument: visitType(node.typeArgument), isConst: node.isConst);
   }
 
   @override
-  visitSetLiteral(SetLiteral node) {
+  TreeNode visitSetLiteral(SetLiteral node) {
     return new SetLiteral(node.expressions.map(clone).toList(),
         typeArgument: visitType(node.typeArgument), isConst: node.isConst);
   }
 
   @override
-  visitMapLiteral(MapLiteral node) {
+  TreeNode visitMapLiteral(MapLiteral node) {
     return new MapLiteral(node.entries.map(clone).toList(),
         keyType: visitType(node.keyType),
         valueType: visitType(node.valueType),
@@ -339,85 +339,85 @@
   }
 
   @override
-  visitMapLiteralEntry(MapLiteralEntry node) {
+  TreeNode visitMapLiteralEntry(MapLiteralEntry node) {
     return new MapLiteralEntry(clone(node.key), clone(node.value));
   }
 
   @override
-  visitAwaitExpression(AwaitExpression node) {
+  TreeNode visitAwaitExpression(AwaitExpression node) {
     return new AwaitExpression(clone(node.operand));
   }
 
   @override
-  visitFunctionExpression(FunctionExpression node) {
+  TreeNode visitFunctionExpression(FunctionExpression node) {
     return new FunctionExpression(clone(node.function));
   }
 
   @override
-  visitConstantExpression(ConstantExpression node) {
+  TreeNode visitConstantExpression(ConstantExpression node) {
     return new ConstantExpression(
         visitConstant(node.constant), visitType(node.type));
   }
 
   @override
-  visitStringLiteral(StringLiteral node) {
+  TreeNode visitStringLiteral(StringLiteral node) {
     return new StringLiteral(node.value);
   }
 
   @override
-  visitIntLiteral(IntLiteral node) {
+  TreeNode visitIntLiteral(IntLiteral node) {
     return new IntLiteral(node.value);
   }
 
   @override
-  visitDoubleLiteral(DoubleLiteral node) {
+  TreeNode visitDoubleLiteral(DoubleLiteral node) {
     return new DoubleLiteral(node.value);
   }
 
   @override
-  visitBoolLiteral(BoolLiteral node) {
+  TreeNode visitBoolLiteral(BoolLiteral node) {
     return new BoolLiteral(node.value);
   }
 
   @override
-  visitNullLiteral(NullLiteral node) {
+  TreeNode visitNullLiteral(NullLiteral node) {
     return new NullLiteral();
   }
 
   @override
-  visitLet(Let node) {
+  TreeNode visitLet(Let node) {
     VariableDeclaration newVariable = clone(node.variable);
     return new Let(newVariable, clone(node.body));
   }
 
   @override
-  visitBlockExpression(BlockExpression node) {
+  TreeNode visitBlockExpression(BlockExpression node) {
     return new BlockExpression(clone(node.body), clone(node.value));
   }
 
   @override
-  visitExpressionStatement(ExpressionStatement node) {
+  TreeNode visitExpressionStatement(ExpressionStatement node) {
     return new ExpressionStatement(clone(node.expression));
   }
 
   @override
-  visitBlock(Block node) {
+  TreeNode visitBlock(Block node) {
     return new Block(node.statements.map(clone).toList())
       ..fileEndOffset = _cloneFileOffset(node.fileEndOffset);
   }
 
   @override
-  visitAssertBlock(AssertBlock node) {
+  TreeNode visitAssertBlock(AssertBlock node) {
     return new AssertBlock(node.statements.map(clone).toList());
   }
 
   @override
-  visitEmptyStatement(EmptyStatement node) {
+  TreeNode visitEmptyStatement(EmptyStatement node) {
     return new EmptyStatement();
   }
 
   @override
-  visitAssertStatement(AssertStatement node) {
+  TreeNode visitAssertStatement(AssertStatement node) {
     return new AssertStatement(clone(node.condition),
         conditionStartOffset: node.conditionStartOffset,
         conditionEndOffset: node.conditionEndOffset,
@@ -425,7 +425,7 @@
   }
 
   @override
-  visitLabeledStatement(LabeledStatement node) {
+  TreeNode visitLabeledStatement(LabeledStatement node) {
     LabeledStatement newNode = new LabeledStatement(null);
     labels[node] = newNode;
     newNode.body = clone(node.body)..parent = newNode;
@@ -433,29 +433,29 @@
   }
 
   @override
-  visitBreakStatement(BreakStatement node) {
+  TreeNode visitBreakStatement(BreakStatement node) {
     return new BreakStatement(labels[node.target]!);
   }
 
   @override
-  visitWhileStatement(WhileStatement node) {
+  TreeNode visitWhileStatement(WhileStatement node) {
     return new WhileStatement(clone(node.condition), clone(node.body));
   }
 
   @override
-  visitDoStatement(DoStatement node) {
+  TreeNode visitDoStatement(DoStatement node) {
     return new DoStatement(clone(node.body), clone(node.condition));
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  TreeNode visitForStatement(ForStatement node) {
     List<VariableDeclaration> variables = node.variables.map(clone).toList();
     return new ForStatement(variables, cloneOptional(node.condition),
         node.updates.map(clone).toList(), clone(node.body));
   }
 
   @override
-  visitForInStatement(ForInStatement node) {
+  TreeNode visitForInStatement(ForInStatement node) {
     VariableDeclaration newVariable = clone(node.variable);
     return new ForInStatement(
         newVariable, clone(node.iterable), clone(node.body),
@@ -464,7 +464,7 @@
   }
 
   @override
-  visitSwitchStatement(SwitchStatement node) {
+  TreeNode visitSwitchStatement(SwitchStatement node) {
     for (SwitchCase switchCase in node.cases) {
       switchCases[switchCase] = new SwitchCase(
           switchCase.expressions.map(clone).toList(),
@@ -477,36 +477,36 @@
   }
 
   @override
-  visitSwitchCase(SwitchCase node) {
+  TreeNode visitSwitchCase(SwitchCase node) {
     SwitchCase switchCase = switchCases[node]!;
     switchCase.body = clone(node.body)..parent = switchCase;
     return switchCase;
   }
 
   @override
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
+  TreeNode visitContinueSwitchStatement(ContinueSwitchStatement node) {
     return new ContinueSwitchStatement(switchCases[node.target]!);
   }
 
   @override
-  visitIfStatement(IfStatement node) {
+  TreeNode visitIfStatement(IfStatement node) {
     return new IfStatement(
         clone(node.condition), clone(node.then), cloneOptional(node.otherwise));
   }
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  TreeNode visitReturnStatement(ReturnStatement node) {
     return new ReturnStatement(cloneOptional(node.expression));
   }
 
   @override
-  visitTryCatch(TryCatch node) {
+  TreeNode visitTryCatch(TryCatch node) {
     return new TryCatch(clone(node.body), node.catches.map(clone).toList(),
         isSynthetic: node.isSynthetic);
   }
 
   @override
-  visitCatch(Catch node) {
+  TreeNode visitCatch(Catch node) {
     VariableDeclaration? newException = cloneOptional(node.exception);
     VariableDeclaration? newStackTrace = cloneOptional(node.stackTrace);
     return new Catch(newException, clone(node.body),
@@ -514,17 +514,17 @@
   }
 
   @override
-  visitTryFinally(TryFinally node) {
+  TreeNode visitTryFinally(TryFinally node) {
     return new TryFinally(clone(node.body), clone(node.finalizer));
   }
 
   @override
-  visitYieldStatement(YieldStatement node) {
+  TreeNode visitYieldStatement(YieldStatement node) {
     return new YieldStatement(clone(node.expression))..flags = node.flags;
   }
 
   @override
-  visitVariableDeclaration(VariableDeclaration node) {
+  TreeNode visitVariableDeclaration(VariableDeclaration node) {
     return setVariableClone(
         node,
         new VariableDeclaration(node.name,
@@ -538,7 +538,7 @@
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  TreeNode visitFunctionDeclaration(FunctionDeclaration node) {
     VariableDeclaration newVariable = clone(node.variable);
     // Create the declaration before cloning the body to support recursive
     // [LocalFunctionInvocation] nodes.
@@ -587,7 +587,7 @@
   }
 
   @override
-  visitFunctionNode(FunctionNode node) {
+  TreeNode visitFunctionNode(FunctionNode node) {
     prepareTypeParameters(node.typeParameters);
     List<TypeParameter> typeParameters =
         node.typeParameters.map(clone).toList();
@@ -606,119 +606,119 @@
   }
 
   @override
-  visitArguments(Arguments node) {
+  TreeNode visitArguments(Arguments node) {
     return new Arguments(node.positional.map(clone).toList(),
         types: node.types.map(visitType).toList(),
         named: node.named.map(clone).toList());
   }
 
   @override
-  visitNamedExpression(NamedExpression node) {
+  TreeNode visitNamedExpression(NamedExpression node) {
     return new NamedExpression(node.name, clone(node.value));
   }
 
   @override
-  defaultBasicLiteral(BasicLiteral node) {
+  TreeNode defaultBasicLiteral(BasicLiteral node) {
     return defaultExpression(node);
   }
 
   @override
-  defaultExpression(Expression node) {
+  TreeNode defaultExpression(Expression node) {
     throw 'Unimplemented clone for Kernel expression: $node';
   }
 
   @override
-  defaultInitializer(Initializer node) {
+  TreeNode defaultInitializer(Initializer node) {
     throw 'Unimplemented clone for Kernel initializer: $node';
   }
 
   @override
-  defaultMember(Member node) {
+  TreeNode defaultMember(Member node) {
     throw 'Unimplemented clone for Kernel member: $node';
   }
 
   @override
-  defaultStatement(Statement node) {
+  TreeNode defaultStatement(Statement node) {
     throw 'Unimplemented clone for Kernel statement: $node';
   }
 
   @override
-  defaultTreeNode(TreeNode node) {
+  TreeNode defaultTreeNode(TreeNode node) {
     throw 'Cloning Kernel non-members is not supported.  '
         'Tried cloning $node';
   }
 
   @override
-  visitAssertInitializer(AssertInitializer node) {
+  TreeNode visitAssertInitializer(AssertInitializer node) {
     return new AssertInitializer(clone(node.statement));
   }
 
   @override
-  visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+  TreeNode visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
     return new CheckLibraryIsLoaded(node.import);
   }
 
   @override
-  visitCombinator(Combinator node) {
+  TreeNode visitCombinator(Combinator node) {
     return defaultTreeNode(node);
   }
 
   @override
-  visitFieldInitializer(FieldInitializer node) {
+  TreeNode visitFieldInitializer(FieldInitializer node) {
     return new FieldInitializer.byReference(
         node.fieldReference, clone(node.value));
   }
 
   @override
-  visitInstantiation(Instantiation node) {
+  TreeNode visitInstantiation(Instantiation node) {
     return new Instantiation(
         clone(node.expression), node.typeArguments.map(visitType).toList());
   }
 
   @override
-  visitInvalidInitializer(InvalidInitializer node) {
+  TreeNode visitInvalidInitializer(InvalidInitializer node) {
     return new InvalidInitializer();
   }
 
   @override
-  visitLibraryDependency(LibraryDependency node) {
+  TreeNode visitLibraryDependency(LibraryDependency node) {
     return defaultTreeNode(node);
   }
 
   @override
-  visitLibraryPart(LibraryPart node) {
+  TreeNode visitLibraryPart(LibraryPart node) {
     return defaultTreeNode(node);
   }
 
   @override
-  visitLoadLibrary(LoadLibrary node) {
+  TreeNode visitLoadLibrary(LoadLibrary node) {
     return new LoadLibrary(node.import);
   }
 
   @override
-  visitLocalInitializer(LocalInitializer node) {
+  TreeNode visitLocalInitializer(LocalInitializer node) {
     return new LocalInitializer(clone(node.variable));
   }
 
   @override
-  visitComponent(Component node) {
+  TreeNode visitComponent(Component node) {
     return defaultTreeNode(node);
   }
 
   @override
-  visitRedirectingInitializer(RedirectingInitializer node) {
+  TreeNode visitRedirectingInitializer(RedirectingInitializer node) {
     return new RedirectingInitializer.byReference(
         node.targetReference, clone(node.arguments));
   }
 
   @override
-  visitSuperInitializer(SuperInitializer node) {
+  TreeNode visitSuperInitializer(SuperInitializer node) {
     return new SuperInitializer.byReference(
         node.targetReference, clone(node.arguments));
   }
 
   @override
-  visitTypedef(Typedef node) {
+  TreeNode visitTypedef(Typedef node) {
     return defaultTreeNode(node);
   }
 
diff --git a/pkg/kernel/lib/import_table.dart b/pkg/kernel/lib/import_table.dart
index deffa5d..fd5f59f 100644
--- a/pkg/kernel/lib/import_table.dart
+++ b/pkg/kernel/lib/import_table.dart
@@ -106,12 +106,12 @@
   }
 
   @override
-  visitClassReference(Class node) {
+  void visitClassReference(Class node) {
     addLibraryImport(node.enclosingLibrary);
   }
 
   @override
-  visitLibrary(Library node) {
+  void visitLibrary(Library node) {
     super.visitLibrary(node);
     for (Reference exportedReference in node.additionalExports) {
       addLibraryImport(exportedReference.node!.parent as Library);
@@ -119,12 +119,12 @@
   }
 
   @override
-  defaultMemberReference(Member node) {
+  void defaultMemberReference(Member node) {
     addLibraryImport(node.enclosingLibrary);
   }
 
   @override
-  visitName(Name name) {
+  void visitName(Name name) {
     if (name.library != null) {
       addLibraryImport(name.library);
     }
diff --git a/pkg/kernel/lib/src/tool/command_line_util.dart b/pkg/kernel/lib/src/tool/command_line_util.dart
index df51e1d..d97b20d 100644
--- a/pkg/kernel/lib/src/tool/command_line_util.dart
+++ b/pkg/kernel/lib/src/tool/command_line_util.dart
@@ -7,7 +7,8 @@
 import 'package:kernel/kernel.dart';
 
 class CommandLineHelper {
-  static requireExactlyOneArgument(List<String> args, void Function() usage,
+  static void requireExactlyOneArgument(
+      List<String> args, void Function() usage,
       {bool requireFileExists: false}) {
     if (args.length != 1) {
       print("Expected exactly 1 argument, got ${args.length}.");
@@ -16,7 +17,7 @@
     if (requireFileExists) CommandLineHelper.requireFileExists(args[0]);
   }
 
-  static requireVariableArgumentCount(
+  static void requireVariableArgumentCount(
       List<int> ok, List<String> args, void Function() usage) {
     if (!ok.contains(args.length)) {
       print("Expected the argument count to be one of ${ok}, got "
@@ -25,7 +26,7 @@
     }
   }
 
-  static requireFileExists(String file) {
+  static void requireFileExists(String file) {
     if (!new File(file).existsSync()) {
       print("File $file doesn't exist.");
       exit(1);
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index c4062b0..479f222 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -14,35 +14,16 @@
 
 class TargetFlags {
   final bool trackWidgetCreation;
-  final int forceLateLoweringsForTesting;
-  final bool forceLateLoweringSentinelForTesting;
-  final bool forceStaticFieldLoweringForTesting;
-  final bool forceNoExplicitGetterCallsForTesting;
-  final int forceConstructorTearOffLoweringForTesting;
   final bool enableNullSafety;
 
   const TargetFlags(
-      {this.trackWidgetCreation = false,
-      this.forceLateLoweringsForTesting = LateLowering.none,
-      this.forceLateLoweringSentinelForTesting = false,
-      this.forceStaticFieldLoweringForTesting = false,
-      this.forceNoExplicitGetterCallsForTesting = false,
-      this.forceConstructorTearOffLoweringForTesting =
-          ConstructorTearOffLowering.none,
-      this.enableNullSafety = false});
+      {this.trackWidgetCreation = false, this.enableNullSafety = false});
 
   @override
   bool operator ==(other) {
     if (identical(this, other)) return true;
     return other is TargetFlags &&
         trackWidgetCreation == other.trackWidgetCreation &&
-        forceLateLoweringsForTesting == other.forceLateLoweringsForTesting &&
-        forceLateLoweringSentinelForTesting ==
-            other.forceLateLoweringSentinelForTesting &&
-        forceStaticFieldLoweringForTesting ==
-            other.forceStaticFieldLoweringForTesting &&
-        forceNoExplicitGetterCallsForTesting ==
-            other.forceNoExplicitGetterCallsForTesting &&
         enableNullSafety == other.enableNullSafety;
   }
 
@@ -50,14 +31,6 @@
   int get hashCode {
     int hash = 485786;
     hash = 0x3fffffff & (hash * 31 + (hash ^ trackWidgetCreation.hashCode));
-    hash = 0x3fffffff &
-        (hash * 31 + (hash ^ forceLateLoweringsForTesting.hashCode));
-    hash = 0x3fffffff &
-        (hash * 31 + (hash ^ forceLateLoweringSentinelForTesting.hashCode));
-    hash = 0x3fffffff &
-        (hash * 31 + (hash ^ forceStaticFieldLoweringForTesting.hashCode));
-    hash = 0x3fffffff &
-        (hash * 31 + (hash ^ forceNoExplicitGetterCallsForTesting.hashCode));
     hash = 0x3fffffff & (hash * 31 + (hash ^ enableNullSafety.hashCode));
     return hash;
   }
@@ -72,7 +45,11 @@
 Target? getTarget(String name, TargetFlags flags) {
   _TargetBuilder? builder = targets[name];
   if (builder == null) return null;
-  return builder(flags);
+  Target target = builder(flags);
+  if (flags is TestTargetFlags) {
+    target = new TestTargetWrapper(target, flags);
+  }
+  return target;
 }
 
 abstract class DiagnosticReporter<M, C> {
@@ -483,22 +460,19 @@
   NoneTarget(this.flags);
 
   @override
-  int get enabledLateLowerings => flags.forceLateLoweringsForTesting;
+  int get enabledLateLowerings => LateLowering.none;
 
   @override
-  bool get supportsLateLoweringSentinel =>
-      flags.forceLateLoweringSentinelForTesting;
+  bool get supportsLateLoweringSentinel => false;
 
   @override
-  bool get useStaticFieldLowering => flags.forceStaticFieldLoweringForTesting;
+  bool get useStaticFieldLowering => false;
 
   @override
-  bool get supportsExplicitGetterCalls =>
-      !flags.forceNoExplicitGetterCallsForTesting;
+  bool get supportsExplicitGetterCalls => true;
 
   @override
-  int get enabledConstructorTearOffLowerings =>
-      flags.forceConstructorTearOffLoweringForTesting;
+  int get enabledConstructorTearOffLowerings => ConstructorTearOffLowering.none;
 
   @override
   String get name => 'none';
@@ -667,3 +641,272 @@
   static const int none = 0;
   static const int all = (1 << 4) - 1;
 }
+
+class TestTargetFlags extends TargetFlags {
+  final int? forceLateLoweringsForTesting;
+  final bool? forceLateLoweringSentinelForTesting;
+  final bool? forceStaticFieldLoweringForTesting;
+  final bool? forceNoExplicitGetterCallsForTesting;
+  final int? forceConstructorTearOffLoweringForTesting;
+
+  const TestTargetFlags(
+      {bool trackWidgetCreation = false,
+      this.forceLateLoweringsForTesting,
+      this.forceLateLoweringSentinelForTesting,
+      this.forceStaticFieldLoweringForTesting,
+      this.forceNoExplicitGetterCallsForTesting,
+      this.forceConstructorTearOffLoweringForTesting,
+      bool enableNullSafety = false})
+      : super(
+            trackWidgetCreation: trackWidgetCreation,
+            enableNullSafety: enableNullSafety);
+}
+
+mixin TestTargetMixin on Target {
+  @override
+  TestTargetFlags get flags;
+
+  @override
+  int get enabledLateLowerings =>
+      flags.forceLateLoweringsForTesting ?? super.enabledLateLowerings;
+
+  @override
+  bool get supportsLateLoweringSentinel =>
+      flags.forceLateLoweringSentinelForTesting ??
+      super.supportsLateLoweringSentinel;
+
+  @override
+  bool get useStaticFieldLowering =>
+      flags.forceStaticFieldLoweringForTesting ?? super.useStaticFieldLowering;
+
+  @override
+  bool get supportsExplicitGetterCalls =>
+      flags.forceNoExplicitGetterCallsForTesting != null
+          ? !flags.forceNoExplicitGetterCallsForTesting!
+          : super.supportsExplicitGetterCalls;
+
+  @override
+  int get enabledConstructorTearOffLowerings =>
+      flags.forceConstructorTearOffLoweringForTesting ??
+      super.enabledConstructorTearOffLowerings;
+}
+
+class TargetWrapper extends Target {
+  final Target _target;
+
+  TargetWrapper(this._target);
+
+  @override
+  TargetFlags get flags => _target.flags;
+
+  @override
+  int get enabledLateLowerings => _target.enabledLateLowerings;
+
+  @override
+  bool get supportsLateLoweringSentinel => _target.supportsLateLoweringSentinel;
+
+  @override
+  bool get useStaticFieldLowering => _target.useStaticFieldLowering;
+
+  @override
+  bool get supportsExplicitGetterCalls => _target.supportsExplicitGetterCalls;
+
+  @override
+  int get enabledConstructorTearOffLowerings =>
+      _target.enabledConstructorTearOffLowerings;
+
+  @override
+  bool allowPlatformPrivateLibraryAccess(Uri importer, Uri imported) {
+    return _target.allowPlatformPrivateLibraryAccess(importer, imported);
+  }
+
+  @override
+  Class? concreteConstListLiteralClass(CoreTypes coreTypes) {
+    return _target.concreteConstListLiteralClass(coreTypes);
+  }
+
+  @override
+  Class? concreteConstMapLiteralClass(CoreTypes coreTypes) {
+    return _target.concreteConstMapLiteralClass(coreTypes);
+  }
+
+  @override
+  Class? concreteDoubleLiteralClass(CoreTypes coreTypes, double value) {
+    return _target.concreteDoubleLiteralClass(coreTypes, value);
+  }
+
+  @override
+  Class? concreteIntLiteralClass(CoreTypes coreTypes, int value) {
+    return _target.concreteIntLiteralClass(coreTypes, value);
+  }
+
+  @override
+  Class? concreteListLiteralClass(CoreTypes coreTypes) {
+    return _target.concreteListLiteralClass(coreTypes);
+  }
+
+  @override
+  Class? concreteMapLiteralClass(CoreTypes coreTypes) {
+    return _target.concreteMapLiteralClass(coreTypes);
+  }
+
+  @override
+  Class? concreteStringLiteralClass(CoreTypes coreTypes, String value) {
+    return _target.concreteStringLiteralClass(coreTypes, value);
+  }
+
+  @override
+  Component configureComponent(Component component) {
+    return _target.configureComponent(component);
+  }
+
+  @override
+  ConstantsBackend constantsBackend(CoreTypes coreTypes) {
+    return _target.constantsBackend(coreTypes);
+  }
+
+  @override
+  bool enableNative(Uri uri) {
+    return _target.enableNative(uri);
+  }
+
+  @override
+  bool get enableNoSuchMethodForwarders => _target.enableNoSuchMethodForwarders;
+
+  @override
+  bool get enableSuperMixins => _target.enableSuperMixins;
+
+  @override
+  bool get errorOnUnexactWebIntLiterals => _target.errorOnUnexactWebIntLiterals;
+
+  @override
+  Map<String, String> get extraDeclaredVariables =>
+      _target.extraDeclaredVariables;
+
+  @override
+  List<String> get extraIndexedLibraries => _target.extraIndexedLibraries;
+
+  @override
+  List<String> get extraRequiredLibraries => _target.extraRequiredLibraries;
+
+  @override
+  List<String> get extraRequiredLibrariesPlatform =>
+      _target.extraRequiredLibrariesPlatform;
+
+  @override
+  Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
+      String name, Arguments arguments, int offset, bool isSuper) {
+    return _target.instantiateInvocation(
+        coreTypes, receiver, name, arguments, offset, isSuper);
+  }
+
+  @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);
+  }
+
+  @override
+  String get name => _target.name;
+
+  @override
+  bool get nativeExtensionExpectsString => _target.nativeExtensionExpectsString;
+
+  @override
+  void performModularTransformationsOnLibraries(
+      Component component,
+      CoreTypes coreTypes,
+      ClassHierarchy hierarchy,
+      List<Library> libraries,
+      Map<String, String>? environmentDefines,
+      DiagnosticReporter diagnosticReporter,
+      ReferenceFromIndex? referenceFromIndex,
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
+    _target.performModularTransformationsOnLibraries(
+        component,
+        coreTypes,
+        hierarchy,
+        libraries,
+        environmentDefines,
+        diagnosticReporter,
+        referenceFromIndex,
+        logger: logger,
+        changedStructureNotifier: changedStructureNotifier);
+  }
+
+  @override
+  void performOutlineTransformations(Component component) {
+    _target.performOutlineTransformations(component);
+  }
+
+  @override
+  void performPreConstantEvaluationTransformations(
+      Component component,
+      CoreTypes coreTypes,
+      List<Library> libraries,
+      DiagnosticReporter diagnosticReporter,
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
+    _target.performPreConstantEvaluationTransformations(
+        component, coreTypes, libraries, diagnosticReporter,
+        logger: logger, changedStructureNotifier: changedStructureNotifier);
+  }
+
+  @override
+  void performTransformationsOnProcedure(
+      CoreTypes coreTypes,
+      ClassHierarchy hierarchy,
+      Procedure procedure,
+      Map<String, String>? environmentDefines,
+      {void Function(String msg)? logger}) {
+    _target.performTransformationsOnProcedure(
+        coreTypes, hierarchy, procedure, environmentDefines,
+        logger: logger);
+  }
+
+  @override
+  Map<String, List<String>> get requiredSdkClasses =>
+      _target.requiredSdkClasses;
+
+  @override
+  bool get supportsSetLiterals => _target.supportsSetLiterals;
+
+  @override
+  Map<String, String> updateEnvironmentDefines(Map<String, String> map) {
+    return _target.updateEnvironmentDefines(map);
+  }
+}
+
+class TestTargetWrapper extends TargetWrapper with TestTargetMixin {
+  @override
+  final TestTargetFlags flags;
+
+  TestTargetWrapper(Target target, this.flags) : super(target);
+}
diff --git a/pkg/kernel/lib/testing/type_parser.dart b/pkg/kernel/lib/testing/type_parser.dart
index f5d38ee..d0aecd3 100644
--- a/pkg/kernel/lib/testing/type_parser.dart
+++ b/pkg/kernel/lib/testing/type_parser.dart
@@ -655,49 +655,20 @@
   return result;
 }
 
-abstract class DefaultAction<R, A> {
-  R defaultAction(ParsedType node, A a);
-
-  static perform<R, A>(Visitor<R, A> visitor, ParsedType node, A a) {
-    if (visitor is DefaultAction<R, A>) {
-      DefaultAction<R, A> defaultAction = visitor as DefaultAction<R, A>;
-      return defaultAction.defaultAction(node, a);
-    } else {
-      return null;
-    }
-  }
-}
-
 abstract class Visitor<R, A> {
-  R visitInterfaceType(ParsedInterfaceType node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitInterfaceType(ParsedInterfaceType node, A a);
 
-  R visitClass(ParsedClass node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitClass(ParsedClass node, A a);
 
-  R visitExtension(ParsedExtension node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitExtension(ParsedExtension node, A a);
 
-  R visitTypedef(ParsedTypedef node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitTypedef(ParsedTypedef node, A a);
 
-  R visitFunctionType(ParsedFunctionType node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitFunctionType(ParsedFunctionType node, A a);
 
-  R visitVoidType(ParsedVoidType node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitVoidType(ParsedVoidType node, A a);
 
-  R visitTypeVariable(ParsedTypeVariable node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitTypeVariable(ParsedTypeVariable node, A a);
 
-  R visitIntersectionType(ParsedIntersectionType node, A a) {
-    return DefaultAction.perform<R, A>(this, node, a);
-  }
+  R visitIntersectionType(ParsedIntersectionType node, A a);
 }
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index dc98fc7..5485bdc 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -27,7 +27,7 @@
   NormalNamer(this.prefix);
 }
 
-class ConstantNamer extends RecursiveResultVisitor<Null> with Namer<Constant> {
+class ConstantNamer extends RecursiveVisitor with Namer<Constant> {
   @override
   final String prefix;
 
@@ -65,12 +65,12 @@
   }
 
   @override
-  defaultConstantReference(Constant constant) {
+  void defaultConstantReference(Constant constant) {
     getName(constant);
   }
 
   @override
-  defaultDartType(DartType type) {
+  void defaultDartType(DartType type) {
     // No need to recurse into dart types, we only care about naming the
     // constants themselves.
   }
@@ -202,15 +202,15 @@
   final Disambiguator<Reference, CanonicalName> prefixes =
       new Disambiguator<Reference, CanonicalName>();
 
-  nameVariable(VariableDeclaration node) => variables.getName(node);
-  nameMember(Member node) => members.getName(node);
-  nameClass(Class node) => classes.getName(node);
-  nameExtension(Extension node) => extensions.getName(node);
-  nameLibrary(Library node) => libraries.getName(node);
-  nameTypeParameter(TypeParameter node) => typeParameters.getName(node);
-  nameSwitchCase(SwitchCase node) => labels.getName(node);
-  nameLabeledStatement(LabeledStatement node) => labels.getName(node);
-  nameConstant(Constant node) => constants.getName(node);
+  String nameVariable(VariableDeclaration node) => variables.getName(node);
+  String nameMember(Member node) => members.getName(node);
+  String nameClass(Class node) => classes.getName(node);
+  String nameExtension(Extension node) => extensions.getName(node);
+  String nameLibrary(Library node) => libraries.getName(node);
+  String nameTypeParameter(TypeParameter node) => typeParameters.getName(node);
+  String nameSwitchCase(SwitchCase node) => labels.getName(node);
+  String nameLabeledStatement(LabeledStatement node) => labels.getName(node);
+  String nameConstant(Constant node) => constants.getName(node);
 
   final RegExp pathSeparator = new RegExp('[\\/]');
 
@@ -238,7 +238,7 @@
     });
   }
 
-  nameCanonicalNameAsLibraryPrefix(Reference? node, CanonicalName? name,
+  String nameCanonicalNameAsLibraryPrefix(Reference? node, CanonicalName? name,
       {String? proposedName}) {
     return prefixes.disambiguate(node, name, () {
       if (proposedName != null) return proposedName;
@@ -708,7 +708,7 @@
   }
 
   @override
-  visitSupertype(Supertype type) {
+  void visitSupertype(Supertype type) {
     // ignore: unnecessary_null_comparison
     if (type == null) {
       write('<No Supertype>');
@@ -723,7 +723,7 @@
   }
 
   @override
-  visitTypedefType(TypedefType type) {
+  void visitTypedefType(TypedefType type) {
     writeTypedefReference(type.typedefNode);
     if (type.typeArguments.isNotEmpty) {
       writeSymbol('<');
@@ -841,7 +841,7 @@
     }
   }
 
-  writeFunctionType(FunctionType node,
+  void writeFunctionType(FunctionType node,
       {List<VariableDeclaration>? typedefPositional,
       List<VariableDeclaration>? typedefNamed}) {
     if (state == WORD) {
@@ -1115,10 +1115,10 @@
   }
 
   @override
-  visitLibrary(Library node) {}
+  void visitLibrary(Library node) {}
 
   @override
-  visitField(Field node) {
+  void visitField(Field node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isLate, 'late');
@@ -1163,7 +1163,7 @@
   }
 
   @override
-  visitProcedure(Procedure node) {
+  void visitProcedure(Procedure node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isExternal, 'external');
@@ -1231,7 +1231,7 @@
   }
 
   @override
-  visitConstructor(Constructor node) {
+  void visitConstructor(Constructor node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isExternal, 'external');
@@ -1255,7 +1255,7 @@
   }
 
   @override
-  visitRedirectingFactory(RedirectingFactory node) {
+  void visitRedirectingFactory(RedirectingFactory node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isExternal, 'external');
@@ -1285,7 +1285,7 @@
   }
 
   @override
-  visitClass(Class node) {
+  void visitClass(Class node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeModifier(node.isAbstract, 'abstract');
@@ -1340,7 +1340,7 @@
   }
 
   @override
-  visitExtension(Extension node) {
+  void visitExtension(Extension node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeWord('extension');
@@ -1399,7 +1399,7 @@
   }
 
   @override
-  visitTypedef(Typedef node) {
+  void visitTypedef(Typedef node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeWord('typedef');
@@ -1418,7 +1418,7 @@
   }
 
   @override
-  visitInvalidExpression(InvalidExpression node) {
+  void visitInvalidExpression(InvalidExpression node) {
     writeWord('invalid-expression');
     if (node.message != null) {
       writeWord('"${escapeString(node.message!)}"');
@@ -1447,7 +1447,7 @@
   }
 
   @override
-  visitDynamicInvocation(DynamicInvocation node) {
+  void visitDynamicInvocation(DynamicInvocation node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     _writeDynamicAccessKind(node.kind);
     writeName(
@@ -1471,7 +1471,7 @@
   }
 
   @override
-  visitFunctionInvocation(FunctionInvocation node) {
+  void visitFunctionInvocation(FunctionInvocation node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     _writeFunctionAccessKind(node.kind);
     writeNode(node.arguments);
@@ -1483,7 +1483,7 @@
   }
 
   @override
-  visitLocalFunctionInvocation(LocalFunctionInvocation node) {
+  void visitLocalFunctionInvocation(LocalFunctionInvocation node) {
     writeVariableReference(node.variable);
     writeNode(node.arguments);
     writeSymbol('{');
@@ -1506,7 +1506,7 @@
   }
 
   @override
-  visitInstanceInvocation(InstanceInvocation node) {
+  void visitInstanceInvocation(InstanceInvocation node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1528,7 +1528,7 @@
   }
 
   @override
-  visitInstanceGetterInvocation(InstanceGetterInvocation node) {
+  void visitInstanceGetterInvocation(InstanceGetterInvocation node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1542,7 +1542,7 @@
   }
 
   @override
-  visitEqualsCall(EqualsCall node) {
+  void visitEqualsCall(EqualsCall node) {
     int precedence = Precedence.EQUALITY;
     writeExpression(node.left, precedence);
     writeSpace();
@@ -1556,7 +1556,7 @@
   }
 
   @override
-  visitEqualsNull(EqualsNull node) {
+  void visitEqualsNull(EqualsNull node) {
     writeExpression(node.expression, Precedence.EQUALITY);
     writeSpace();
     writeSymbol('==');
@@ -1565,7 +1565,7 @@
   }
 
   @override
-  visitSuperMethodInvocation(SuperMethodInvocation node) {
+  void visitSuperMethodInvocation(SuperMethodInvocation node) {
     writeWord('super');
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -1573,33 +1573,33 @@
   }
 
   @override
-  visitStaticInvocation(StaticInvocation node) {
+  void visitStaticInvocation(StaticInvocation node) {
     writeModifier(node.isConst, 'const');
     writeMemberReferenceFromReference(node.targetReference);
     writeNode(node.arguments);
   }
 
   @override
-  visitConstructorInvocation(ConstructorInvocation node) {
+  void visitConstructorInvocation(ConstructorInvocation node) {
     writeWord(node.isConst ? 'const' : 'new');
     writeMemberReferenceFromReference(node.targetReference);
     writeNode(node.arguments);
   }
 
   @override
-  visitNot(Not node) {
+  void visitNot(Not node) {
     writeSymbol('!');
     writeExpression(node.operand, Precedence.PREFIX);
   }
 
   @override
-  visitNullCheck(NullCheck node) {
+  void visitNullCheck(NullCheck node) {
     writeExpression(node.operand, Precedence.POSTFIX);
     writeSymbol('!');
   }
 
   @override
-  visitLogicalExpression(LogicalExpression node) {
+  void visitLogicalExpression(LogicalExpression node) {
     int precedence = Precedence.binaryPrecedence[
         logicalExpressionOperatorToString(node.operatorEnum)]!;
     writeExpression(node.left, precedence);
@@ -1608,7 +1608,7 @@
   }
 
   @override
-  visitConditionalExpression(ConditionalExpression node) {
+  void visitConditionalExpression(ConditionalExpression node) {
     writeExpression(node.condition, Precedence.LOGICAL_OR);
     ensureSpace();
     write('?');
@@ -1620,7 +1620,7 @@
   }
 
   @override
-  visitStringConcatenation(StringConcatenation node) {
+  void visitStringConcatenation(StringConcatenation node) {
     if (state == WORD) {
       writeSpace();
     }
@@ -1639,7 +1639,7 @@
   }
 
   @override
-  visitListConcatenation(ListConcatenation node) {
+  void visitListConcatenation(ListConcatenation node) {
     bool first = true;
     for (Expression part in node.lists) {
       if (!first) writeSpaced('+');
@@ -1649,7 +1649,7 @@
   }
 
   @override
-  visitSetConcatenation(SetConcatenation node) {
+  void visitSetConcatenation(SetConcatenation node) {
     bool first = true;
     for (Expression part in node.sets) {
       if (!first) writeSpaced('+');
@@ -1659,7 +1659,7 @@
   }
 
   @override
-  visitMapConcatenation(MapConcatenation node) {
+  void visitMapConcatenation(MapConcatenation node) {
     bool first = true;
     for (Expression part in node.maps) {
       if (!first) writeSpaced('+');
@@ -1669,7 +1669,7 @@
   }
 
   @override
-  visitInstanceCreation(InstanceCreation node) {
+  void visitInstanceCreation(InstanceCreation node) {
     writeClassReferenceFromReference(node.classReference);
     if (node.typeArguments.isNotEmpty) {
       writeSymbol('<');
@@ -1712,12 +1712,12 @@
   }
 
   @override
-  visitFileUriExpression(FileUriExpression node) {
+  void visitFileUriExpression(FileUriExpression node) {
     writeExpression(node.expression);
   }
 
   @override
-  visitIsExpression(IsExpression node) {
+  void visitIsExpression(IsExpression node) {
     writeExpression(node.operand, Precedence.BITWISE_OR);
     writeSpaced(
         node.isForNonNullableByDefault ? 'is{ForNonNullableByDefault}' : 'is');
@@ -1725,7 +1725,7 @@
   }
 
   @override
-  visitAsExpression(AsExpression node) {
+  void visitAsExpression(AsExpression node) {
     writeExpression(node.operand, Precedence.BITWISE_OR);
     List<String> flags = <String>[];
     if (node.isTypeError) {
@@ -1745,35 +1745,35 @@
   }
 
   @override
-  visitSymbolLiteral(SymbolLiteral node) {
+  void visitSymbolLiteral(SymbolLiteral node) {
     writeSymbol('#');
     writeWord(node.value);
   }
 
   @override
-  visitTypeLiteral(TypeLiteral node) {
+  void visitTypeLiteral(TypeLiteral node) {
     writeType(node.type);
   }
 
   @override
-  visitThisExpression(ThisExpression node) {
+  void visitThisExpression(ThisExpression node) {
     writeWord('this');
   }
 
   @override
-  visitRethrow(Rethrow node) {
+  void visitRethrow(Rethrow node) {
     writeWord('rethrow');
   }
 
   @override
-  visitThrow(Throw node) {
+  void visitThrow(Throw node) {
     writeWord('throw');
     writeSpace();
     writeExpression(node.expression);
   }
 
   @override
-  visitListLiteral(ListLiteral node) {
+  void visitListLiteral(ListLiteral node) {
     if (node.isConst) {
       writeWord('const');
       writeSpace();
@@ -1790,7 +1790,7 @@
   }
 
   @override
-  visitSetLiteral(SetLiteral node) {
+  void visitSetLiteral(SetLiteral node) {
     if (node.isConst) {
       writeWord('const');
       writeSpace();
@@ -1807,7 +1807,7 @@
   }
 
   @override
-  visitMapLiteral(MapLiteral node) {
+  void visitMapLiteral(MapLiteral node) {
     if (node.isConst) {
       writeWord('const');
       writeSpace();
@@ -1824,50 +1824,50 @@
   }
 
   @override
-  visitMapLiteralEntry(MapLiteralEntry node) {
+  void visitMapLiteralEntry(MapLiteralEntry node) {
     writeExpression(node.key);
     writeComma(':');
     writeExpression(node.value);
   }
 
   @override
-  visitAwaitExpression(AwaitExpression node) {
+  void visitAwaitExpression(AwaitExpression node) {
     writeWord('await');
     writeExpression(node.operand);
   }
 
   @override
-  visitFunctionExpression(FunctionExpression node) {
+  void visitFunctionExpression(FunctionExpression node) {
     writeFunction(node.function, terminateLine: false);
   }
 
   @override
-  visitStringLiteral(StringLiteral node) {
+  void visitStringLiteral(StringLiteral node) {
     writeWord('"${escapeString(node.value)}"');
   }
 
   @override
-  visitIntLiteral(IntLiteral node) {
+  void visitIntLiteral(IntLiteral node) {
     writeWord('${node.value}');
   }
 
   @override
-  visitDoubleLiteral(DoubleLiteral node) {
+  void visitDoubleLiteral(DoubleLiteral node) {
     writeWord('${node.value}');
   }
 
   @override
-  visitBoolLiteral(BoolLiteral node) {
+  void visitBoolLiteral(BoolLiteral node) {
     writeWord('${node.value}');
   }
 
   @override
-  visitNullLiteral(NullLiteral node) {
+  void visitNullLiteral(NullLiteral node) {
     writeWord('null');
   }
 
   @override
-  visitLet(Let node) {
+  void visitLet(Let node) {
     writeWord('let');
     writeVariableDeclaration(node.variable);
     writeSpaced('in');
@@ -1875,7 +1875,7 @@
   }
 
   @override
-  visitBlockExpression(BlockExpression node) {
+  void visitBlockExpression(BlockExpression node) {
     writeSpaced('block');
     writeBlockBody(node.body.statements, asExpression: true);
     writeSymbol(' =>');
@@ -1883,7 +1883,7 @@
   }
 
   @override
-  visitInstantiation(Instantiation node) {
+  void visitInstantiation(Instantiation node) {
     writeExpression(node.expression);
     writeSymbol('<');
     writeList(node.typeArguments, writeType);
@@ -1891,7 +1891,7 @@
   }
 
   @override
-  visitLoadLibrary(LoadLibrary node) {
+  void visitLoadLibrary(LoadLibrary node) {
     writeWord('LoadLibrary');
     writeSymbol('(');
     writeWord(node.import.name!);
@@ -1900,7 +1900,7 @@
   }
 
   @override
-  visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+  void visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
     writeWord('CheckLibraryIsLoaded');
     writeSymbol('(');
     writeWord(node.import.name!);
@@ -1909,7 +1909,7 @@
   }
 
   @override
-  visitLibraryPart(LibraryPart node) {
+  void visitLibraryPart(LibraryPart node) {
     writeAnnotationList(node.annotations);
     writeIndentation();
     writeWord('part');
@@ -1918,7 +1918,7 @@
   }
 
   @override
-  visitLibraryDependency(LibraryDependency node) {
+  void visitLibraryDependency(LibraryDependency node) {
     writeIndentation();
     writeWord(node.isImport ? 'import' : 'export');
     String uriString;
@@ -1961,12 +1961,12 @@
   }
 
   @override
-  defaultExpression(Expression node) {
+  void defaultExpression(Expression node) {
     writeWord('${node.runtimeType}');
   }
 
   @override
-  visitVariableGet(VariableGet node) {
+  void visitVariableGet(VariableGet node) {
     writeVariableReference(node.variable);
     DartType? promotedType = node.promotedType;
     if (promotedType != null) {
@@ -1978,7 +1978,7 @@
   }
 
   @override
-  visitVariableSet(VariableSet node) {
+  void visitVariableSet(VariableSet node) {
     writeVariableReference(node.variable);
     writeSpaced('=');
     writeExpression(node.value);
@@ -2004,21 +2004,21 @@
   }
 
   @override
-  visitDynamicGet(DynamicGet node) {
+  void visitDynamicGet(DynamicGet node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     _writeDynamicAccessKind(node.kind);
     writeName(node.name);
   }
 
   @override
-  visitFunctionTearOff(FunctionTearOff node) {
+  void visitFunctionTearOff(FunctionTearOff node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeSymbol('call');
   }
 
   @override
-  visitInstanceGet(InstanceGet node) {
+  void visitInstanceGet(InstanceGet node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -2029,7 +2029,7 @@
   }
 
   @override
-  visitInstanceTearOff(InstanceTearOff node) {
+  void visitInstanceTearOff(InstanceTearOff node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -2040,7 +2040,7 @@
   }
 
   @override
-  visitDynamicSet(DynamicSet node) {
+  void visitDynamicSet(DynamicSet node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     _writeDynamicAccessKind(node.kind);
     writeName(node.name);
@@ -2049,7 +2049,7 @@
   }
 
   @override
-  visitInstanceSet(InstanceSet node) {
+  void visitInstanceSet(InstanceSet node) {
     writeExpression(node.receiver, Precedence.PRIMARY);
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -2059,14 +2059,14 @@
   }
 
   @override
-  visitSuperPropertyGet(SuperPropertyGet node) {
+  void visitSuperPropertyGet(SuperPropertyGet node) {
     writeWord('super');
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
   }
 
   @override
-  visitSuperPropertySet(SuperPropertySet node) {
+  void visitSuperPropertySet(SuperPropertySet node) {
     writeWord('super');
     writeSymbol('.');
     writeInterfaceTarget(node.name, node.interfaceTargetReference);
@@ -2075,34 +2075,34 @@
   }
 
   @override
-  visitStaticTearOff(StaticTearOff node) {
+  void visitStaticTearOff(StaticTearOff node) {
     writeMemberReferenceFromReference(node.targetReference);
   }
 
   @override
-  visitStaticGet(StaticGet node) {
+  void visitStaticGet(StaticGet node) {
     writeMemberReferenceFromReference(node.targetReference);
   }
 
   @override
-  visitStaticSet(StaticSet node) {
+  void visitStaticSet(StaticSet node) {
     writeMemberReferenceFromReference(node.targetReference);
     writeSpaced('=');
     writeExpression(node.value);
   }
 
   @override
-  visitConstructorTearOff(ConstructorTearOff node) {
+  void visitConstructorTearOff(ConstructorTearOff node) {
     writeMemberReferenceFromReference(node.targetReference);
   }
 
   @override
-  visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) {
+  void visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) {
     writeMemberReferenceFromReference(node.targetReference);
   }
 
   @override
-  visitTypedefTearOff(TypedefTearOff node) {
+  void visitTypedefTearOff(TypedefTearOff node) {
     writeTypeParameterList(node.typeParameters);
     state = SYMBOL;
     writeSymbol('.(');
@@ -2117,7 +2117,7 @@
   }
 
   @override
-  visitExpressionStatement(ExpressionStatement node) {
+  void visitExpressionStatement(ExpressionStatement node) {
     writeIndentation();
     writeExpression(node.expression);
     endLine(';');
@@ -2137,26 +2137,26 @@
   }
 
   @override
-  visitBlock(Block node) {
+  void visitBlock(Block node) {
     writeIndentation();
     writeBlockBody(node.statements);
   }
 
   @override
-  visitAssertBlock(AssertBlock node) {
+  void visitAssertBlock(AssertBlock node) {
     writeIndentation();
     writeSpaced('assert');
     writeBlockBody(node.statements);
   }
 
   @override
-  visitEmptyStatement(EmptyStatement node) {
+  void visitEmptyStatement(EmptyStatement node) {
     writeIndentation();
     endLine(';');
   }
 
   @override
-  visitAssertStatement(AssertStatement node, {bool asExpression = false}) {
+  void visitAssertStatement(AssertStatement node, {bool asExpression = false}) {
     if (!asExpression) {
       writeIndentation();
     }
@@ -2176,7 +2176,7 @@
   }
 
   @override
-  visitLabeledStatement(LabeledStatement node) {
+  void visitLabeledStatement(LabeledStatement node) {
     writeIndentation();
     writeWord(syntheticNames.nameLabeledStatement(node));
     endLine(':');
@@ -2184,7 +2184,7 @@
   }
 
   @override
-  visitBreakStatement(BreakStatement node) {
+  void visitBreakStatement(BreakStatement node) {
     writeIndentation();
     writeWord('break');
     writeWord(syntheticNames.nameLabeledStatement(node.target));
@@ -2192,7 +2192,7 @@
   }
 
   @override
-  visitWhileStatement(WhileStatement node) {
+  void visitWhileStatement(WhileStatement node) {
     writeIndentation();
     writeSpaced('while');
     writeSymbol('(');
@@ -2202,7 +2202,7 @@
   }
 
   @override
-  visitDoStatement(DoStatement node) {
+  void visitDoStatement(DoStatement node) {
     writeIndentation();
     writeWord('do');
     writeBody(node.body);
@@ -2214,7 +2214,7 @@
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     writeIndentation();
     writeSpaced('for');
     writeSymbol('(');
@@ -2231,7 +2231,7 @@
   }
 
   @override
-  visitForInStatement(ForInStatement node) {
+  void visitForInStatement(ForInStatement node) {
     writeIndentation();
     if (node.isAsync) {
       writeSpaced('await');
@@ -2246,7 +2246,7 @@
   }
 
   @override
-  visitSwitchStatement(SwitchStatement node) {
+  void visitSwitchStatement(SwitchStatement node) {
     writeIndentation();
     writeWord('switch');
     writeSymbol('(');
@@ -2260,7 +2260,7 @@
   }
 
   @override
-  visitSwitchCase(SwitchCase node) {
+  void visitSwitchCase(SwitchCase node) {
     String label = syntheticNames.nameSwitchCase(node);
     writeIndentation();
     writeWord(label);
@@ -2282,7 +2282,7 @@
   }
 
   @override
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {
     writeIndentation();
     writeWord('continue');
     writeWord(syntheticNames.nameSwitchCase(node.target));
@@ -2290,7 +2290,7 @@
   }
 
   @override
-  visitIfStatement(IfStatement node) {
+  void visitIfStatement(IfStatement node) {
     writeIndentation();
     writeWord('if');
     writeSymbol('(');
@@ -2306,7 +2306,7 @@
   }
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     writeIndentation();
     writeWord('return');
     Expression? expression = node.expression;
@@ -2318,7 +2318,7 @@
   }
 
   @override
-  visitTryCatch(TryCatch node) {
+  void visitTryCatch(TryCatch node) {
     writeIndentation();
     writeWord('try');
     writeBody(node.body);
@@ -2326,7 +2326,7 @@
   }
 
   @override
-  visitCatch(Catch node) {
+  void visitCatch(Catch node) {
     writeIndentation();
     // ignore: unnecessary_null_comparison
     if (node.guard != null) {
@@ -2352,7 +2352,7 @@
   }
 
   @override
-  visitTryFinally(TryFinally node) {
+  void visitTryFinally(TryFinally node) {
     writeIndentation();
     writeWord('try');
     writeBody(node.body);
@@ -2362,7 +2362,7 @@
   }
 
   @override
-  visitYieldStatement(YieldStatement node) {
+  void visitYieldStatement(YieldStatement node) {
     writeIndentation();
     if (node.isYieldStar) {
       writeWord('yield*');
@@ -2376,14 +2376,14 @@
   }
 
   @override
-  visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(VariableDeclaration node) {
     writeIndentation();
     writeVariableDeclaration(node, useVarKeyword: true);
     endLine(';');
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     writeAnnotationList(node.variable.annotations);
     writeIndentation();
     writeWord('function');
@@ -2425,7 +2425,7 @@
   }
 
   @override
-  visitArguments(Arguments node) {
+  void visitArguments(Arguments node) {
     if (node.types.isNotEmpty) {
       writeSymbol('<');
       writeList(node.types, writeType);
@@ -2439,56 +2439,56 @@
   }
 
   @override
-  visitNamedExpression(NamedExpression node) {
+  void visitNamedExpression(NamedExpression node) {
     writeWord(node.name);
     writeComma(':');
     writeExpression(node.value);
   }
 
   @override
-  defaultStatement(Statement node) {
+  void defaultStatement(Statement node) {
     writeIndentation();
     endLine('${node.runtimeType}');
   }
 
   @override
-  visitInvalidInitializer(InvalidInitializer node) {
+  void visitInvalidInitializer(InvalidInitializer node) {
     writeWord('invalid-initializer');
   }
 
   @override
-  visitFieldInitializer(FieldInitializer node) {
+  void visitFieldInitializer(FieldInitializer node) {
     writeMemberReferenceFromReference(node.fieldReference);
     writeSpaced('=');
     writeExpression(node.value);
   }
 
   @override
-  visitSuperInitializer(SuperInitializer node) {
+  void visitSuperInitializer(SuperInitializer node) {
     writeWord('super');
     writeMemberReferenceFromReference(node.targetReference);
     writeNode(node.arguments);
   }
 
   @override
-  visitRedirectingInitializer(RedirectingInitializer node) {
+  void visitRedirectingInitializer(RedirectingInitializer node) {
     writeWord('this');
     writeMemberReferenceFromReference(node.targetReference);
     writeNode(node.arguments);
   }
 
   @override
-  visitLocalInitializer(LocalInitializer node) {
+  void visitLocalInitializer(LocalInitializer node) {
     writeVariableDeclaration(node.variable);
   }
 
   @override
-  visitAssertInitializer(AssertInitializer node) {
+  void visitAssertInitializer(AssertInitializer node) {
     visitAssertStatement(node.statement, asExpression: true);
   }
 
   @override
-  defaultInitializer(Initializer node) {
+  void defaultInitializer(Initializer node) {
     writeIndentation();
     endLine(': ${node.runtimeType}');
   }
@@ -2530,33 +2530,33 @@
   }
 
   @override
-  visitInvalidType(InvalidType node) {
+  void visitInvalidType(InvalidType node) {
     writeWord('invalid-type');
   }
 
   @override
-  visitDynamicType(DynamicType node) {
+  void visitDynamicType(DynamicType node) {
     writeWord('dynamic');
   }
 
   @override
-  visitVoidType(VoidType node) {
+  void visitVoidType(VoidType node) {
     writeWord('void');
   }
 
   @override
-  visitNeverType(NeverType node) {
+  void visitNeverType(NeverType node) {
     writeWord('Never');
     writeNullability(node.nullability);
   }
 
   @override
-  visitNullType(NullType node) {
+  void visitNullType(NullType node) {
     writeWord('Null');
   }
 
   @override
-  visitInterfaceType(InterfaceType node) {
+  void visitInterfaceType(InterfaceType node) {
     writeClassReferenceFromReference(node.className);
     if (node.typeArguments.isNotEmpty) {
       writeSymbol('<');
@@ -2568,7 +2568,7 @@
   }
 
   @override
-  visitExtensionType(ExtensionType node) {
+  void visitExtensionType(ExtensionType node) {
     writeExtensionReferenceFromReference(node.extensionReference);
     if (node.typeArguments.isNotEmpty) {
       writeSymbol('<');
@@ -2580,7 +2580,7 @@
   }
 
   @override
-  visitFutureOrType(FutureOrType node) {
+  void visitFutureOrType(FutureOrType node) {
     writeWord('FutureOr');
     writeSymbol('<');
     writeNode(node.typeArgument);
@@ -2589,12 +2589,12 @@
   }
 
   @override
-  visitFunctionType(FunctionType node) {
+  void visitFunctionType(FunctionType node) {
     writeFunctionType(node);
   }
 
   @override
-  visitNamedType(NamedType node) {
+  void visitNamedType(NamedType node) {
     writeModifier(node.isRequired, 'required');
     writeWord(node.name);
     writeSymbol(':');
@@ -2603,7 +2603,7 @@
   }
 
   @override
-  visitTypeParameterType(TypeParameterType node) {
+  void visitTypeParameterType(TypeParameterType node) {
     writeTypeParameterReference(node.parameter);
     writeNullability(node.declaredNullability);
     DartType? promotedBound = node.promotedBound;
@@ -2622,7 +2622,7 @@
   }
 
   @override
-  visitTypeParameter(TypeParameter node) {
+  void visitTypeParameter(TypeParameter node) {
     writeModifier(node.isGenericCovariantImpl, 'generic-covariant-impl');
     writeAnnotationList(node.annotations, separateLines: false);
     if (node.variance != Variance.covariant) {
@@ -2648,12 +2648,12 @@
   }
 
   @override
-  visitConstantExpression(ConstantExpression node) {
+  void visitConstantExpression(ConstantExpression node) {
     writeConstantReference(node.constant);
   }
 
   @override
-  defaultConstant(Constant node) {
+  void defaultConstant(Constant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2661,7 +2661,7 @@
   }
 
   @override
-  visitNullConstant(NullConstant node) {
+  void visitNullConstant(NullConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2669,7 +2669,7 @@
   }
 
   @override
-  visitBoolConstant(BoolConstant node) {
+  void visitBoolConstant(BoolConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2677,7 +2677,7 @@
   }
 
   @override
-  visitIntConstant(IntConstant node) {
+  void visitIntConstant(IntConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2685,7 +2685,7 @@
   }
 
   @override
-  visitDoubleConstant(DoubleConstant node) {
+  void visitDoubleConstant(DoubleConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2693,7 +2693,7 @@
   }
 
   @override
-  visitSymbolConstant(SymbolConstant node) {
+  void visitSymbolConstant(SymbolConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2705,7 +2705,7 @@
   }
 
   @override
-  visitListConstant(ListConstant node) {
+  void visitListConstant(ListConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2717,7 +2717,7 @@
   }
 
   @override
-  visitSetConstant(SetConstant node) {
+  void visitSetConstant(SetConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2729,7 +2729,7 @@
   }
 
   @override
-  visitMapConstant(MapConstant node) {
+  void visitMapConstant(MapConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2745,7 +2745,7 @@
   }
 
   @override
-  visitTypeLiteralConstant(TypeLiteralConstant node) {
+  void visitTypeLiteralConstant(TypeLiteralConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2756,7 +2756,7 @@
   }
 
   @override
-  visitInstanceConstant(InstanceConstant node) {
+  void visitInstanceConstant(InstanceConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2781,7 +2781,7 @@
   }
 
   @override
-  visitInstantiationConstant(InstantiationConstant node) {
+  void visitInstantiationConstant(InstantiationConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2801,7 +2801,7 @@
   }
 
   @override
-  visitStringConstant(StringConstant node) {
+  void visitStringConstant(StringConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2809,7 +2809,7 @@
   }
 
   @override
-  visitStaticTearOffConstant(StaticTearOffConstant node) {
+  void visitStaticTearOffConstant(StaticTearOffConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2820,7 +2820,7 @@
   }
 
   @override
-  visitTypedefTearOffConstant(TypedefTearOffConstant node) {
+  void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2841,7 +2841,7 @@
   }
 
   @override
-  visitUnevaluatedConstant(UnevaluatedConstant node) {
+  void visitUnevaluatedConstant(UnevaluatedConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2852,7 +2852,7 @@
   }
 
   @override
-  visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
+  void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
     writeIndentation();
     writeConstantReference(node);
     writeSpaced('=');
@@ -2863,7 +2863,7 @@
   }
 
   @override
-  visitRedirectingFactoryTearOffConstant(
+  void visitRedirectingFactoryTearOffConstant(
       RedirectingFactoryTearOffConstant node) {
     writeIndentation();
     writeConstantReference(node);
@@ -2875,7 +2875,7 @@
   }
 
   @override
-  defaultNode(Node node) {
+  void defaultNode(Node node) {
     write('<${node.runtimeType}>');
   }
 }
diff --git a/pkg/kernel/lib/text/debug_printer.dart b/pkg/kernel/lib/text/debug_printer.dart
index fa700c1..d42442e 100644
--- a/pkg/kernel/lib/text/debug_printer.dart
+++ b/pkg/kernel/lib/text/debug_printer.dart
@@ -49,14 +49,14 @@
   }
 
   @override
-  visitStaticInvocation(StaticInvocation node) {
+  void visitStaticInvocation(StaticInvocation node) {
     openNode(node, '${node.runtimeType}', {'target': '${node.target}'});
     node.visitChildren(this);
     closeNode();
   }
 
   @override
-  visitArguments(Arguments node) {
+  void visitArguments(Arguments node) {
     openNode(node, '${node.runtimeType}', {
       'typeArgs': '${node.types}',
       'positionalArgs': '${node.positional}',
@@ -67,7 +67,7 @@
   }
 
   @override
-  visitAsExpression(AsExpression node) {
+  void visitAsExpression(AsExpression node) {
     openNode(node, '${node.runtimeType}',
         {'operand': '${node.operand}', 'DartType': '${node.type}'});
     node.visitChildren(this);
@@ -75,7 +75,7 @@
   }
 
   @override
-  visitStringLiteral(StringLiteral node) {
+  void visitStringLiteral(StringLiteral node) {
     openAndCloseNode(node, '${node.runtimeType}', {'value': '${node.value}'});
   }
 
diff --git a/pkg/kernel/lib/text/indentation.dart b/pkg/kernel/lib/text/indentation.dart
index 4c9c344..f16a4ac 100644
--- a/pkg/kernel/lib/text/indentation.dart
+++ b/pkg/kernel/lib/text/indentation.dart
@@ -42,7 +42,7 @@
 
   /// Calls [f] with one more indentation level, restoring indentation context
   /// upon return of [f] and returning its result.
-  indentBlock(Function f) {
+  void indentBlock(Function f) {
     indentMore();
     dynamic result = f();
     indentLess();
diff --git a/pkg/kernel/lib/transformations/async.dart b/pkg/kernel/lib/transformations/async.dart
index 2866e54..621d51e 100644
--- a/pkg/kernel/lib/transformations/async.dart
+++ b/pkg/kernel/lib/transformations/async.dart
@@ -630,7 +630,7 @@
   }
 
   @override
-  visitFunctionNode(FunctionNode node) {
+  TreeNode visitFunctionNode(FunctionNode node) {
     var nestedRewriter = new RecursiveContinuationRewriter(
         continuationRewriter.helper, _staticTypeContext);
     return nestedRewriter.transform(node);
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index 3baab93..e9d5c3c 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -100,7 +100,7 @@
   }
 
   @override
-  visitField(Field node, TreeNode? removalSentinel) {
+  TreeNode visitField(Field node, TreeNode? removalSentinel) {
     staticTypeContext.enterMember(node);
     final result = super.visitField(node, removalSentinel);
     staticTypeContext.leaveMember(node);
@@ -108,7 +108,7 @@
   }
 
   @override
-  visitConstructor(Constructor node, TreeNode? removalSentinel) {
+  TreeNode visitConstructor(Constructor node, TreeNode? removalSentinel) {
     staticTypeContext.enterMember(node);
     final result = super.visitConstructor(node, removalSentinel);
     staticTypeContext.leaveMember(node);
@@ -116,7 +116,7 @@
   }
 
   @override
-  visitProcedure(Procedure node, TreeNode? removalSentinel) {
+  TreeNode visitProcedure(Procedure node, TreeNode? removalSentinel) {
     staticTypeContext.enterMember(node);
     final result =
         node.isAbstract ? node : super.visitProcedure(node, removalSentinel);
@@ -125,7 +125,7 @@
   }
 
   @override
-  visitLibrary(Library node, TreeNode? removalSentinel) {
+  TreeNode visitLibrary(Library node, TreeNode? removalSentinel) {
     staticTypeContext.enterLibrary(node);
     Library result = super.visitLibrary(node, removalSentinel) as Library;
     staticTypeContext.leaveLibrary(node);
@@ -133,7 +133,7 @@
   }
 
   @override
-  visitFunctionNode(FunctionNode node, TreeNode? removalSentinel) {
+  TreeNode visitFunctionNode(FunctionNode node, TreeNode? removalSentinel) {
     switch (node.asyncMarker) {
       case AsyncMarker.Sync:
       case AsyncMarker.SyncYielding:
@@ -497,7 +497,7 @@
   }
 
   @override
-  visitYieldStatement(YieldStatement node, TreeNode? removalSentinel) {
+  TreeNode visitYieldStatement(YieldStatement node, TreeNode? removalSentinel) {
     Expression transformedExpression = transform(node.expression);
 
     var statements = <Statement>[];
@@ -1194,7 +1194,7 @@
   }
 
   @override
-  defaultExpression(TreeNode node, TreeNode? removalSentinel) =>
+  TreeNode defaultExpression(TreeNode node, TreeNode? removalSentinel) =>
       throw 'unreachable $node';
 }
 
@@ -1447,7 +1447,8 @@
   }
 
   @override
-  visitReturnStatement(ReturnStatement node, TreeNode? removalSentinel) {
+  TreeNode visitReturnStatement(
+      ReturnStatement node, TreeNode? removalSentinel) {
     var expr = node.expression == null
         ? new NullLiteral()
         : expressionRewriter!.rewrite(node.expression!, statements);
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index c9b5c39..d293799 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -64,7 +64,7 @@
         hierarchy.applyMemberChanges(transformedClasses, findDescendants: true);
   }
 
-  transformClass(
+  void transformClass(
       List<Library> librariesToBeTransformed,
       Set<Class> processedClasses,
       Set<Class> transformedClasses,
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index b321095..9b8b502 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -118,9 +118,9 @@
 class TypeCheckingVisitor
     implements
         ExpressionVisitor<DartType>,
-        StatementVisitor<Null>,
-        MemberVisitor<Null>,
-        InitializerVisitor<Null> {
+        StatementVisitor<void>,
+        MemberVisitor<void>,
+        InitializerVisitor<void> {
   final TypeChecker checker;
   final TypeEnvironment environment;
   final ClassHierarchy hierarchy;
@@ -171,7 +171,7 @@
   }
 
   @override
-  defaultMember(Member node) => throw 'Unused';
+  TreeNode defaultMember(Member node) => throw 'Unused';
 
   @override
   DartType defaultBasicLiteral(BasicLiteral node) {
@@ -184,17 +184,17 @@
   }
 
   @override
-  defaultStatement(Statement node) {
+  TreeNode defaultStatement(Statement node) {
     throw 'Unexpected statement ${node.runtimeType}';
   }
 
   @override
-  defaultInitializer(Initializer node) {
+  TreeNode defaultInitializer(Initializer node) {
     throw 'Unexpected initializer ${node.runtimeType}';
   }
 
   @override
-  visitField(Field node) {
+  void visitField(Field node) {
     if (node.initializer != null) {
       node.initializer =
           checkAndDowncastExpression(node.initializer!, node.type);
@@ -202,7 +202,7 @@
   }
 
   @override
-  visitConstructor(Constructor node) {
+  void visitConstructor(Constructor node) {
     currentReturnType = null;
     currentYieldType = null;
     node.initializers.forEach(visitInitializer);
@@ -210,14 +210,14 @@
   }
 
   @override
-  visitProcedure(Procedure node) {
+  void visitProcedure(Procedure node) {
     currentReturnType = _getInternalReturnType(node.function);
     currentYieldType = _getYieldType(node.function);
     handleFunctionNode(node.function);
   }
 
   @override
-  visitRedirectingFactory(RedirectingFactory node) {
+  void visitRedirectingFactory(RedirectingFactory node) {
     currentReturnType = null;
     currentYieldType = null;
   }
@@ -836,12 +836,12 @@
   }
 
   @override
-  visitConstantExpression(ConstantExpression node) {
+  DartType visitConstantExpression(ConstantExpression node) {
     return node.type;
   }
 
   @override
-  visitAssertStatement(AssertStatement node) {
+  void visitAssertStatement(AssertStatement node) {
     visitExpression(node.condition);
     if (node.message != null) {
       visitExpression(node.message!);
@@ -849,38 +849,38 @@
   }
 
   @override
-  visitBlock(Block node) {
+  void visitBlock(Block node) {
     node.statements.forEach(visitStatement);
   }
 
   @override
-  visitAssertBlock(AssertBlock node) {
+  void visitAssertBlock(AssertBlock node) {
     node.statements.forEach(visitStatement);
   }
 
   @override
-  visitBreakStatement(BreakStatement node) {}
+  void visitBreakStatement(BreakStatement node) {}
 
   @override
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {}
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {}
 
   @override
-  visitDoStatement(DoStatement node) {
+  void visitDoStatement(DoStatement node) {
     visitStatement(node.body);
     node.condition = checkAndDowncastExpression(
         node.condition, environment.coreTypes.boolLegacyRawType);
   }
 
   @override
-  visitEmptyStatement(EmptyStatement node) {}
+  void visitEmptyStatement(EmptyStatement node) {}
 
   @override
-  visitExpressionStatement(ExpressionStatement node) {
+  void visitExpressionStatement(ExpressionStatement node) {
     visitExpression(node.expression);
   }
 
   @override
-  visitForInStatement(ForInStatement node) {
+  void visitForInStatement(ForInStatement node) {
     DartType iterable = visitExpression(node.iterable);
     // TODO(asgerf): Store interface targets on for-in loops or desugar them,
     // instead of doing the ad-hoc resolution here.
@@ -935,7 +935,7 @@
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     node.variables.forEach(visitVariableDeclaration);
     if (node.condition != null) {
       node.condition = checkAndDowncastExpression(
@@ -946,12 +946,12 @@
   }
 
   @override
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     handleNestedFunctionNode(node.function);
   }
 
   @override
-  visitIfStatement(IfStatement node) {
+  void visitIfStatement(IfStatement node) {
     node.condition = checkAndDowncastExpression(
         node.condition, environment.coreTypes.boolLegacyRawType);
     visitStatement(node.then);
@@ -961,12 +961,12 @@
   }
 
   @override
-  visitLabeledStatement(LabeledStatement node) {
+  void visitLabeledStatement(LabeledStatement node) {
     visitStatement(node.body);
   }
 
   @override
-  visitReturnStatement(ReturnStatement node) {
+  void visitReturnStatement(ReturnStatement node) {
     Expression? expression = node.expression;
     if (expression != null) {
       if (currentReturnType == null) {
@@ -982,7 +982,7 @@
   }
 
   @override
-  visitSwitchStatement(SwitchStatement node) {
+  void visitSwitchStatement(SwitchStatement node) {
     visitExpression(node.expression);
     for (SwitchCase switchCase in node.cases) {
       switchCase.expressions.forEach(visitExpression);
@@ -991,7 +991,7 @@
   }
 
   @override
-  visitTryCatch(TryCatch node) {
+  void visitTryCatch(TryCatch node) {
     visitStatement(node.body);
     for (Catch catchClause in node.catches) {
       visitStatement(catchClause.body);
@@ -999,13 +999,13 @@
   }
 
   @override
-  visitTryFinally(TryFinally node) {
+  void visitTryFinally(TryFinally node) {
     visitStatement(node.body);
     visitStatement(node.finalizer);
   }
 
   @override
-  visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(VariableDeclaration node) {
     if (node.initializer != null) {
       node.initializer =
           checkAndDowncastExpression(node.initializer!, node.type);
@@ -1013,14 +1013,14 @@
   }
 
   @override
-  visitWhileStatement(WhileStatement node) {
+  void visitWhileStatement(WhileStatement node) {
     node.condition = checkAndDowncastExpression(
         node.condition, environment.coreTypes.boolLegacyRawType);
     visitStatement(node.body);
   }
 
   @override
-  visitYieldStatement(YieldStatement node) {
+  void visitYieldStatement(YieldStatement node) {
     if (node.isYieldStar) {
       Class container = currentAsyncMarker == AsyncMarker.AsyncStar
           ? coreTypes.streamClass
@@ -1042,35 +1042,35 @@
   }
 
   @override
-  visitFieldInitializer(FieldInitializer node) {
+  void visitFieldInitializer(FieldInitializer node) {
     node.value = checkAndDowncastExpression(node.value, node.field.type);
   }
 
   @override
-  visitRedirectingInitializer(RedirectingInitializer node) {
+  void visitRedirectingInitializer(RedirectingInitializer node) {
     handleCall(node.arguments, node.target.getterType,
         typeParameters: const <TypeParameter>[]);
   }
 
   @override
-  visitSuperInitializer(SuperInitializer node) {
+  void visitSuperInitializer(SuperInitializer node) {
     handleCall(node.arguments, node.target.getterType,
         typeParameters: const <TypeParameter>[],
         receiver: getSuperReceiverType(node.target));
   }
 
   @override
-  visitLocalInitializer(LocalInitializer node) {
+  void visitLocalInitializer(LocalInitializer node) {
     visitVariableDeclaration(node.variable);
   }
 
   @override
-  visitAssertInitializer(AssertInitializer node) {
+  void visitAssertInitializer(AssertInitializer node) {
     visitAssertStatement(node.statement);
   }
 
   @override
-  visitInvalidInitializer(InvalidInitializer node) {}
+  void visitInvalidInitializer(InvalidInitializer node) {}
 
   @override
   DartType visitDynamicGet(DynamicGet node) {
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 7581e08..ec9a9aa 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -23,7 +23,7 @@
   VerificationError(this.context, this.node, this.details);
 
   @override
-  toString() {
+  String toString() {
     Location? location;
     try {
       location = node?.location ?? context?.location;
@@ -98,23 +98,23 @@
         afterConst = afterConst ?? !(isOutline ?? false);
 
   @override
-  defaultTreeNode(TreeNode node) {
+  void defaultTreeNode(TreeNode node) {
     visitChildren(node);
   }
 
   @override
-  defaultConstantReference(Constant constant) {
+  void defaultConstantReference(Constant constant) {
     if (seenConstants.add(constant)) {
       constant.accept(this);
     }
   }
 
   @override
-  defaultConstant(Constant constant) {
+  void defaultConstant(Constant constant) {
     constant.visitChildren(this);
   }
 
-  problem(TreeNode? node, String details, {TreeNode? context}) {
+  void problem(TreeNode? node, String details, {TreeNode? context}) {
     context ??= currentClassOrExtensionOrMember;
     throw new VerificationError(context, node, details);
   }
@@ -211,7 +211,7 @@
   }
 
   @override
-  visitComponent(Component component) {
+  void visitComponent(Component component) {
     try {
       for (Library library in component.libraries) {
         for (Class class_ in library.classes) {
@@ -249,7 +249,7 @@
   }
 
   @override
-  visitExtension(Extension node) {
+  void visitExtension(Extension node) {
     currentExtension = node;
     declareTypeParameters(node.typeParameters);
     final TreeNode? oldParent = enterParent(node);
@@ -281,14 +281,14 @@
   }
 
   @override
-  visitTypedef(Typedef node) {
+  void visitTypedef(Typedef node) {
     checkTypedef(node);
     // Enter and exit the node to check the parent pointer on the typedef node.
     exitParent(enterParent(node));
   }
 
   @override
-  visitField(Field node) {
+  void visitField(Field node) {
     currentMember = node;
     TreeNode? oldParent = enterParent(node);
     bool isTopLevel = node.parent == currentLibrary;
@@ -331,7 +331,7 @@
   }
 
   @override
-  visitProcedure(Procedure node) {
+  void visitProcedure(Procedure node) {
     currentMember = node;
     TreeNode? oldParent = enterParent(node);
     classTypeParametersAreInScope = !node.isStatic;
@@ -382,7 +382,7 @@
   }
 
   @override
-  visitConstructor(Constructor node) {
+  void visitConstructor(Constructor node) {
     currentMember = node;
     classTypeParametersAreInScope = true;
     // The constructor member needs special treatment due to parameters being
@@ -403,7 +403,7 @@
   }
 
   @override
-  visitClass(Class node) {
+  void visitClass(Class node) {
     currentClass = node;
     declareTypeParameters(node.typeParameters);
     TreeNode? oldParent = enterParent(node);
@@ -420,7 +420,7 @@
   }
 
   @override
-  visitFunctionNode(FunctionNode node) {
+  void visitFunctionNode(FunctionNode node) {
     declareTypeParameters(node.typeParameters);
     bool savedInCatchBlock = inCatchBlock;
     AsyncMarker savedAsyncMarker = currentAsyncMarker;
@@ -440,7 +440,7 @@
   }
 
   @override
-  visitFunctionType(FunctionType node) {
+  void visitFunctionType(FunctionType node) {
     for (int i = 1; i < node.namedParameters.length; ++i) {
       if (node.namedParameters[i - 1].compareTo(node.namedParameters[i]) >= 0) {
         problem(currentParent,
@@ -462,22 +462,22 @@
   }
 
   @override
-  visitBlock(Block node) {
+  void visitBlock(Block node) {
     visitWithLocalScope(node);
   }
 
   @override
-  visitForStatement(ForStatement node) {
+  void visitForStatement(ForStatement node) {
     visitWithLocalScope(node);
   }
 
   @override
-  visitForInStatement(ForInStatement node) {
+  void visitForInStatement(ForInStatement node) {
     visitWithLocalScope(node);
   }
 
   @override
-  visitLet(Let node) {
+  void visitLet(Let node) {
     if (_isCompileTimeErrorEncoding(node)) return;
     visitWithLocalScope(node);
   }
@@ -488,7 +488,7 @@
   }
 
   @override
-  visitBlockExpression(BlockExpression node) {
+  void visitBlockExpression(BlockExpression node) {
     int stackHeight = enterLocalScope();
     // Do not visit the block directly because the value expression needs to
     // be in its scope.
@@ -504,7 +504,7 @@
   }
 
   @override
-  visitCatch(Catch node) {
+  void visitCatch(Catch node) {
     bool savedInCatchBlock = inCatchBlock;
     inCatchBlock = true;
     visitWithLocalScope(node);
@@ -550,14 +550,14 @@
   }
 
   @override
-  visitRethrow(Rethrow node) {
+  void visitRethrow(Rethrow node) {
     if (!inCatchBlock) {
       problem(node, "Rethrow must be inside a Catch block.");
     }
   }
 
   @override
-  visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(VariableDeclaration node) {
     TreeNode? parent = node.parent;
     if (parent is! Block &&
         !(parent is Catch && parent.body != node) &&
@@ -586,7 +586,7 @@
   }
 
   @override
-  visitVariableGet(VariableGet node) {
+  void visitVariableGet(VariableGet node) {
     checkVariableInScope(node.variable, node);
     visitChildren(node);
     if (afterConst && node.variable.isConst) {
@@ -595,13 +595,13 @@
   }
 
   @override
-  visitVariableSet(VariableSet node) {
+  void visitVariableSet(VariableSet node) {
     checkVariableInScope(node.variable, node);
     visitChildren(node);
   }
 
   @override
-  visitStaticGet(StaticGet node) {
+  void visitStaticGet(StaticGet node) {
     visitChildren(node);
     // ignore: unnecessary_null_comparison
     if (node.target == null) {
@@ -627,7 +627,7 @@
   }
 
   @override
-  visitStaticSet(StaticSet node) {
+  void visitStaticSet(StaticSet node) {
     visitChildren(node);
     // ignore: unnecessary_null_comparison
     if (node.target == null) {
@@ -642,7 +642,7 @@
   }
 
   @override
-  visitStaticInvocation(StaticInvocation node) {
+  void visitStaticInvocation(StaticInvocation node) {
     checkTargetedInvocation(node.target, node);
     if (node.target.isInstanceMember) {
       problem(node,
@@ -694,7 +694,7 @@
   }
 
   @override
-  visitConstructorInvocation(ConstructorInvocation node) {
+  void visitConstructorInvocation(ConstructorInvocation node) {
     checkTargetedInvocation(node.target, node);
     if (node.target.enclosingClass.isAbstract) {
       problem(node, "ConstructorInvocation of abstract class.");
@@ -730,7 +730,7 @@
   }
 
   @override
-  visitListLiteral(ListLiteral node) {
+  void visitListLiteral(ListLiteral node) {
     visitChildren(node);
     if (afterConst && node.isConst) {
       problem(node, "Constant list literal.");
@@ -738,7 +738,7 @@
   }
 
   @override
-  visitSetLiteral(SetLiteral node) {
+  void visitSetLiteral(SetLiteral node) {
     visitChildren(node);
     if (afterConst && node.isConst) {
       problem(node, "Constant set literal.");
@@ -746,7 +746,7 @@
   }
 
   @override
-  visitMapLiteral(MapLiteral node) {
+  void visitMapLiteral(MapLiteral node) {
     visitChildren(node);
     if (afterConst && node.isConst) {
       problem(node, "Constant map literal.");
@@ -754,14 +754,14 @@
   }
 
   @override
-  visitSymbolLiteral(SymbolLiteral node) {
+  void visitSymbolLiteral(SymbolLiteral node) {
     if (afterConst) {
       problem(node, "Symbol literal.");
     }
   }
 
   @override
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {
     // ignore: unnecessary_null_comparison
     if (node.target == null) {
       problem(node, "No target.");
@@ -777,7 +777,7 @@
   }
 
   @override
-  visitInstanceConstant(InstanceConstant constant) {
+  void visitInstanceConstant(InstanceConstant constant) {
     constant.visitChildren(this);
     if (constant.typeArguments.length !=
         constant.classNode.typeParameters.length) {
@@ -814,7 +814,7 @@
   }
 
   @override
-  visitUnevaluatedConstant(UnevaluatedConstant constant) {
+  void visitUnevaluatedConstant(UnevaluatedConstant constant) {
     if (inUnevaluatedConstant) {
       problem(currentParent, "UnevaluatedConstant in UnevaluatedConstant.");
     }
@@ -828,7 +828,7 @@
   }
 
   @override
-  defaultMemberReference(Member node) {
+  void defaultMemberReference(Member node) {
     if (node.transformerFlags & TransformerFlag.seenByVerifier == 0) {
       problem(
           node, "Dangling reference to '$node', parent is: '${node.parent}'.");
@@ -836,7 +836,7 @@
   }
 
   @override
-  visitClassReference(Class node) {
+  void visitClassReference(Class node) {
     if (!classes.contains(node)) {
       problem(
           node, "Dangling reference to '$node', parent is: '${node.parent}'.");
@@ -844,7 +844,7 @@
   }
 
   @override
-  visitTypedefReference(Typedef node) {
+  void visitTypedefReference(Typedef node) {
     if (!typedefs.contains(node)) {
       problem(
           node, "Dangling reference to '$node', parent is: '${node.parent}'");
@@ -852,7 +852,7 @@
   }
 
   @override
-  visitTypeParameterType(TypeParameterType node) {
+  void visitTypeParameterType(TypeParameterType node) {
     TypeParameter parameter = node.parameter;
     if (!typeParametersInScope.contains(parameter)) {
       TreeNode? owner = parameter.parent is FunctionNode
@@ -872,7 +872,7 @@
   }
 
   @override
-  visitInterfaceType(InterfaceType node) {
+  void visitInterfaceType(InterfaceType node) {
     node.visitChildren(this);
     if (node.typeArguments.length != node.classNode.typeParameters.length) {
       problem(
@@ -902,7 +902,7 @@
   }
 
   @override
-  visitTypedefType(TypedefType node) {
+  void visitTypedefType(TypedefType node) {
     checkTypedef(node.typedefNode);
     node.visitChildren(this);
     if (node.typeArguments.length != node.typedefNode.typeParameters.length) {
@@ -1020,7 +1020,7 @@
   CheckParentPointers([this.parent]);
 
   @override
-  defaultTreeNode(TreeNode node) {
+  void defaultTreeNode(TreeNode node) {
     if (node.parent != parent) {
       throw new VerificationError(
           parent,
diff --git a/pkg/kernel/test/ast_membench.dart b/pkg/kernel/test/ast_membench.dart
index bd448d0..64435d4 100644
--- a/pkg/kernel/test/ast_membench.dart
+++ b/pkg/kernel/test/ast_membench.dart
@@ -8,7 +8,7 @@
 
 /// Builds N copies of the AST for the given component.
 /// Pass --print-metrics to the Dart VM to measure the memory use.
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length == 0) {
     print('USAGE: ast_membench FILE.dill NUM_COPIES');
     exit(1);
diff --git a/pkg/kernel/test/binary/can_read_platform_test.dart b/pkg/kernel/test/binary/can_read_platform_test.dart
index 2b447bc..1ffefab 100644
--- a/pkg/kernel/test/binary/can_read_platform_test.dart
+++ b/pkg/kernel/test/binary/can_read_platform_test.dart
@@ -7,7 +7,7 @@
 import 'package:kernel/binary/ast_from_binary.dart';
 import 'package:kernel/kernel.dart';
 
-main() {
+void main() {
   File exe = new File(Platform.resolvedExecutable).absolute;
   int steps = 0;
   Directory parent = exe.parent.parent;
diff --git a/pkg/kernel/test/binary/component_mode_test.dart b/pkg/kernel/test/binary/component_mode_test.dart
index c036b67..d629db5 100644
--- a/pkg/kernel/test/binary/component_mode_test.dart
+++ b/pkg/kernel/test/binary/component_mode_test.dart
@@ -6,12 +6,12 @@
 
 import 'utils.dart';
 
-main() {
-  setCompileMode(Component c, NonNullableByDefaultCompiledMode mode) {
+void main() {
+  void setCompileMode(Component c, NonNullableByDefaultCompiledMode mode) {
     c.setMainMethodAndMode(null, true, mode);
   }
 
-  verifyMode(Component c, NonNullableByDefaultCompiledMode mode) {
+  void verifyMode(Component c, NonNullableByDefaultCompiledMode mode) {
     if (c.mode != mode) {
       throw "Serialized and re-read component had change in mode: "
           "Expected $mode got ${c.mode}.";
diff --git a/pkg/kernel/test/binary/invalid_index_size.dart b/pkg/kernel/test/binary/invalid_index_size.dart
index 893c14b..7dffdc0 100644
--- a/pkg/kernel/test/binary/invalid_index_size.dart
+++ b/pkg/kernel/test/binary/invalid_index_size.dart
@@ -6,7 +6,7 @@
 
 import 'utils.dart';
 
-main() {
+void main() {
   Uri uri = Uri.parse("foo://bar.dart");
   Library lib1 = new Library(uri, fileUri: uri);
   Component c1 = new Component(libraries: [lib1]);
diff --git a/pkg/kernel/test/binary/lazy_reading_test.dart b/pkg/kernel/test/binary/lazy_reading_test.dart
index f8bec83..d3848a6 100644
--- a/pkg/kernel/test/binary/lazy_reading_test.dart
+++ b/pkg/kernel/test/binary/lazy_reading_test.dart
@@ -6,7 +6,7 @@
 import 'package:kernel/src/tool/find_referenced_libraries.dart';
 import 'utils.dart';
 
-main() {
+void main() {
   Library lib;
   {
     /// Create a library with two classes (A and B) where class A - in its
diff --git a/pkg/kernel/test/binary/library_flags_test.dart b/pkg/kernel/test/binary/library_flags_test.dart
index d8776d6..15f5ac9 100644
--- a/pkg/kernel/test/binary/library_flags_test.dart
+++ b/pkg/kernel/test/binary/library_flags_test.dart
@@ -5,34 +5,34 @@
 import 'utils.dart';
 
 /// Test that library flags are serialized and read correctly.
-main() {
-  setSynthetic(Library lib, bool isSynthetic) {
+void main() {
+  void setSynthetic(Library lib, bool isSynthetic) {
     lib.isSynthetic = isSynthetic;
   }
 
-  verifySynthetic(Library lib, bool isSynthetic) {
+  void verifySynthetic(Library lib, bool isSynthetic) {
     if (lib.isSynthetic != isSynthetic) {
       throw "Serialized and re-read library had change in synthetic flag.";
     }
   }
 
-  setNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
+  void setNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
     lib.isNonNullableByDefault = isNonNullableByDefault;
   }
 
-  verifyNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
+  void verifyNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
     if (lib.isNonNullableByDefault != isNonNullableByDefault) {
       throw "Serialized and re-read library had change in "
           "isNonNullableByDefault flag.";
     }
   }
 
-  setNonNullableByDefaultCompiledMode(Library lib,
+  void setNonNullableByDefaultCompiledMode(Library lib,
       NonNullableByDefaultCompiledMode nonNullableByDefaultCompiledMode) {
     lib.nonNullableByDefaultCompiledMode = nonNullableByDefaultCompiledMode;
   }
 
-  verifyNonNullableByDefaultCompiledMode(Library lib,
+  void verifyNonNullableByDefaultCompiledMode(Library lib,
       NonNullableByDefaultCompiledMode nonNullableByDefaultCompiledMode) {
     if (lib.nonNullableByDefaultCompiledMode !=
         nonNullableByDefaultCompiledMode) {
diff --git a/pkg/kernel/test/binary_bench.dart b/pkg/kernel/test/binary_bench.dart
index 3c63ecd..69043b9 100644
--- a/pkg/kernel/test/binary_bench.dart
+++ b/pkg/kernel/test/binary_bench.dart
@@ -38,7 +38,7 @@
 bool forGolem = false;
 bool forRaw = false;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   if (!_parseArgs(args)) {
     print(usage);
     exit(-1);
@@ -111,7 +111,7 @@
   void report() {
     runsUs.sort();
 
-    P(int p) => runsUs[((runsUs.length - 1) * (p / 100)).ceil()];
+    int P(int p) => runsUs[((runsUs.length - 1) * (p / 100)).ceil()];
 
     final sum = runsUs.reduce(add);
     final avg = sum / runsUs.length;
diff --git a/pkg/kernel/test/class_hierarchy_basic.dart b/pkg/kernel/test/class_hierarchy_basic.dart
index 259fd47..26bf08f 100644
--- a/pkg/kernel/test/class_hierarchy_basic.dart
+++ b/pkg/kernel/test/class_hierarchy_basic.dart
@@ -265,5 +265,5 @@
   int getSuperTypeHashTableSize() => 0;
 
   @override
-  noSuchMethod(inv) => super.noSuchMethod(inv);
+  dynamic noSuchMethod(inv) => super.noSuchMethod(inv);
 }
diff --git a/pkg/kernel/test/class_hierarchy_bench.dart b/pkg/kernel/test/class_hierarchy_bench.dart
index f6bf037..bf79b3c 100644
--- a/pkg/kernel/test/class_hierarchy_bench.dart
+++ b/pkg/kernel/test/class_hierarchy_bench.dart
@@ -26,7 +26,7 @@
 ${argParser.usage}
 ''';
 
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length == 0) {
     print(usage);
     exit(1);
diff --git a/pkg/kernel/test/class_hierarchy_membench.dart b/pkg/kernel/test/class_hierarchy_membench.dart
index 0e6aefa..10d9e43 100644
--- a/pkg/kernel/test/class_hierarchy_membench.dart
+++ b/pkg/kernel/test/class_hierarchy_membench.dart
@@ -26,7 +26,7 @@
 
 /// Builds N copies of the class hierarchy for the given component.
 /// Pass --print-metrics to the Dart VM to measure the memory use.
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length == 0) {
     print(usage);
     exit(1);
diff --git a/pkg/kernel/test/class_hierarchy_self_check.dart b/pkg/kernel/test/class_hierarchy_self_check.dart
index 4cea403..404d074 100644
--- a/pkg/kernel/test/class_hierarchy_self_check.dart
+++ b/pkg/kernel/test/class_hierarchy_self_check.dart
@@ -11,7 +11,7 @@
 import 'dart:math';
 import 'self_check_util.dart';
 
-main(List<String> args) {
+void main(List<String> args) {
   runSelfCheck(args, (String filename) {
     testClassHierarchyOnComponent(loadComponentFromBinary(filename));
   });
diff --git a/pkg/kernel/test/class_hierarchy_test.dart b/pkg/kernel/test/class_hierarchy_test.dart
index f5a2bc5..14a5143 100644
--- a/pkg/kernel/test/class_hierarchy_test.dart
+++ b/pkg/kernel/test/class_hierarchy_test.dart
@@ -11,7 +11,7 @@
 import "package:kernel/text/ast_to_text.dart";
 import "package:kernel/src/text_util.dart";
 
-main() {
+void main() {
   new ClosedWorldClassHierarchyTest().test_applyTreeChanges();
 
   new ClosedWorldClassHierarchyTest().test_applyMemberChanges();
diff --git a/pkg/kernel/test/class_hierarchy_test_disabled.dart b/pkg/kernel/test/class_hierarchy_test_disabled.dart
index 40155b0..bef2d58 100644
--- a/pkg/kernel/test/class_hierarchy_test_disabled.dart
+++ b/pkg/kernel/test/class_hierarchy_test_disabled.dart
@@ -6,7 +6,7 @@
 import 'package:test/test.dart';
 import 'class_hierarchy_self_check.dart';
 
-main() {
+void main() {
   test('All-pairs class hierarchy tests on dart2js', () {
     testClassHierarchyOnComponent(
         loadComponentFromBinary('test/data/dart2js.dill'));
diff --git a/pkg/kernel/test/clone_test.dart b/pkg/kernel/test/clone_test.dart
index 975ca4d..2a8cfb6 100644
--- a/pkg/kernel/test/clone_test.dart
+++ b/pkg/kernel/test/clone_test.dart
@@ -9,7 +9,7 @@
 import 'package:kernel/src/equivalence.dart';
 import 'package:kernel/src/node_creator.dart';
 
-main() {
+void main() {
   testBodyCloning();
   testBodyCloningInContext();
   testMemberCloning();
diff --git a/pkg/kernel/test/constant_equals_test.dart b/pkg/kernel/test/constant_equals_test.dart
index 80611c6..af9e4bc 100644
--- a/pkg/kernel/test/constant_equals_test.dart
+++ b/pkg/kernel/test/constant_equals_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:kernel/ast.dart';
 
-testEquals(Constant a, Constant b) {
+void testEquals(Constant a, Constant b) {
   if (a != b) {
     throw 'Expected $a and $b to be equal.';
   }
@@ -13,13 +13,13 @@
   }
 }
 
-testNotEquals(Constant a, Constant b) {
+void testNotEquals(Constant a, Constant b) {
   if (a == b) {
     throw 'Expected $a and $b to be not equal.';
   }
 }
 
-main() {
+void main() {
   Uri uri = Uri.parse('test:uri');
   Procedure procedure1 = new Procedure(
       new Name('foo'), ProcedureKind.Method, new FunctionNode(null),
diff --git a/pkg/kernel/test/convert_field_to_setter_getter.dart b/pkg/kernel/test/convert_field_to_setter_getter.dart
index 89f1fd9..702b4cf 100644
--- a/pkg/kernel/test/convert_field_to_setter_getter.dart
+++ b/pkg/kernel/test/convert_field_to_setter_getter.dart
@@ -6,7 +6,7 @@
 import 'package:kernel/binary/ast_to_binary.dart';
 import 'binary/utils.dart';
 
-main() {
+void main() {
   final Uri lib1Uri = Uri.parse('org-dartlang:///lib.dart');
   final Library lib1 = new Library(lib1Uri, fileUri: lib1Uri);
   final Field field = new Field.mutable(new Name("f"), fileUri: lib1Uri);
diff --git a/pkg/kernel/test/dart_type_equivalence_test.dart b/pkg/kernel/test/dart_type_equivalence_test.dart
index 41a7a01..fdb27eb 100644
--- a/pkg/kernel/test/dart_type_equivalence_test.dart
+++ b/pkg/kernel/test/dart_type_equivalence_test.dart
@@ -8,7 +8,7 @@
 import 'package:kernel/src/dart_type_equivalence.dart';
 import 'package:kernel/testing/type_parser_environment.dart';
 
-run() {
+void run() {
   // Simple types.
   areEqual("int", "int");
   notEqual("int", "String");
@@ -164,7 +164,7 @@
       equateTopTypes: true, ignoreTopLevelNullability: true);
 }
 
-areEqual(String type1, String type2,
+void areEqual(String type1, String type2,
     {String typeParameters = '',
     bool equateTopTypes = false,
     bool ignoreAllNullabilities = false,
@@ -204,7 +204,7 @@
       "with flags ${flagNamesForDebug.map((f) => "'$f'").join(", ")}.");
 }
 
-notEqual(String type1, String type2,
+void notEqual(String type1, String type2,
     {String typeParameters = '',
     bool equateTopTypes = false,
     bool ignoreAllNullabilities = false,
@@ -244,4 +244,4 @@
       "with flags ${flagNamesForDebug.map((f) => "'$f'").join(", ")}.");
 }
 
-main() => run();
+void main() => run();
diff --git a/pkg/kernel/test/equivalence_test.dart b/pkg/kernel/test/equivalence_test.dart
index f57f2a0..377d0b3 100644
--- a/pkg/kernel/test/equivalence_test.dart
+++ b/pkg/kernel/test/equivalence_test.dart
@@ -125,7 +125,7 @@
 '''),
 ];
 
-main() {
+void main() {
   for (Test test in tests) {
     EquivalenceResult result =
         checkEquivalence(test.a, test.b, strategy: test.strategy);
diff --git a/pkg/kernel/test/equivalent_dill_test.dart b/pkg/kernel/test/equivalent_dill_test.dart
index baac8b3..0b2dfcf 100644
--- a/pkg/kernel/test/equivalent_dill_test.dart
+++ b/pkg/kernel/test/equivalent_dill_test.dart
@@ -10,7 +10,7 @@
 import 'package:kernel/kernel.dart';
 import 'package:kernel/src/equivalence.dart';
 
-main(List<String> args) {
+void main(List<String> args) {
   String resolvedExecutable = Platform.environment['resolvedExecutable'];
   File exe =
       new File(resolvedExecutable ?? Platform.resolvedExecutable).absolute;
diff --git a/pkg/kernel/test/flatten_test.dart b/pkg/kernel/test/flatten_test.dart
index 2c5c656..29c229a 100644
--- a/pkg/kernel/test/flatten_test.dart
+++ b/pkg/kernel/test/flatten_test.dart
@@ -65,7 +65,7 @@
   const Test(this.input, this.output, [this.typeParameters]);
 }
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true);
   ClassHierarchy classHierarchy =
       new ClassHierarchy(env.component, env.coreTypes);
diff --git a/pkg/kernel/test/future_value_type_test.dart b/pkg/kernel/test/future_value_type_test.dart
index 9d0e32e..3127bba 100644
--- a/pkg/kernel/test/future_value_type_test.dart
+++ b/pkg/kernel/test/future_value_type_test.dart
@@ -67,7 +67,7 @@
   'FutureOr<void>*': 'void',
 };
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true)
     ..extendWithTypeParameters('X,'
         'X_extends_FutureInt extends Future<int>,'
diff --git a/pkg/kernel/test/graph_test.dart b/pkg/kernel/test/graph_test.dart
index e6d87db..143ab01 100644
--- a/pkg/kernel/test/graph_test.dart
+++ b/pkg/kernel/test/graph_test.dart
@@ -35,7 +35,7 @@
   Expect.stringEquals(expectedReversed.join(", "), result.join(", "));
 }
 
-main() {
+void main() {
   test("[[B, A], [C], [D]]", {
     "A": ["B"],
     "B": ["A"],
diff --git a/pkg/kernel/test/heap_test.dart b/pkg/kernel/test/heap_test.dart
index 139fe54..5b25dd6 100644
--- a/pkg/kernel/test/heap_test.dart
+++ b/pkg/kernel/test/heap_test.dart
@@ -5,8 +5,8 @@
 import 'package:kernel/src/heap.dart';
 import 'package:test/test.dart';
 
-main() {
-  check_sort(Iterable<int> initialOrder) {
+void main() {
+  void check_sort(Iterable<int> initialOrder) {
     var values = initialOrder.toList();
     var heap = new _intHeap();
     values.forEach(heap.add);
diff --git a/pkg/kernel/test/import_table_test.dart b/pkg/kernel/test/import_table_test.dart
index c64f614..c0d6c0a 100644
--- a/pkg/kernel/test/import_table_test.dart
+++ b/pkg/kernel/test/import_table_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:kernel/import_table.dart';
 
-main() {
+void main() {
   List<String> paths = <String>[];
   paths.add("file://");
   paths.add("file:///a");
diff --git a/pkg/kernel/test/indentation_test.dart b/pkg/kernel/test/indentation_test.dart
index 94bf983..7334393 100644
--- a/pkg/kernel/test/indentation_test.dart
+++ b/pkg/kernel/test/indentation_test.dart
@@ -5,7 +5,7 @@
 import 'package:expect/expect.dart';
 import 'package:kernel/text/indentation.dart' show Indentation;
 
-main() {
+void main() {
   Indentation ind = new Indentation();
 
   Expect.stringEquals("", ind.indentation);
diff --git a/pkg/kernel/test/legacy_erasure_test.dart b/pkg/kernel/test/legacy_erasure_test.dart
index 24b1a33..9dcd4cd 100644
--- a/pkg/kernel/test/legacy_erasure_test.dart
+++ b/pkg/kernel/test/legacy_erasure_test.dart
@@ -53,7 +53,7 @@
   '<T extends List<T>>(T) -> void': '<T extends List<T*>*>(T) ->* void',
 };
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true);
   data.forEach((String input, String output) {
     DartType inputType = env.parseType(input);
diff --git a/pkg/kernel/test/load_concat_dill_keeps_source_test.dart b/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
index e8debc6..f898b77 100644
--- a/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
+++ b/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
@@ -13,7 +13,7 @@
 Uri uri1 = Uri.parse("foo://lib1.dart");
 Uri uri2 = Uri.parse("foo://lib2.dart");
 
-main() {
+void main() {
   Library library1 = new Library(uri1, fileUri: uri1);
   Library library2 = new Library(uri2, fileUri: uri2);
   Procedure p1 = new Procedure(new Name("p1"), ProcedureKind.Method,
diff --git a/pkg/kernel/test/metadata_test.dart b/pkg/kernel/test/metadata_test.dart
index fbdc952..9845b01 100644
--- a/pkg/kernel/test/metadata_test.dart
+++ b/pkg/kernel/test/metadata_test.dart
@@ -106,7 +106,7 @@
   Visitor(this.predicate, this.handle);
 
   @override
-  defaultTreeNode(TreeNode node) {
+  void defaultTreeNode(TreeNode node) {
     super.defaultTreeNode(node);
     if (MetadataRepository.isSupported(node) && predicate(node)) {
       handle(node);
@@ -154,7 +154,7 @@
   return sink.builder.takeBytes();
 }
 
-main() async {
+void main() async {
   bool anyNode(TreeNode node) => true;
   bool onlyMethods(TreeNode node) =>
       node is Procedure &&
diff --git a/pkg/kernel/test/nnbd_top_merge_test.dart b/pkg/kernel/test/nnbd_top_merge_test.dart
index c6255f1..9f0bc71 100644
--- a/pkg/kernel/test/nnbd_top_merge_test.dart
+++ b/pkg/kernel/test/nnbd_top_merge_test.dart
@@ -121,7 +121,7 @@
   '<T>(T) -> void vs <T>(invalid) -> void': '<T>(invalid) -> void',
 };
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true);
   data.forEach((String input, dynamic output) {
     List<String> parts = input.split(' vs ');
diff --git a/pkg/kernel/test/non_null_test.dart b/pkg/kernel/test/non_null_test.dart
index 3fc2b89..7ec2800 100644
--- a/pkg/kernel/test/non_null_test.dart
+++ b/pkg/kernel/test/non_null_test.dart
@@ -77,7 +77,7 @@
       'Y_extends_dynamic & X_extends_dynamic',
 };
 
-main() {
+void main() {
   Env env = new Env('', isNonNullableByDefault: true)
     ..extendWithTypeParameters('X,'
         'X_extends_Object extends Object,'
diff --git a/pkg/kernel/test/norm_test.dart b/pkg/kernel/test/norm_test.dart
index 0e1c9b1..6ae7be5 100644
--- a/pkg/kernel/test/norm_test.dart
+++ b/pkg/kernel/test/norm_test.dart
@@ -8,7 +8,7 @@
 import 'package:kernel/src/norm.dart';
 import 'package:kernel/testing/type_parser_environment.dart';
 
-run() {
+void run() {
   checkNormToSame('Null');
   checkNormToSame('Never');
   check('Never?', 'Null');
@@ -142,7 +142,7 @@
       'FutureOr<FutureOr<FutureOr<int>>?>?');
 }
 
-check(String input, String output, [String typeParameters = '']) {
+void check(String input, String output, [String typeParameters = '']) {
   Env env = new Env('', isNonNullableByDefault: true)
     ..extendWithTypeParameters(typeParameters);
   DartType inputType = env.parseType(input);
@@ -157,8 +157,8 @@
       "Actual: ${actualOutputType}");
 }
 
-checkNormToSame(String type, [String typeParameters = '']) {
+void checkNormToSame(String type, [String typeParameters = '']) {
   return check(type, type, typeParameters);
 }
 
-main() => run();
+void main() => run();
diff --git a/pkg/kernel/test/relink_test.dart b/pkg/kernel/test/relink_test.dart
index 47da2a9..cbb64a4 100644
--- a/pkg/kernel/test/relink_test.dart
+++ b/pkg/kernel/test/relink_test.dart
@@ -7,7 +7,7 @@
 import 'package:kernel/src/tool/find_referenced_libraries.dart';
 import 'binary/utils.dart';
 
-main() {
+void main() {
   Component component1 = createComponent(42);
   Component component2 = createComponent(43);
 
diff --git a/pkg/kernel/test/self_check_util.dart b/pkg/kernel/test/self_check_util.dart
index 1ebdd39..d30640e 100644
--- a/pkg/kernel/test/self_check_util.dart
+++ b/pkg/kernel/test/self_check_util.dart
@@ -15,7 +15,7 @@
 ///
 /// The test can either be run with a single file passed on the command line
 /// or run in batch mode.
-runSelfCheck(List<String> args, void runTest(String filename)) {
+void runSelfCheck(List<String> args, void runTest(String filename)) {
   Future<CompilerOutcome> batchMain(List<String> arguments) async {
     if (arguments.length != 1) {
       throw 'Exactly one argument expected';
diff --git a/pkg/kernel/test/serialize_bench.dart b/pkg/kernel/test/serialize_bench.dart
index 72853ae..c3cd92b 100644
--- a/pkg/kernel/test/serialize_bench.dart
+++ b/pkg/kernel/test/serialize_bench.dart
@@ -12,7 +12,7 @@
 the time it takes, including I/O time.
 ''';
 
-main(List<String> args) async {
+void main(List<String> args) async {
   if (args.length != 2) {
     print(usage);
     exit(1);
diff --git a/pkg/kernel/test/type_hashcode_quality.dart b/pkg/kernel/test/type_hashcode_quality.dart
index 8bf1f34..2e26555 100644
--- a/pkg/kernel/test/type_hashcode_quality.dart
+++ b/pkg/kernel/test/type_hashcode_quality.dart
@@ -31,7 +31,7 @@
   int numberOfTypes = 0;
 
   @override
-  defaultDartType(DartType node) {
+  void defaultDartType(DartType node) {
     if (!seenTypes.add(node)) return;
     ++numberOfTypes;
     int hash = node.hashCode;
diff --git a/pkg/kernel/test/type_parser_test.dart b/pkg/kernel/test/type_parser_test.dart
index 5a2e651..30caba1 100644
--- a/pkg/kernel/test/type_parser_test.dart
+++ b/pkg/kernel/test/type_parser_test.dart
@@ -6,11 +6,11 @@
 
 import 'package:kernel/testing/type_parser.dart';
 
-testParse(String text) {
+void testParse(String text) {
   Expect.stringEquals(text.trim(), "${parse(text).join('\n')}");
 }
 
-main() {
+void main() {
   testParse("""
 () ->* void
 () ->? void
diff --git a/pkg/kernel/test/type_substitute_bounds_test.dart b/pkg/kernel/test/type_substitute_bounds_test.dart
index 19436dc..116bddd 100644
--- a/pkg/kernel/test/type_substitute_bounds_test.dart
+++ b/pkg/kernel/test/type_substitute_bounds_test.dart
@@ -63,7 +63,7 @@
   return new TestCase(type, bounds, expected);
 }
 
-main() {
+void main() {
   for (var testCase in testCases) {
     test('$testCase', () {
       var environment = new LazyTypeEnvironment();
diff --git a/pkg/kernel/test/type_substitution_identity_test.dart b/pkg/kernel/test/type_substitution_identity_test.dart
index d8fabbd..a86eea1 100644
--- a/pkg/kernel/test/type_substitution_identity_test.dart
+++ b/pkg/kernel/test/type_substitution_identity_test.dart
@@ -8,7 +8,7 @@
 import 'type_hashcode_test.dart' show testCases;
 import 'package:test/test.dart';
 
-checkType(DartType type) {
+void checkType(DartType type) {
   var map = {new TypeParameter(): const DynamicType()};
   var other = substitute(type, map);
   if (!identical(type, other)) {
@@ -20,7 +20,7 @@
   }
 }
 
-main() {
+void main() {
   for (var testCase in testCases) {
     test('$testCase', () {
       var env = new LazyTypeEnvironment();
diff --git a/pkg/kernel/test/typedef_unalias_test.dart b/pkg/kernel/test/typedef_unalias_test.dart
index 196ac3f..b9a5a41 100644
--- a/pkg/kernel/test/typedef_unalias_test.dart
+++ b/pkg/kernel/test/typedef_unalias_test.dart
@@ -14,7 +14,7 @@
   });
 }
 
-main() {
+void main() {
   harnessTest('`Foo` where typedef Foo = C', (TestHarness harness) {
     var foo = new Typedef('Foo', harness.otherLegacyRawType, fileUri: dummyUri);
     harness.enclosingLibrary.addTypedef(foo);
diff --git a/pkg/kernel/test/union_find_test.dart b/pkg/kernel/test/union_find_test.dart
index 2e5249d..94226ac 100644
--- a/pkg/kernel/test/union_find_test.dart
+++ b/pkg/kernel/test/union_find_test.dart
@@ -4,11 +4,11 @@
 
 import 'package:kernel/src/union_find.dart';
 
-testSame<T>(UnionFind<T> unionFind, T a, T b, bool expected) {
+void testSame<T>(UnionFind<T> unionFind, T a, T b, bool expected) {
   expect(expected, unionFind.nodesInSameSet(unionFind[a], unionFind[b]));
 }
 
-testSets<T>(UnionFind<T> unionFind, Set<Set<T>> sets) {
+void testSets<T>(UnionFind<T> unionFind, Set<Set<T>> sets) {
   for (Set<T> set in sets) {
     UnionFindNode<T> root = unionFind.findNode(unionFind[set.first]);
     for (T value in unionFind.values) {
@@ -17,15 +17,15 @@
   }
 }
 
-testFind<T>(UnionFind<T> unionFind, T value, T expected) {
+void testFind<T>(UnionFind<T> unionFind, T value, T expected) {
   expect(expected, unionFind.findNode(unionFind[value]).value);
 }
 
-testUnion<T>(UnionFind<T> unionFind, T a, T b, T expected) {
+void testUnion<T>(UnionFind<T> unionFind, T a, T b, T expected) {
   expect(expected, unionFind.unionOfNodes(unionFind[a], unionFind[b]).value);
 }
 
-main() {
+void main() {
   UnionFind<int> unionFind = new UnionFind();
   // {0}
   testFind(unionFind, 0, 0);
@@ -103,6 +103,6 @@
   });
 }
 
-expect(expected, actual) {
+void expect(expected, actual) {
   if (expected != actual) throw 'Expected $expected, actual $actual';
 }
diff --git a/pkg/kernel/test/verify_bench.dart b/pkg/kernel/test/verify_bench.dart
index c5fc42e..d8e5a61 100644
--- a/pkg/kernel/test/verify_bench.dart
+++ b/pkg/kernel/test/verify_bench.dart
@@ -13,7 +13,7 @@
 Measures the time it takes to run kernel verifier on the given component.
 ''';
 
-main(List<String> args) {
+void main(List<String> args) {
   if (args.length != 1) {
     print(usage);
     exit(1);
diff --git a/pkg/kernel/test/verify_self_check.dart b/pkg/kernel/test/verify_self_check.dart
index bc9b184..ee84f9f 100644
--- a/pkg/kernel/test/verify_self_check.dart
+++ b/pkg/kernel/test/verify_self_check.dart
@@ -7,7 +7,7 @@
 
 import 'self_check_util.dart';
 
-main(List<String> args) {
+void main(List<String> args) {
   runSelfCheck(args, (String filename) {
     verifyComponent(loadComponentFromBinary(filename));
   });
diff --git a/pkg/kernel/test/verify_test.dart b/pkg/kernel/test/verify_test.dart
index 97919d4..c80dfaa 100644
--- a/pkg/kernel/test/verify_test.dart
+++ b/pkg/kernel/test/verify_test.dart
@@ -14,7 +14,7 @@
 ///
 /// We mostly test negative cases here, as we get plenty of positive cases by
 /// compiling the Dart test suite with the verifier enabled.
-main() {
+void main() {
   positiveTest(
     'Test harness has no errors',
     (TestHarness test) {
@@ -672,7 +672,7 @@
   );
 }
 
-checkHasError(Component component, Matcher matcher) {
+void checkHasError(Component component, Matcher matcher) {
   try {
     verifyComponent(component);
   } on VerificationError catch (e) {
@@ -802,7 +802,7 @@
   }
 }
 
-negative1Test(String name, Node? Function(TestHarness test) nodeProvider,
+void negative1Test(String name, Node? Function(TestHarness test) nodeProvider,
     dynamic Function(Node? node) matcher) {
   TestHarness testHarness = new TestHarness();
   Node? node = nodeProvider(testHarness);
@@ -818,7 +818,9 @@
   );
 }
 
-negative2Test(String name, List<Node?> Function(TestHarness test) nodeProvider,
+void negative2Test(
+    String name,
+    List<Node?> Function(TestHarness test) nodeProvider,
     dynamic Function(Node? node, Node? other) matcher) {
   TestHarness testHarness = new TestHarness();
   List<Node?> nodes = nodeProvider(testHarness);
@@ -835,7 +837,7 @@
   );
 }
 
-simpleNegativeTest(String name, dynamic matcher,
+void simpleNegativeTest(String name, dynamic matcher,
     void Function(TestHarness test) makeTestCase) {
   TestHarness testHarness = new TestHarness();
   test(
@@ -850,7 +852,7 @@
   );
 }
 
-positiveTest(String name, void makeTestCase(TestHarness test)) {
+void positiveTest(String name, void makeTestCase(TestHarness test)) {
   test(
     name,
     () {
diff --git a/pkg/kernel/tool/smoke_test_quick.dart b/pkg/kernel/tool/smoke_test_quick.dart
index b5a0b9a..a6969ac 100644
--- a/pkg/kernel/tool/smoke_test_quick.dart
+++ b/pkg/kernel/tool/smoke_test_quick.dart
@@ -8,7 +8,7 @@
 
 String get dartVm => Platform.executable;
 
-main(List<String> args) async {
+void main(List<String> args) async {
   Stopwatch stopwatch = new Stopwatch()..start();
   List<Future> futures = <Future>[];
   futures.add(run("pkg/front_end/test/spelling_test_src_suite.dart",
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index f6d1c44..5847891 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -50,23 +50,20 @@
   bool get supportsSetLiterals => false;
 
   @override
-  int get enabledLateLowerings => flags.forceLateLoweringsForTesting;
+  int get enabledLateLowerings => LateLowering.none;
 
   @override
-  bool get supportsLateLoweringSentinel =>
-      flags.forceLateLoweringSentinelForTesting;
+  bool get supportsLateLoweringSentinel => false;
 
   @override
-  bool get useStaticFieldLowering => flags.forceStaticFieldLoweringForTesting;
+  bool get useStaticFieldLowering => false;
 
   @override
-  bool get supportsExplicitGetterCalls =>
-      !flags.forceNoExplicitGetterCallsForTesting;
+  bool get supportsExplicitGetterCalls => true;
 
   @override
   int get enabledConstructorTearOffLowerings =>
-      ConstructorTearOffLowering.typedefs |
-      flags.forceConstructorTearOffLoweringForTesting;
+      ConstructorTearOffLowering.typedefs;
 
   @override
   String get name => 'vm';
diff --git a/runtime/lib/double.cc b/runtime/lib/double.cc
index 53e38dc..a731707 100644
--- a/runtime/lib/double.cc
+++ b/runtime/lib/double.cc
@@ -67,23 +67,6 @@
   return Double::New(left / right);
 }
 
-static IntegerPtr DoubleToInteger(double val, const char* error_msg) {
-  if (isinf(val) || isnan(val)) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, String::Handle(String::New(error_msg)));
-    Exceptions::ThrowByType(Exceptions::kUnsupported, args);
-  }
-  int64_t ival = 0;
-  if (val <= static_cast<double>(kMinInt64)) {
-    ival = kMinInt64;
-  } else if (val >= static_cast<double>(kMaxInt64)) {
-    ival = kMaxInt64;
-  } else {  // Representable in int64_t.
-    ival = static_cast<int64_t>(val);
-  }
-  return Integer::New(ival);
-}
-
 DEFINE_NATIVE_ENTRY(Double_hashCode, 0, 1) {
   double val = Double::CheckedHandle(zone, arguments->NativeArgAt(0)).value();
   if (FLAG_trace_intrinsified_natives) {
@@ -176,7 +159,7 @@
 
 DEFINE_NATIVE_ENTRY(Double_toInt, 0, 1) {
   const Double& arg = Double::CheckedHandle(zone, arguments->NativeArgAt(0));
-  return DoubleToInteger(arg.value(), "Infinity or NaN toInt");
+  return DoubleToInteger(zone, arg.value());
 }
 
 DEFINE_NATIVE_ENTRY(Double_parse, 0, 3) {
diff --git a/runtime/observatory/lib/src/elements/heap_snapshot.dart b/runtime/observatory/lib/src/elements/heap_snapshot.dart
index e83ec9e..0aae569 100644
--- a/runtime/observatory/lib/src/elements/heap_snapshot.dart
+++ b/runtime/observatory/lib/src/elements/heap_snapshot.dart
@@ -642,6 +642,7 @@
     var blob = new Blob(_snapshotA!.chunks, 'application/octet-stream');
     var blobUrl = Url.createObjectUrl(blob);
     var link = new AnchorElement();
+    // ignore: unsafe_html
     link.href = blobUrl;
     var now = new DateTime.now();
     link.download = 'dart-heap-${now.year}-${now.month}-${now.day}.bin';
diff --git a/runtime/observatory/lib/src/elements/process_snapshot.dart b/runtime/observatory/lib/src/elements/process_snapshot.dart
index 66ad120..3c64441 100644
--- a/runtime/observatory/lib/src/elements/process_snapshot.dart
+++ b/runtime/observatory/lib/src/elements/process_snapshot.dart
@@ -134,6 +134,7 @@
     var blob = new Blob([jsonEncode(_snapshotA)], 'application/json');
     var blobUrl = Url.createObjectUrl(blob);
     var link = new AnchorElement();
+    // ignore: unsafe_html
     link.href = blobUrl;
     var now = new DateTime.now();
     link.download = 'dart-process-${now.year}-${now.month}-${now.day}.json';
diff --git a/runtime/observatory/lib/src/elements/timeline/dashboard.dart b/runtime/observatory/lib/src/elements/timeline/dashboard.dart
index d3c7e4b..5aca24a 100644
--- a/runtime/observatory/lib/src/elements/timeline/dashboard.dart
+++ b/runtime/observatory/lib/src/elements/timeline/dashboard.dart
@@ -91,6 +91,7 @@
     if (_content == null) {
       _content = new DivElement()..classes = ['content-centered-big'];
     }
+    // ignore: unsafe_html
     _frame!.src = _makeFrameUrl();
     _content!.children = <Element>[
       new HeadingElement.h2()
diff --git a/runtime/observatory/lib/src/elements/timeline_page.dart b/runtime/observatory/lib/src/elements/timeline_page.dart
index 2a17e2b..d4b1a26 100644
--- a/runtime/observatory/lib/src/elements/timeline_page.dart
+++ b/runtime/observatory/lib/src/elements/timeline_page.dart
@@ -185,6 +185,7 @@
                 "This VM is forwarding timeline events to Fuchsia's system tracing. See the ",
           new AnchorElement()
             ..text = "Fuchsia Tracing Usage Guide"
+            // ignore: unsafe_html
             ..href = "https://fuchsia.dev/fuchsia-src/development/tracing",
           new SpanElement()..text = ".",
         ];
@@ -200,6 +201,7 @@
                 "This VM is forwarding timeline events to Android's systrace. See the ",
           new AnchorElement()
             ..text = "systrace usage guide"
+            // ignore: unsafe_html
             ..href =
                 "https://developer.android.com/studio/command-line/systrace",
           new SpanElement()..text = ".",
@@ -217,6 +219,7 @@
                     "To track these events, open 'Instruments' and add the 'os_signpost' Filter. See the ",
           new AnchorElement()
             ..text = "Instruments Usage Guide"
+            // ignore: unsafe_html
             ..href = "https://help.apple.com/instruments",
           new SpanElement()..text = ".",
         ];
diff --git a/runtime/observatory/lib/src/elements/view_footer.dart b/runtime/observatory/lib/src/elements/view_footer.dart
index 4d52516..1c8505b 100644
--- a/runtime/observatory/lib/src/elements/view_footer.dart
+++ b/runtime/observatory/lib/src/elements/view_footer.dart
@@ -38,9 +38,11 @@
   void render() {
     children = <Element>[
       new AnchorElement()
+        // ignore: unsafe_html
         ..href = 'https://dart-lang.github.io/observatory/'
         ..text = 'View documentation',
       new AnchorElement()
+        // ignore: unsafe_html
         ..href =
             'https://github.com/dart-lang/sdk/issues/new?title=Observatory:&amp;body=Observatory%20Feedback'
         ..text = 'File a bug report'
diff --git a/runtime/observatory_2/lib/src/elements/heap_snapshot.dart b/runtime/observatory_2/lib/src/elements/heap_snapshot.dart
index 4fde130..3ab4f6c 100644
--- a/runtime/observatory_2/lib/src/elements/heap_snapshot.dart
+++ b/runtime/observatory_2/lib/src/elements/heap_snapshot.dart
@@ -642,6 +642,7 @@
     var blob = new Blob(_snapshotA.chunks, 'application/octet-stream');
     var blobUrl = Url.createObjectUrl(blob);
     var link = new AnchorElement();
+    // ignore: unsafe_html
     link.href = blobUrl;
     var now = new DateTime.now();
     link.download = 'dart-heap-${now.year}-${now.month}-${now.day}.bin';
diff --git a/runtime/observatory_2/lib/src/elements/process_snapshot.dart b/runtime/observatory_2/lib/src/elements/process_snapshot.dart
index 82593da..c3798c8 100644
--- a/runtime/observatory_2/lib/src/elements/process_snapshot.dart
+++ b/runtime/observatory_2/lib/src/elements/process_snapshot.dart
@@ -134,6 +134,7 @@
     var blob = new Blob([jsonEncode(_snapshotA)], 'application/json');
     var blobUrl = Url.createObjectUrl(blob);
     var link = new AnchorElement();
+    // ignore: unsafe_html
     link.href = blobUrl;
     var now = new DateTime.now();
     link.download = 'dart-process-${now.year}-${now.month}-${now.day}.json';
diff --git a/runtime/observatory_2/lib/src/elements/timeline/dashboard.dart b/runtime/observatory_2/lib/src/elements/timeline/dashboard.dart
index 8826324..6e54478 100644
--- a/runtime/observatory_2/lib/src/elements/timeline/dashboard.dart
+++ b/runtime/observatory_2/lib/src/elements/timeline/dashboard.dart
@@ -91,6 +91,7 @@
     if (_content == null) {
       _content = new DivElement()..classes = ['content-centered-big'];
     }
+    // ignore: unsafe_html
     _frame.src = _makeFrameUrl();
     _content.children = <Element>[
       new HeadingElement.h2()
diff --git a/runtime/observatory_2/lib/src/elements/timeline_page.dart b/runtime/observatory_2/lib/src/elements/timeline_page.dart
index d16c393..aed6e5a 100644
--- a/runtime/observatory_2/lib/src/elements/timeline_page.dart
+++ b/runtime/observatory_2/lib/src/elements/timeline_page.dart
@@ -184,6 +184,7 @@
                 "This VM is forwarding timeline events to Fuchsia's system tracing. See the ",
           new AnchorElement()
             ..text = "Fuchsia Tracing Usage Guide"
+            // ignore: unsafe_html
             ..href = "https://fuchsia.dev/fuchsia-src/development/tracing",
           new SpanElement()..text = ".",
         ];
@@ -199,6 +200,7 @@
                 "This VM is forwarding timeline events to Android's systrace. See the ",
           new AnchorElement()
             ..text = "systrace usage guide"
+            // ignore: unsafe_html
             ..href =
                 "https://developer.android.com/studio/command-line/systrace",
           new SpanElement()..text = ".",
@@ -216,6 +218,7 @@
                     "To track these events, open 'Instruments' and add the 'os_signpost' Filter. See the ",
           new AnchorElement()
             ..text = "Instruments Usage Guide"
+            // ignore: unsafe_html
             ..href = "https://help.apple.com/instruments",
           new SpanElement()..text = ".",
         ];
diff --git a/runtime/observatory_2/lib/src/elements/view_footer.dart b/runtime/observatory_2/lib/src/elements/view_footer.dart
index d3fddb7..2f02451 100644
--- a/runtime/observatory_2/lib/src/elements/view_footer.dart
+++ b/runtime/observatory_2/lib/src/elements/view_footer.dart
@@ -38,9 +38,11 @@
   void render() {
     children = <Element>[
       new AnchorElement()
+        // ignore: unsafe_html
         ..href = 'https://dart-lang.github.io/observatory/'
         ..text = 'View documentation',
       new AnchorElement()
+        // ignore: unsafe_html
         ..href =
             'https://github.com/dart-lang/sdk/issues/new?title=Observatory:&amp;body=Observatory%20Feedback'
         ..text = 'File a bug report'
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index 9c82199..f29a90a 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -992,31 +992,6 @@
   }
 }
 
-void AsmIntrinsifier::DoubleToInteger(Assembler* assembler,
-                                      Label* normal_ir_body) {
-  if (TargetCPUFeatures::vfp_supported()) {
-    Label fall_through;
-
-    __ ldr(R0, Address(SP, 0 * target::kWordSize));
-    __ LoadDFromOffset(D0, R0, target::Double::value_offset() - kHeapObjectTag);
-
-    // Explicit NaN check, since ARM gives an FPU exception if you try to
-    // convert NaN to an int.
-    __ vcmpd(D0, D0);
-    __ vmstat();
-    __ b(normal_ir_body, VS);
-
-    __ vcvtid(S0, D0);
-    __ vmovrs(R0, S0);
-    // Overflow is signaled with minint.
-    // Check for overflow and that it fits into Smi.
-    __ CompareImmediate(R0, 0xC0000000);
-    __ SmiTag(R0, PL);
-    READS_RETURN_ADDRESS_FROM_LR(__ bx(LR, PL));
-    __ Bind(normal_ir_body);
-  }
-}
-
 void AsmIntrinsifier::Double_hashCode(Assembler* assembler,
                                       Label* normal_ir_body) {
   // TODO(dartbug.com/31174): Convert this to a graph intrinsic.
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index d4bd868..df3c817 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -1133,35 +1133,6 @@
   __ ret();
 }
 
-void AsmIntrinsifier::DoubleToInteger(Assembler* assembler,
-                                      Label* normal_ir_body) {
-  __ ldr(R0, Address(SP, 0 * target::kWordSize));
-  __ LoadDFieldFromOffset(V0, R0, target::Double::value_offset());
-
-  // Explicit NaN check, since ARM gives an FPU exception if you try to
-  // convert NaN to an int.
-  __ fcmpd(V0, V0);
-  __ b(normal_ir_body, VS);
-
-  __ fcvtzdsx(R0, V0);
-
-#if !defined(DART_COMPRESSED_POINTERS)
-  // Overflow is signaled with minint.
-  // Check for overflow and that it fits into Smi.
-  __ CompareImmediate(R0, 0xC000000000000000);
-  __ b(normal_ir_body, MI);
-#else
-  // Overflow is signaled with minint.
-  // Check for overflow and that it fits into Smi.
-  __ AsrImmediate(TMP, R0, 30);
-  __ cmp(TMP, Operand(R0, ASR, 63));
-  __ b(normal_ir_body, NE);
-#endif
-  __ SmiTag(R0);
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Double_hashCode(Assembler* assembler,
                                       Label* normal_ir_body) {
   // TODO(dartbug.com/31174): Convert this to a graph intrinsic.
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index 46dc44b..7cb2f54 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -1109,20 +1109,6 @@
   __ jmp(&is_false, Assembler::kNearJump);
 }
 
-void AsmIntrinsifier::DoubleToInteger(Assembler* assembler,
-                                      Label* normal_ir_body) {
-  __ movl(EAX, Address(ESP, +1 * target::kWordSize));
-  __ movsd(XMM0, FieldAddress(EAX, target::Double::value_offset()));
-  __ cvttsd2si(EAX, XMM0);
-  // Overflow is signalled with minint.
-  // Check for overflow and that it fits into Smi.
-  __ cmpl(EAX, Immediate(0xC0000000));
-  __ j(NEGATIVE, normal_ir_body, Assembler::kNearJump);
-  __ SmiTag(EAX);
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Double_hashCode(Assembler* assembler,
                                       Label* normal_ir_body) {
   // TODO(dartbug.com/31174): Convert this to a graph intrinsic.
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index f3ab614..8a57264 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -1006,21 +1006,6 @@
   __ jmp(&is_false, Assembler::kNearJump);
 }
 
-void AsmIntrinsifier::DoubleToInteger(Assembler* assembler,
-                                      Label* normal_ir_body) {
-  __ movq(RAX, Address(RSP, +1 * target::kWordSize));
-  __ movsd(XMM0, FieldAddress(RAX, target::Double::value_offset()));
-  __ OBJ(cvttsd2si)(RAX, XMM0);
-  // Overflow is signalled with minint.
-  // Check for overflow and that it fits into Smi.
-  __ movq(RCX, RAX);
-  __ OBJ(shl)(RCX, Immediate(1));
-  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
-  __ SmiTag(RAX);
-  __ ret();
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::Double_hashCode(Assembler* assembler,
                                       Label* normal_ir_body) {
   // TODO(dartbug.com/31174): Convert this to a graph intrinsic.
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index 025bd56..abb82a1 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -1040,12 +1040,18 @@
                       Register base,
                       int32_t offset,
                       Condition cond = AL);
+
   void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset) {
     LoadDFromOffset(EvenDRegisterOf(dst), base, offset);
   }
   void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
     StoreDToOffset(EvenDRegisterOf(src), base, offset);
   }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    if (src != dst) {
+      vmovd(EvenDRegisterOf(dst), EvenDRegisterOf(src));
+    }
+  }
 
   void LoadMultipleDFromOffset(DRegister first,
                                intptr_t count,
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 4f8c93b..3826473 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -1814,6 +1814,11 @@
   void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
     StoreDToOffset(src, base, offset);
   }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    if (src != dst) {
+      fmovdd(dst, src);
+    }
+  }
 
   void LoadCompressed(Register dest, const Address& slot);
   void LoadCompressedFromOffset(Register dest, Register base, int32_t offset);
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 24256d6..091b2a1 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -654,12 +654,19 @@
   void StoreMemoryValue(Register src, Register base, int32_t offset) {
     movl(Address(base, offset), src);
   }
+
   void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset) {
     movsd(dst, Address(base, offset));
   }
   void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
     movsd(Address(base, offset), src);
   }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    if (src != dst) {
+      movaps(dst, src);
+    }
+  }
+
   void LoadAcquire(Register dst, Register address, int32_t offset = 0) {
     // On intel loads have load-acquire behavior (i.e. loads are not re-ordered
     // with other loads).
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index f14cd1e..e32a0a4 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -1027,12 +1027,18 @@
   void StoreMemoryValue(Register src, Register base, int32_t offset) {
     movq(Address(base, offset), src);
   }
+
   void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset) {
     movsd(dst, Address(base, offset));
   }
   void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
     movsd(Address(base, offset), src);
   }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    if (src != dst) {
+      movaps(dst, src);
+    }
+  }
 
 #if defined(USING_THREAD_SANITIZER)
   void TsanLoadAcquire(Address addr);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index dfe4a43..d920a61 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -771,6 +771,7 @@
     assembler()->set_lr_state(lr_state);
 #endif  // defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
     set_current_instruction(slow_path->instruction());
+    set_current_block(current_instruction_->GetBlock());
     SpecialStatsBegin(stats_tag);
     BeginCodeSourceRange(slow_path->instruction()->source());
     DEBUG_ONLY(current_instruction_ = slow_path->instruction());
@@ -779,6 +780,7 @@
     EndCodeSourceRange(slow_path->instruction()->source());
     SpecialStatsEnd(stats_tag);
     set_current_instruction(nullptr);
+    set_current_block(nullptr);
   }
   // All code generated by deferred deopt info is treated as in the root
   // function.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index 0171f8b..c49546e 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -298,6 +298,17 @@
   const Register result_;
 };
 
+class DoubleToIntegerSlowPath : public TemplateSlowPathCode<Instruction> {
+ public:
+  DoubleToIntegerSlowPath(Instruction* instruction, FpuRegister value_reg)
+      : TemplateSlowPathCode(instruction), value_reg_(value_reg) {}
+
+  virtual void EmitNativeCode(FlowGraphCompiler* compiler);
+
+ private:
+  FpuRegister value_reg_;
+};
+
 // Slow path code which calls runtime entry to throw an exception.
 class ThrowErrorSlowPathCode : public TemplateSlowPathCode<Instruction> {
  public:
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 4b0f692..746b275 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -249,10 +249,7 @@
       // In unoptimized code at instruction epilogue the only
       // live register is an output register.
       instr->locs()->live_registers()->Clear();
-      if (value.fpu_reg() != BoxDoubleStubABI::kValueReg) {
-        __ vmovd(EvenDRegisterOf(BoxDoubleStubABI::kValueReg),
-                 EvenDRegisterOf(value.fpu_reg()));
-      }
+      __ MoveUnboxedDouble(BoxDoubleStubABI::kValueReg, value.fpu_reg());
       GenerateNonLazyDeoptableStubCall(
           InstructionSource(),  // No token position.
           StubCode::BoxDouble(), UntaggedPcDescriptors::kOther, instr->locs());
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index 586f923..4cc8af9 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -240,9 +240,7 @@
       // In unoptimized code at instruction epilogue the only
       // live register is an output register.
       instr->locs()->live_registers()->Clear();
-      if (value.fpu_reg() != BoxDoubleStubABI::kValueReg) {
-        __ fmovdd(BoxDoubleStubABI::kValueReg, value.fpu_reg());
-      }
+      __ MoveUnboxedDouble(BoxDoubleStubABI::kValueReg, value.fpu_reg());
       GenerateNonLazyDeoptableStubCall(
           InstructionSource(),  // No token position.
           StubCode::BoxDouble(), UntaggedPcDescriptors::kOther, instr->locs());
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index ddbd741..5201548 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -369,9 +369,7 @@
       // In unoptimized code at instruction epilogue the only
       // live register is an output register.
       instr->locs()->live_registers()->Clear();
-      if (value.fpu_reg() != BoxDoubleStubABI::kValueReg) {
-        __ movaps(BoxDoubleStubABI::kValueReg, value.fpu_reg());
-      }
+      __ MoveUnboxedDouble(BoxDoubleStubABI::kValueReg, value.fpu_reg());
       GenerateNonLazyDeoptableStubCall(
           InstructionSource(),  // No token position.
           StubCode::BoxDouble(), UntaggedPcDescriptors::kOther, instr->locs());
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 056c2a4..0dcad25 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -241,9 +241,7 @@
       // In unoptimized code at instruction epilogue the only
       // live register is an output register.
       instr->locs()->live_registers()->Clear();
-      if (value.fpu_reg() != BoxDoubleStubABI::kValueReg) {
-        __ movaps(BoxDoubleStubABI::kValueReg, value.fpu_reg());
-      }
+      __ MoveUnboxedDouble(BoxDoubleStubABI::kValueReg, value.fpu_reg());
       GenerateNonLazyDeoptableStubCall(
           InstructionSource(),  // No token position.
           StubCode::BoxDouble(), UntaggedPcDescriptors::kOther, instr->locs());
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index c7973a2..d15f357 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -5603,6 +5603,29 @@
   }
 }
 
+void DoubleToIntegerSlowPath::EmitNativeCode(FlowGraphCompiler* compiler) {
+  __ Comment("DoubleToIntegerSlowPath");
+  __ Bind(entry_label());
+
+  LocationSummary* locs = instruction()->locs();
+  locs->live_registers()->Remove(locs->out(0));
+
+  compiler->SaveLiveRegisters(locs);
+
+  auto slow_path_env =
+      compiler->SlowPathEnvironmentFor(instruction(), /*num_slow_path_args=*/0);
+
+  __ MoveUnboxedDouble(DoubleToIntegerStubABI::kInputReg, value_reg_);
+  compiler->GenerateStubCall(instruction()->source(),
+                             StubCode::DoubleToInteger(),
+                             UntaggedPcDescriptors::kOther, locs,
+                             instruction()->deopt_id(), slow_path_env);
+  __ MoveRegister(instruction()->locs()->out(0).reg(),
+                  DoubleToIntegerStubABI::kResultReg);
+  compiler->RestoreLiveRegisters(instruction()->locs());
+  __ Jump(exit_label());
+}
+
 void RangeErrorSlowPath::EmitSharedStubCall(FlowGraphCompiler* compiler,
                                             bool save_fpu_registers) {
 #if defined(TARGET_ARCH_IA32)
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index bb7d20d..b4b8664 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -8317,31 +8317,39 @@
   DISALLOW_COPY_AND_ASSIGN(Int64ToDoubleInstr);
 };
 
-class DoubleToIntegerInstr : public TemplateDefinition<1, Throws> {
+class DoubleToIntegerInstr : public TemplateDefinition<1, Throws, Pure> {
  public:
-  DoubleToIntegerInstr(Value* value, InstanceCallInstr* instance_call)
-      : TemplateDefinition(instance_call->deopt_id()),
-        instance_call_(instance_call) {
+  DoubleToIntegerInstr(Value* value, intptr_t deopt_id)
+      : TemplateDefinition(deopt_id) {
     SetInputAt(0, value);
   }
 
   Value* value() const { return inputs_[0]; }
-  InstanceCallInstr* instance_call() const { return instance_call_; }
 
   DECLARE_INSTRUCTION(DoubleToInteger)
   virtual CompileType ComputeType() const;
 
+  virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+    ASSERT(idx == 0);
+    return kUnboxedDouble;
+  }
+
+  virtual SpeculativeMode SpeculativeModeOfInput(intptr_t idx) const {
+    ASSERT(idx == 0);
+    return kNotSpeculative;
+  }
+
   virtual bool ComputeCanDeoptimize() const {
     return !CompilerState::Current().is_aot();
   }
 
+  virtual intptr_t DeoptimizationTarget() const { return GetDeoptId(); }
+
   virtual bool HasUnknownSideEffects() const { return false; }
 
-  virtual bool CanCallDart() const { return true; }
+  virtual bool AttributesEqual(const Instruction& other) const { return true; }
 
  private:
-  InstanceCallInstr* instance_call_;
-
   DISALLOW_COPY_AND_ASSIGN(DoubleToIntegerInstr);
 };
 
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 5ede916..7b56c73 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -5838,53 +5838,35 @@
                                                            bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  result->set_in(0, Location::RegisterLocation(R1));
-  result->set_out(0, Location::RegisterLocation(R0));
+  LocationSummary* result = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(0, Location::RequiresRegister());
   return result;
 }
 
 void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const Register result = locs()->out(0).reg();
-  const Register value_obj = locs()->in(0).reg();
-  ASSERT(result == R0);
-  ASSERT(result != value_obj);
-  __ LoadDFromOffset(DTMP, value_obj,
-                     compiler::target::Double::value_offset() - kHeapObjectTag);
+  const DRegister value_double = EvenDRegisterOf(locs()->in(0).fpu_reg());
 
-  compiler::Label done, do_call;
+  DoubleToIntegerSlowPath* slow_path =
+      new DoubleToIntegerSlowPath(this, locs()->in(0).fpu_reg());
+  compiler->AddSlowPathCode(slow_path);
+
   // First check for NaN. Checking for minint after the conversion doesn't work
   // on ARM because vcvtid gives 0 for NaN.
-  __ vcmpd(DTMP, DTMP);
+  __ vcmpd(value_double, value_double);
   __ vmstat();
-  __ b(&do_call, VS);
+  __ b(slow_path->entry_label(), VS);
 
-  __ vcvtid(STMP, DTMP);
+  __ vcvtid(STMP, value_double);
   __ vmovrs(result, STMP);
   // Overflow is signaled with minint.
-
   // Check for overflow and that it fits into Smi.
   __ CompareImmediate(result, 0xC0000000);
-  __ SmiTag(result, PL);
-  __ b(&done, PL);
-
-  __ Bind(&do_call);
-  __ Push(value_obj);
-  ASSERT(instance_call()->HasICData());
-  const ICData& ic_data = *instance_call()->ic_data();
-  ASSERT(ic_data.NumberOfChecksIs(1));
-  const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
-  const int kTypeArgsLen = 0;
-  const int kNumberOfArguments = 1;
-  constexpr int kSizeOfArguments = 1;
-  const Array& kNoArgumentNames = Object::null_array();
-  ArgumentsInfo args_info(kTypeArgsLen, kNumberOfArguments, kSizeOfArguments,
-                          kNoArgumentNames);
-  compiler->GenerateStaticCall(deopt_id(), instance_call()->source(), target,
-                               args_info, locs(), ICData::Handle(),
-                               ICData::kStatic);
-  __ Bind(&done);
+  __ b(slow_path->entry_label(), MI);
+  __ SmiTag(result);
+  __ Bind(slow_path->exit_label());
 }
 
 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 0262af5..cf075b0 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -4894,57 +4894,41 @@
                                                            bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  result->set_in(0, Location::RegisterLocation(R1));
-  result->set_out(0, Location::RegisterLocation(R0));
+  LocationSummary* result = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(0, Location::RequiresRegister());
   return result;
 }
 
 void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const Register result = locs()->out(0).reg();
-  const Register value_obj = locs()->in(0).reg();
-  ASSERT(result == R0);
-  ASSERT(result != value_obj);
-  __ LoadDFieldFromOffset(VTMP, value_obj, Double::value_offset());
+  const VRegister value_double = locs()->in(0).fpu_reg();
 
-  compiler::Label do_call, done;
+  DoubleToIntegerSlowPath* slow_path =
+      new DoubleToIntegerSlowPath(this, value_double);
+  compiler->AddSlowPathCode(slow_path);
+
   // First check for NaN. Checking for minint after the conversion doesn't work
   // on ARM64 because fcvtzds gives 0 for NaN.
-  __ fcmpd(VTMP, VTMP);
-  __ b(&do_call, VS);
+  __ fcmpd(value_double, value_double);
+  __ b(slow_path->entry_label(), VS);
 
-  __ fcvtzdsx(result, VTMP);
+  __ fcvtzdsx(result, value_double);
   // Overflow is signaled with minint.
 
 #if !defined(DART_COMPRESSED_POINTERS)
   // Check for overflow and that it fits into Smi.
   __ CompareImmediate(result, 0xC000000000000000);
-  __ b(&do_call, MI);
+  __ b(slow_path->entry_label(), MI);
 #else
   // Check for overflow and that it fits into Smi.
   __ AsrImmediate(TMP, result, 30);
   __ cmp(TMP, compiler::Operand(result, ASR, 63));
-  __ b(&do_call, NE);
+  __ b(slow_path->entry_label(), NE);
 #endif
   __ SmiTag(result);
-  __ b(&done);
-  __ Bind(&do_call);
-  __ Push(value_obj);
-  ASSERT(instance_call()->HasICData());
-  const ICData& ic_data = *instance_call()->ic_data();
-  ASSERT(ic_data.NumberOfChecksIs(1));
-  const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
-  const int kTypeArgsLen = 0;
-  const int kNumberOfArguments = 1;
-  constexpr int kSizeOfArguments = 1;
-  const Array& kNoArgumentNames = Object::null_array();
-  ArgumentsInfo args_info(kTypeArgsLen, kNumberOfArguments, kSizeOfArguments,
-                          kNoArgumentNames);
-  compiler->GenerateStaticCall(deopt_id(), instance_call()->source(), target,
-                               args_info, locs(), ICData::Handle(),
-                               ICData::kStatic);
-  __ Bind(&done);
+  __ Bind(slow_path->exit_label());
 }
 
 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index ee1ab8c..687529e 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -5010,45 +5010,28 @@
                                                            bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  result->set_in(0, Location::RegisterLocation(ECX));
-  result->set_out(0, Location::RegisterLocation(EAX));
+  LocationSummary* result = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(0, Location::RequiresRegister());
   return result;
 }
 
 void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register result = locs()->out(0).reg();
-  Register value_obj = locs()->in(0).reg();
-  XmmRegister value_double = FpuTMP;
-  ASSERT(result == EAX);
-  ASSERT(result != value_obj);
-  __ movsd(value_double,
-           compiler::FieldAddress(value_obj, Double::value_offset()));
+  const Register result = locs()->out(0).reg();
+  const XmmRegister value_double = locs()->in(0).fpu_reg();
+
+  DoubleToIntegerSlowPath* slow_path =
+      new DoubleToIntegerSlowPath(this, value_double);
+  compiler->AddSlowPathCode(slow_path);
+
   __ cvttsd2si(result, value_double);
   // Overflow is signalled with minint.
-  compiler::Label do_call, done;
   // Check for overflow and that it fits into Smi.
   __ cmpl(result, compiler::Immediate(0xC0000000));
-  __ j(NEGATIVE, &do_call, compiler::Assembler::kNearJump);
+  __ j(NEGATIVE, slow_path->entry_label());
   __ SmiTag(result);
-  __ jmp(&done);
-  __ Bind(&do_call);
-  __ pushl(value_obj);
-  ASSERT(instance_call()->HasICData());
-  const ICData& ic_data = *instance_call()->ic_data();
-  ASSERT(ic_data.NumberOfChecksIs(1));
-  const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
-  const int kTypeArgsLen = 0;
-  const int kNumberOfArguments = 1;
-  constexpr int kSizeOfArguments = 1;
-  const Array& kNoArgumentNames = Object::null_array();
-  ArgumentsInfo args_info(kTypeArgsLen, kNumberOfArguments, kSizeOfArguments,
-                          kNoArgumentNames);
-  compiler->GenerateStaticCall(deopt_id(), instance_call()->source(), target,
-                               args_info, locs(), ICData::Handle(),
-                               ICData::kStatic);
-  __ Bind(&done);
+  __ Bind(slow_path->exit_label());
 }
 
 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index c87f165..704beaa 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -5202,49 +5202,32 @@
                                                            bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 1;
-  LocationSummary* result = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
-  result->set_in(0, Location::RegisterLocation(RCX));
-  result->set_out(0, Location::RegisterLocation(RAX));
-  result->set_temp(0, Location::RegisterLocation(RBX));
+  LocationSummary* result = new (zone) LocationSummary(
+      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(0, Location::RequiresRegister());
+  result->set_temp(0, Location::RequiresRegister());
   return result;
 }
 
 void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register result = locs()->out(0).reg();
-  Register value_obj = locs()->in(0).reg();
-  Register temp = locs()->temp(0).reg();
-  XmmRegister value_double = FpuTMP;
-  ASSERT(result == RAX);
-  ASSERT(result != value_obj);
+  const Register result = locs()->out(0).reg();
+  const Register temp = locs()->temp(0).reg();
+  const XmmRegister value_double = locs()->in(0).fpu_reg();
   ASSERT(result != temp);
-  __ movsd(value_double,
-           compiler::FieldAddress(value_obj, Double::value_offset()));
+
+  DoubleToIntegerSlowPath* slow_path =
+      new DoubleToIntegerSlowPath(this, value_double);
+  compiler->AddSlowPathCode(slow_path);
+
   __ OBJ(cvttsd2si)(result, value_double);
   // Overflow is signalled with minint.
-  compiler::Label do_call, done;
   // Check for overflow and that it fits into Smi.
   __ movq(temp, result);
   __ OBJ(shl)(temp, compiler::Immediate(1));
-  __ j(OVERFLOW, &do_call, compiler::Assembler::kNearJump);
+  __ j(OVERFLOW, slow_path->entry_label());
   __ SmiTag(result);
-  __ jmp(&done);
-  __ Bind(&do_call);
-  __ pushq(value_obj);
-  ASSERT(instance_call()->HasICData());
-  const ICData& ic_data = *instance_call()->ic_data();
-  ASSERT(ic_data.NumberOfChecksIs(1));
-  const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
-  const int kTypeArgsLen = 0;
-  const int kNumberOfArguments = 1;
-  constexpr int kSizeOfArguments = 1;
-  const Array& kNoArgumentNames = Object::null_array();
-  ArgumentsInfo args_info(kTypeArgsLen, kNumberOfArguments, kSizeOfArguments,
-                          kNoArgumentNames);
-  compiler->GenerateStaticCall(deopt_id(), instance_call()->source(), target,
-                               args_info, locs(), ICData::Handle(),
-                               ICData::kStatic);
-  __ Bind(&done);
+  __ Bind(slow_path->exit_label());
 }
 
 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/call_specializer.cc b/runtime/vm/compiler/call_specializer.cc
index 61e2f54..84df214 100644
--- a/runtime/vm/compiler/call_specializer.cc
+++ b/runtime/vm/compiler/call_specializer.cc
@@ -1010,7 +1010,8 @@
         Definition* d2i_instr = NULL;
         if (ic_data.HasDeoptReason(ICData::kDeoptDoubleToSmi)) {
           // Do not repeatedly deoptimize because result didn't fit into Smi.
-          d2i_instr = new (Z) DoubleToIntegerInstr(new (Z) Value(input), call);
+          d2i_instr = new (Z)
+              DoubleToIntegerInstr(new (Z) Value(input), call->deopt_id());
         } else {
           // Optimistically assume result fits into Smi.
           d2i_instr =
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
index 3ff0835..e4666e2 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
@@ -1213,6 +1213,13 @@
   return Fragment(instr);
 }
 
+Fragment BaseFlowGraphBuilder::DoubleToInteger() {
+  Value* value = Pop();
+  auto* instr = new (Z) DoubleToIntegerInstr(value, GetNextDeoptId());
+  Push(instr);
+  return Fragment(instr);
+}
+
 Fragment BaseFlowGraphBuilder::MathUnary(MathUnaryInstr::MathUnaryKind kind) {
   Value* value = Pop();
   auto* instr = new (Z) MathUnaryInstr(kind, value, GetNextDeoptId());
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.h b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
index 4978fa3..6a8b1b3 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.h
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
@@ -444,6 +444,9 @@
   // kDoubleFloor or kDoubleCeil).
   Fragment DoubleToDouble(MethodRecognizer::Kind recognized_kind);
 
+  // Pops double value and converts it to int.
+  Fragment DoubleToInteger();
+
   // Pops double value and applies unary math operation.
   Fragment MathUnary(MathUnaryInstr::MathUnaryKind kind);
 
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 1fa49f3..115caf4 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -892,6 +892,7 @@
     case MethodRecognizer::kUtf8DecoderScan:
     case MethodRecognizer::kHas63BitSmis:
       return true;
+    case MethodRecognizer::kDoubleToInteger:
     case MethodRecognizer::kDoubleMod:
     case MethodRecognizer::kDoubleRound:
     case MethodRecognizer::kDoubleTruncate:
@@ -1524,6 +1525,10 @@
       body += LoadIndexed(kIntPtrCid);
       body += Box(kUnboxedIntPtr);
     } break;
+    case MethodRecognizer::kDoubleToInteger: {
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += DoubleToInteger();
+    } break;
     case MethodRecognizer::kDoubleMod:
     case MethodRecognizer::kDoubleRound:
     case MethodRecognizer::kDoubleTruncate:
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index d621516..3142cb9 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -91,6 +91,7 @@
   V(_Double, ceilToDouble, DoubleCeil, 0x5f1bced9)                             \
   V(_Double, floorToDouble, DoubleFloor, 0x54b4cb48)                           \
   V(_Double, roundToDouble, DoubleRound, 0x5649ca00)                           \
+  V(_Double, toInt, DoubleToInteger, 0x676f20a9)                               \
   V(_Double, truncateToDouble, DoubleTruncate, 0x62d48659)                     \
   V(::, min, MathMin, 0x504a28df)                                              \
   V(::, max, MathMax, 0xead7161a)                                              \
@@ -282,7 +283,6 @@
   V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xb6764495)             \
   V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0xfecba6b3)          \
   V(_IntegerImplementation, <<, Integer_shl, 0x2d855b02)                       \
-  V(_Double, toInt, DoubleToInteger, 0x676f1ce8)                               \
 
 #define MATH_LIB_INTRINSIC_LIST(V)                                             \
   V(_Random, _nextState, Random_nextState, 0x7207677d)                         \
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 7720933..8598191 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -246,9 +246,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    744;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     748;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    752;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
@@ -273,7 +273,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 784;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 788;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -284,7 +284,7 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 792;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 796;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -302,7 +302,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    764;
+    768;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
@@ -322,13 +322,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    752;
+    756;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    780;
+    784;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 796;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 800;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -370,11 +370,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 344;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 756;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 760;
+    Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    768;
+    772;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
@@ -410,9 +410,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 772;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 776;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 776;
+    Thread_callback_stack_return_offset = 780;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Type_arguments_offset = 16;
@@ -472,7 +472,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        712, 716, 720, 724, 728, -1, 732, -1, 736, 740, -1, -1, -1, -1, -1, -1};
+        716, 720, 724, 728, 732, -1, 736, -1, 740, 744, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -792,9 +792,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1496;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1504;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1512;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -820,7 +820,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
@@ -831,7 +831,7 @@
     Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1592;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -849,7 +849,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1536;
+    1544;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -869,14 +869,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1512;
+    1520;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1568;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -918,11 +918,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1520;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1528;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1544;
+    1552;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -959,9 +959,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1560;
+    Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -1022,8 +1022,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
-        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -1341,9 +1341,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    712;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     716;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    720;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
@@ -1368,7 +1368,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 752;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 756;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -1379,7 +1379,7 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 760;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 764;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -1397,7 +1397,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    732;
+    736;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
@@ -1417,13 +1417,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    720;
+    724;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    748;
+    752;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 764;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 768;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -1465,11 +1465,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 344;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 724;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 728;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 728;
+    Thread_saved_shadow_call_stack_offset = 732;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    736;
+    740;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
@@ -1505,9 +1505,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 740;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 744;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 744;
+    Thread_callback_stack_return_offset = 748;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Type_arguments_offset = 16;
@@ -1884,9 +1884,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1560;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1568;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1576;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -1912,7 +1912,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1640;
+    1648;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
@@ -1923,7 +1923,7 @@
     Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1656;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -1941,7 +1941,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -1961,14 +1961,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1632;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1664;
+    1672;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -2010,11 +2010,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1592;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1608;
+    1616;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -2051,9 +2051,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1616;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1624;
+    Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -2114,9 +2114,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
-        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
-        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -2435,9 +2435,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1496;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1504;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1512;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -2463,7 +2463,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
@@ -2474,7 +2474,7 @@
     Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1592;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -2492,7 +2492,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1536;
+    1544;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -2512,14 +2512,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1512;
+    1520;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1568;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -2561,11 +2561,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1520;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1528;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1544;
+    1552;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -2602,9 +2602,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1560;
+    Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -2665,8 +2665,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
-        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -2985,9 +2985,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1560;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1568;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1576;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -3013,7 +3013,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1640;
+    1648;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
@@ -3024,7 +3024,7 @@
     Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1656;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -3042,7 +3042,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -3062,14 +3062,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1632;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1664;
+    1672;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -3111,11 +3111,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1592;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1608;
+    1616;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -3152,9 +3152,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1616;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1624;
+    Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -3215,9 +3215,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
-        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
-        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -3531,9 +3531,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    744;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     748;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    752;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
@@ -3558,7 +3558,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 784;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 788;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -3569,7 +3569,7 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 792;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 796;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -3587,7 +3587,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    764;
+    768;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
@@ -3607,13 +3607,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    752;
+    756;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    780;
+    784;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 796;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 800;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -3655,11 +3655,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 344;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 756;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 760;
+    Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    768;
+    772;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
@@ -3695,9 +3695,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 772;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 776;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 776;
+    Thread_callback_stack_return_offset = 780;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Type_arguments_offset = 16;
@@ -3757,7 +3757,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        712, 716, 720, 724, 728, -1, 732, -1, 736, 740, -1, -1, -1, -1, -1, -1};
+        716, 720, 724, 728, 732, -1, 736, -1, 740, 744, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -4071,9 +4071,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1496;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1504;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1512;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -4099,7 +4099,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
@@ -4110,7 +4110,7 @@
     Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1592;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -4128,7 +4128,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1536;
+    1544;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -4148,14 +4148,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1512;
+    1520;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1568;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -4197,11 +4197,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1520;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1528;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1544;
+    1552;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -4238,9 +4238,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1560;
+    Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -4301,8 +4301,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
-        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -4614,9 +4614,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    712;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     716;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    720;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
@@ -4641,7 +4641,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 752;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 756;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -4652,7 +4652,7 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 760;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 764;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -4670,7 +4670,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    732;
+    736;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
@@ -4690,13 +4690,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    720;
+    724;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    748;
+    752;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 764;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 768;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -4738,11 +4738,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 344;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 724;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 728;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 728;
+    Thread_saved_shadow_call_stack_offset = 732;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    736;
+    740;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
@@ -4778,9 +4778,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 740;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 744;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 744;
+    Thread_callback_stack_return_offset = 748;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Type_arguments_offset = 16;
@@ -5151,9 +5151,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1560;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1568;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1576;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -5179,7 +5179,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1640;
+    1648;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
@@ -5190,7 +5190,7 @@
     Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1656;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -5208,7 +5208,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -5228,14 +5228,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1632;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1664;
+    1672;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -5277,11 +5277,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1592;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1608;
+    1616;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -5318,9 +5318,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1616;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1624;
+    Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -5381,9 +5381,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
-        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
-        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -5696,9 +5696,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1496;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1504;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1512;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -5724,7 +5724,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
@@ -5735,7 +5735,7 @@
     Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1592;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1600;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -5753,7 +5753,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1536;
+    1544;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -5773,14 +5773,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1512;
+    1520;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1568;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -5822,11 +5822,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1520;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1528;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1544;
+    1552;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -5863,9 +5863,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1560;
+    Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -5926,8 +5926,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
-        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -6240,9 +6240,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1560;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1568;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1576;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -6268,7 +6268,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1640;
+    1648;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 224;
@@ -6279,7 +6279,7 @@
     Thread_call_to_runtime_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1656;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1664;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -6297,7 +6297,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -6317,14 +6317,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1632;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1664;
+    1672;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -6366,11 +6366,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1592;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1608;
+    1616;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -6407,9 +6407,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1616;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1624;
+    Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -6470,9 +6470,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
-        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
-        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -6821,9 +6821,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 744;
+    AOT_Thread_active_exception_offset = 748;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 748;
+    AOT_Thread_active_stacktrace_offset = 752;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
@@ -6849,7 +6849,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 204;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    784;
+    788;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -6862,7 +6862,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    792;
+    796;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -6881,7 +6881,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 764;
+    AOT_Thread_execution_state_offset = 768;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
@@ -6901,14 +6901,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 752;
+    AOT_Thread_global_object_pool_offset = 756;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 780;
+    AOT_Thread_exit_through_ffi_offset = 784;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    796;
+    800;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 68;
 static constexpr dart::compiler::target::word
@@ -6952,11 +6952,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 344;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 756;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 760;
+    AOT_Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 768;
+    AOT_Thread_safepoint_state_offset = 772;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
@@ -6995,9 +6995,9 @@
     AOT_Thread_write_barrier_mask_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    772;
+    776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 776;
+    AOT_Thread_callback_stack_return_offset = 780;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -7070,7 +7070,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        712, 716, 720, 724, 728, -1, 732, -1, 736, 740, -1, -1, -1, -1, -1, -1};
+        716, 720, 724, 728, 732, -1, 736, -1, 740, 744, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -7430,9 +7430,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1496;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1504;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -7458,7 +7458,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -7471,7 +7471,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1592;
+    1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -7490,7 +7490,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1536;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -7510,14 +7510,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1512;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1568;
+    AOT_Thread_exit_through_ffi_offset = 1576;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -7562,11 +7562,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1520;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1528;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1544;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -7605,9 +7605,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1560;
+    AOT_Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -7681,8 +7681,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
-        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -8045,9 +8045,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1560;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1568;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -8073,7 +8073,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1640;
+    1648;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -8086,7 +8086,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1656;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -8105,7 +8105,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1600;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -8125,14 +8125,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1576;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1632;
+    AOT_Thread_exit_through_ffi_offset = 1640;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1664;
+    1672;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -8177,11 +8177,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1584;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1592;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1608;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -8220,9 +8220,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1616;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1624;
+    AOT_Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -8296,9 +8296,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
-        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
-        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -8657,9 +8657,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1496;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1504;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -8685,7 +8685,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -8698,7 +8698,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1592;
+    1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -8717,7 +8717,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1536;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -8737,14 +8737,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1512;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1568;
+    AOT_Thread_exit_through_ffi_offset = 1576;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -8789,11 +8789,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1520;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1528;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1544;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -8832,9 +8832,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1560;
+    AOT_Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -8908,8 +8908,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
-        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9268,9 +9268,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1560;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1568;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -9296,7 +9296,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1640;
+    1648;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -9309,7 +9309,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1656;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -9328,7 +9328,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1600;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -9348,14 +9348,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1576;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1632;
+    AOT_Thread_exit_through_ffi_offset = 1640;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1664;
+    1672;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -9400,11 +9400,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1584;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1592;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1608;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -9443,9 +9443,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1616;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1624;
+    AOT_Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -9519,9 +9519,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
-        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
-        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9875,9 +9875,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 744;
+    AOT_Thread_active_exception_offset = 748;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 748;
+    AOT_Thread_active_stacktrace_offset = 752;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 128;
 static constexpr dart::compiler::target::word
@@ -9903,7 +9903,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 204;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    784;
+    788;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -9916,7 +9916,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    792;
+    796;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -9935,7 +9935,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 764;
+    AOT_Thread_execution_state_offset = 768;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
@@ -9955,14 +9955,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 752;
+    AOT_Thread_global_object_pool_offset = 756;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 780;
+    AOT_Thread_exit_through_ffi_offset = 784;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    796;
+    800;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 68;
 static constexpr dart::compiler::target::word
@@ -10006,11 +10006,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 344;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 756;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 760;
+    AOT_Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 768;
+    AOT_Thread_safepoint_state_offset = 772;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 248;
 static constexpr dart::compiler::target::word
@@ -10049,9 +10049,9 @@
     AOT_Thread_write_barrier_mask_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    772;
+    776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 776;
+    AOT_Thread_callback_stack_return_offset = 780;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -10124,7 +10124,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        712, 716, 720, 724, 728, -1, 732, -1, 736, 740, -1, -1, -1, -1, -1, -1};
+        716, 720, 724, 728, 732, -1, 736, -1, 740, 744, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -10477,9 +10477,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1496;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1504;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -10505,7 +10505,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -10518,7 +10518,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1592;
+    1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -10537,7 +10537,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1536;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -10557,14 +10557,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1512;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1568;
+    AOT_Thread_exit_through_ffi_offset = 1576;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -10609,11 +10609,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1520;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1528;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1544;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -10652,9 +10652,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1560;
+    AOT_Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -10728,8 +10728,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
-        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11085,9 +11085,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1560;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1568;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -11113,7 +11113,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1640;
+    1648;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -11126,7 +11126,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1656;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -11145,7 +11145,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1600;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -11165,14 +11165,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1576;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1632;
+    AOT_Thread_exit_through_ffi_offset = 1640;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1664;
+    1672;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -11217,11 +11217,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1584;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1592;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1608;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -11260,9 +11260,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1616;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1624;
+    AOT_Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -11336,9 +11336,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
-        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
-        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11690,9 +11690,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1496;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1504;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -11718,7 +11718,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1576;
+    1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -11731,7 +11731,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1592;
+    1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -11750,7 +11750,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1536;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -11770,14 +11770,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1512;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1568;
+    AOT_Thread_exit_through_ffi_offset = 1576;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1600;
+    1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -11822,11 +11822,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1520;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1528;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1544;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -11865,9 +11865,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1560;
+    AOT_Thread_callback_stack_return_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -11941,8 +11941,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, -1,   -1,   1440, 1448,
-        1456, 1464, 1472, -1,   1480, 1488, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12294,9 +12294,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1560;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1568;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 240;
 static constexpr dart::compiler::target::word
@@ -12322,7 +12322,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 392;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1640;
+    1648;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -12335,7 +12335,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1656;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -12354,7 +12354,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1600;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
@@ -12374,14 +12374,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1576;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1632;
+    AOT_Thread_exit_through_ffi_offset = 1640;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1664;
+    1672;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -12426,11 +12426,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1584;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1592;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1608;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
@@ -12469,9 +12469,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1616;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1624;
+    AOT_Thread_callback_stack_return_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -12545,9 +12545,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1408, 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488,
-        1496, 1504, 1512, 1520, -1,   -1,   -1,   -1,   1528, 1536, -1,
-        -1,   1544, 1552, 1560, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index eb2e0c9..7b3e42e 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -1043,13 +1043,30 @@
   __ EnterStubFrame();
   __ PushObject(NullObject()); /* Make room for result. */
   __ StoreUnboxedDouble(BoxDoubleStubABI::kValueReg, THR,
-                        Thread::unboxed_double_runtime_arg_offset());
+                        target::Thread::unboxed_double_runtime_arg_offset());
   __ CallRuntime(kBoxDoubleRuntimeEntry, 0);
   __ PopRegister(BoxDoubleStubABI::kResultReg);
   __ LeaveStubFrame();
   __ Ret();
 }
 
+void StubCodeCompiler::GenerateDoubleToIntegerStub(Assembler* assembler) {
+#if defined(TARGET_ARCH_ARM)
+  if (!TargetCPUFeatures::vfp_supported()) {
+    __ Breakpoint();
+    return;
+  }
+#endif  // defined(TARGET_ARCH_ARM)
+  __ EnterStubFrame();
+  __ StoreUnboxedDouble(DoubleToIntegerStubABI::kInputReg, THR,
+                        target::Thread::unboxed_double_runtime_arg_offset());
+  __ PushObject(NullObject()); /* Make room for result. */
+  __ CallRuntime(kDoubleToIntegerRuntimeEntry, 0);
+  __ PopRegister(DoubleToIntegerStubABI::kResultReg);
+  __ LeaveStubFrame();
+  __ Ret();
+}
+
 }  // namespace compiler
 
 }  // namespace dart
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 022f7b7..05f2342 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -494,6 +494,12 @@
   static const Register kResultReg = R0;
 };
 
+// ABI for DoubleToIntegerStub.
+struct DoubleToIntegerStubABI {
+  static const FpuRegister kInputReg = Q0;
+  static const Register kResultReg = R0;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index e9c6a5b..c661cc2 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -334,6 +334,12 @@
   static const Register kResultReg = R0;
 };
 
+// ABI for DoubleToIntegerStub.
+struct DoubleToIntegerStubABI {
+  static const FpuRegister kInputReg = V0;
+  static const Register kResultReg = R0;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index 96941d8..5bbb8e6 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -233,6 +233,12 @@
   static const Register kResultReg = EAX;
 };
 
+// ABI for DoubleToIntegerStub.
+struct DoubleToIntegerStubABI {
+  static const FpuRegister kInputReg = XMM0;
+  static const Register kResultReg = EAX;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 413eec4..73296ae 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -306,6 +306,12 @@
   static const Register kResultReg = RAX;
 };
 
+// ABI for DoubleToIntegerStub.
+struct DoubleToIntegerStubABI {
+  static const FpuRegister kInputReg = XMM0;
+  static const Register kResultReg = RAX;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/double_conversion.cc b/runtime/vm/double_conversion.cc
index 7357658..55b7836 100644
--- a/runtime/vm/double_conversion.cc
+++ b/runtime/vm/double_conversion.cc
@@ -175,4 +175,21 @@
   return (parsed_count == length);
 }
 
+IntegerPtr DoubleToInteger(Zone* zone, double val) {
+  if (isinf(val) || isnan(val)) {
+    const Array& args = Array::Handle(zone, Array::New(1));
+    args.SetAt(0, String::Handle(zone, String::New("Infinity or NaN toInt")));
+    Exceptions::ThrowByType(Exceptions::kUnsupported, args);
+  }
+  int64_t ival = 0;
+  if (val <= static_cast<double>(kMinInt64)) {
+    ival = kMinInt64;
+  } else if (val >= static_cast<double>(kMaxInt64)) {
+    ival = kMaxInt64;
+  } else {  // Representable in int64_t.
+    ival = static_cast<int64_t>(val);
+  }
+  return Integer::New(ival);
+}
+
 }  // namespace dart
diff --git a/runtime/vm/double_conversion.h b/runtime/vm/double_conversion.h
index 27a8172..6fbe380 100644
--- a/runtime/vm/double_conversion.h
+++ b/runtime/vm/double_conversion.h
@@ -24,6 +24,8 @@
 
 bool CStringToDouble(const char* str, intptr_t length, double* result);
 
+IntegerPtr DoubleToInteger(Zone* zone, double val);
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_DOUBLE_CONVERSION_H_
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index 587267c..0f9bd6e 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -100,13 +100,7 @@
   if (extra_info_->build_id_offset_ != kNoBuildId) {
     auto const note = reinterpret_cast<elf::Note*>(
         raw_memory_ + extra_info_->build_id_offset_);
-    // Check that we have a final build ID. A non-final build ID will either
-    // have a description length of 0 or an initial byte of 0.
-    auto const description = note->data + note->name_size;
-    auto const length = note->description_size;
-    if (length != 0 && description[0] != 0) {
-      return description;
-    }
+    return note->data + note->name_size;
   }
 #endif
   return nullptr;
@@ -118,13 +112,7 @@
   if (extra_info_->build_id_offset_ != kNoBuildId) {
     auto const note = reinterpret_cast<elf::Note*>(
         raw_memory_ + extra_info_->build_id_offset_);
-    // Check that we have a final build ID. A non-final build ID will either
-    // have a description length of 0 or an initial byte of 0.
-    auto const description = note->data + note->name_size;
-    auto const length = note->description_size;
-    if (length != 0 && description[0] != 0) {
-      return length;
-    }
+    return note->description_size;
   }
 #endif
   return 0;
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 57a1e57..fb90a6e 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -14,6 +14,7 @@
 #include "vm/dart_api_state.h"
 #include "vm/dart_entry.h"
 #include "vm/debugger.h"
+#include "vm/double_conversion.h"
 #include "vm/exceptions.h"
 #include "vm/flags.h"
 #include "vm/heap/verifier.h"
@@ -286,6 +287,12 @@
   Exceptions::ThrowArgumentError(value);
 }
 
+DEFINE_RUNTIME_ENTRY(DoubleToInteger, 0) {
+  // Unboxed value is passed through a dedicated slot in Thread.
+  const double val = arguments.thread()->unboxed_double_runtime_arg();
+  arguments.SetReturn(Integer::Handle(zone, DoubleToInteger(zone, val)));
+}
+
 DEFINE_RUNTIME_ENTRY(IntegerDivisionByZeroException, 0) {
   const Array& args = Array::Handle(zone, Array::New(0));
   Exceptions::ThrowByType(Exceptions::kIntegerDivisionByZeroException, args);
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 5721160..0fa921a 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -22,6 +22,7 @@
   V(BreakpointRuntimeHandler)                                                  \
   V(SingleStepHandler)                                                         \
   V(CloneContext)                                                              \
+  V(DoubleToInteger)                                                           \
   V(FixCallersTarget)                                                          \
   V(FixCallersTargetMonomorphic)                                               \
   V(FixAllocationStubTarget)                                                   \
diff --git a/runtime/vm/stub_code_list.h b/runtime/vm/stub_code_list.h
index 2eb7331..64b36a9 100644
--- a/runtime/vm/stub_code_list.h
+++ b/runtime/vm/stub_code_list.h
@@ -120,6 +120,7 @@
   V(RangeErrorSharedWithoutFPURegs)                                            \
   V(StackOverflowSharedWithFPURegs)                                            \
   V(StackOverflowSharedWithoutFPURegs)                                         \
+  V(DoubleToInteger)                                                           \
   V(OneArgCheckInlineCacheWithExactnessCheck)                                  \
   V(OneArgOptimizedCheckInlineCacheWithExactnessCheck)                         \
   V(EnterSafepoint)                                                            \
diff --git a/sdk/lib/_internal/vm/lib/double.dart b/sdk/lib/_internal/vm/lib/double.dart
index e1dca3d..26406d3 100644
--- a/sdk/lib/_internal/vm/lib/double.dart
+++ b/sdk/lib/_internal/vm/lib/double.dart
@@ -216,7 +216,8 @@
     return this;
   }
 
-  @pragma("vm:recognized", "asm-intrinsic")
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
   @pragma("vm:non-nullable-result-type")
   int toInt() native "Double_toInt";
 
diff --git a/tools/VERSION b/tools/VERSION
index 6d69f90..5e0638b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 69
+PRERELEASE 70
 PRERELEASE_PATCH 0
\ No newline at end of file