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
