Version 2.15.0-70.0.dev

Merge commit '3ff52042ea43566862ddb647c2397c4182af129d' into 'dev'
diff --git a/DEPS b/DEPS
index f73aea5..e2ed777 100644
--- a/DEPS
+++ b/DEPS
@@ -73,7 +73,7 @@
 
   # Revisions of /third_party/* dependencies.
   "args_rev": "bf4c8796881b62fd5d3f6d86ab43014f9651eb20",
-  "async_rev": "88cc6079037da08dcb31cf8dcd62173c2ddf1e89",
+  "async_rev": "ecb3835c5b746f7762327d5f57bdc92e0a2e0450",
   "bazel_worker_rev": "0885637b037979afbf5bcd05fd748b309fd669c0",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
   "boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
@@ -153,7 +153,7 @@
   "source_maps-0.9.4_rev": "38524",
   "source_maps_rev": "53eb92ccfe6e64924054f83038a534b959b12b3e",
   "source_span_rev": "1be3c44045a06dff840d2ed3a13e6082d7a03a23",
-  "sse_rev": "d505b383768889a1e3e90097684e929a9e6d6b8f",
+  "sse_rev": "9084339389eb441d0c0518cddac211a097e78657",
   "stack_trace_rev": "6788afc61875079b71b3d1c3e65aeaa6a25cbc2f",
   "stream_channel_rev": "d7251e61253ec389ee6e045ee1042311bced8f1d",
   "string_scanner_rev": "1b63e6e5db5933d7be0a45da6e1129fe00262734",
diff --git a/build/fuchsia/dart.cmx b/build/fuchsia/dart.cmx
index 0bd0e668..45ba397 100644
--- a/build/fuchsia/dart.cmx
+++ b/build/fuchsia/dart.cmx
@@ -17,7 +17,6 @@
             "fuchsia.feedback.CrashReporter",
             "fuchsia.intl.PropertyProvider",
             "fuchsia.logger.LogSink",
-            "fuchsia.net.NameLookup",
             "fuchsia.net.name.Lookup",
             "fuchsia.posix.socket.Provider",
             "fuchsia.sysmem.Allocator",
diff --git a/docs/process/breaking-changes.md b/docs/process/breaking-changes.md
index cee804e..64a0df4 100644
--- a/docs/process/breaking-changes.md
+++ b/docs/process/breaking-changes.md
@@ -43,8 +43,7 @@
   not intended to be used as a mixin).
 
 Compatibility is only considered between stable releases (i.e. releases from the
-[Dart stable
-channel](https://dart.dev/tools/sdk/archive#stable-channel)).
+[Dart stable channel](https://dart.dev/tools/sdk/archive#stable-channel)).
 
 ## Breaking change notification
 
@@ -78,8 +77,8 @@
   * A request that developers may leave comments in the linked issue, if this
     breaking change poses a severe problem.
 
-* Once you have sent the announce email, please let 'frankyow@google.com` know
-as he will help drive the request through approval review process.
+Once you have sent the announce email, please let @devoncarew know in order
+to start the review and approval process.
 
 ### Step 2: Approval
 
@@ -88,6 +87,7 @@
 Adequate time must be allowed after step 1, at a minimum 24 hours during the
 work week for smaller impact changes, and proportionally longer for higher
 impact changes.
+
 ### Step 3: Execution
 
 If approved, the change may be made.
@@ -107,6 +107,7 @@
 
 * Reply to the original announcement email, and make a note that the change is
   has been rejected, with a quick summary of the rationale for that.
+
 ## Unexpected breaking changes & roll-back requests
 
 If a developer notices a breaking change has been made in the dev or stable
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/options.dart b/pkg/_fe_analyzer_shared/lib/src/util/options.dart
index bf26a66..7837865 100644
--- a/pkg/_fe_analyzer_shared/lib/src/util/options.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/util/options.dart
@@ -199,8 +199,8 @@
   }
 }
 
-class BoolValue extends ValueSpecification<bool> {
-  final bool defaultValue;
+class BoolValue extends ValueSpecification<bool?> {
+  final bool? defaultValue;
 
   const BoolValue(this.defaultValue);
 
diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_server/benchmark/benchmarks.dart
index 3816e5f..c319053 100644
--- a/pkg/analysis_server/benchmark/benchmarks.dart
+++ b/pkg/analysis_server/benchmark/benchmarks.dart
@@ -129,8 +129,10 @@
     var o = other as CompoundBenchMarkResult;
 
     var combined = CompoundBenchMarkResult(name);
-    var keys =
-        (<String>{}..addAll(results.keys)..addAll(o.results.keys)).toList();
+    var keys = (<String>{}
+          ..addAll(results.keys)
+          ..addAll(o.results.keys))
+        .toList();
 
     for (var key in keys) {
       combined.add(key, _combine(results[key], o.results[key]));
diff --git a/pkg/analysis_server/doc/tutorial/quick_fix.md b/pkg/analysis_server/doc/tutorial/quick_fix.md
index be98c06..3085dd9 100644
--- a/pkg/analysis_server/doc/tutorial/quick_fix.md
+++ b/pkg/analysis_server/doc/tutorial/quick_fix.md
@@ -1,21 +1,46 @@
 # Writing a quick fix
 
-This document outlines the basic steps for writing a quick fix.
+This document describes what a quick fix is and outlines the basic steps for
+writing a quick fix.
 
 ## Overview
 
 A quick fix is an automated code edit that's associated with a diagnostic. The
-intent is to automate the work required to fix the issue being reported. When
-the client asks for quick fixes, server computes the relevant diagnostics based
-on the cursor location. Then, for each diagnostic, it computes one or more
-fixes. The list of computed fixes is then returned to the client.
+intent is to automate the work required to fix the issue being reported by the
+diagnostic.
+
+There are three ways for users to apply quick fixes: single-site, fix-in-file,
+and bulk. We'll discuss how to implement the support for each of these usages in
+its own section below. The sections build on each other, so we recommend reading
+them in order.
 
 Through most of this document we'll use a simple example. We'll assume you wrote
 a new lint named `could_be_final` that flags fields that could be marked final
 but aren't, and that you're adding a fix for it. The fix will simply add the
 keyword `final` to the field declaration.
 
-## Describing the fix
+## Single-site fixes
+
+A single-site fix is one in which a single fix can be applied to a single
+location at which the associated diagnostic is reported.
+
+When the client asks for quick fixes, the analysis server computes the relevant
+diagnostics based on the cursor location. Then, for each diagnostic, it computes
+one or more fixes. It then returns the list of computed fixes to the client. The
+client typically allows the user to choose a single fix to be applied.
+
+### Design considerations
+
+Because quick fixes are computed on demand, they need to be computed quickly.
+(Some clients request quick fixes every time the user repositions the cursor.)
+That places a performance requirement on quick fixes, one that requires that the
+code to compute a quick fix can't perform any potentially lengthy computations
+such as searching all of the user's code or accessing the network. That, in
+turn, generally means that fixes can only support localized changes. They can
+add or remove text in the file in which the diagnostic was reported, but
+generally can't do more than that. 
+
+### Describing the fix
 
 Each fix has an instance of the class `FixKind` associated with it. The existing
 fixes for Dart diagnostics are defined in the class `DartFixKind`, fixes for the
@@ -28,9 +53,10 @@
 pattern seen in the existing fix kinds.
 
 The priority is used to order the list of fixes when presented to the user. The
-larger the value the closer to the top of the list it will appear. You should
-use one of the constants defined in `DartFixKindPriority` (typically
-`DartFixKindPriority.DEFAULT`), or add a new constant if there's a need for it.
+larger the value the closer to the top of the list it will appear. If you're
+implementing a fix for Dart files, you should use one of the constants defined
+in `DartFixKindPriority` (typically `DartFixKindPriority.DEFAULT`), or add a new
+constant if there's a need for it.
 
 The message is what will be displayed to the user by the client. This should be
 a sentence fragment (no terminating period) that would be appropriate as a label
@@ -49,10 +75,10 @@
 );
 ```
 
-## Implementing the fix, part 1
+### Implementing the fix, part 1
 
-To implement the fix you'll create a subclass of `CorrectionProducer`. The
-existing correction producers are in the directory
+To implement the fix you'll create a subclass of `CorrectionProducer`. Most of
+the existing correction producers are in the directory
 `analysis_server/lib/src/services/correction/dart`, so we'll start by creating
 a file named `add_final.dart` in that directory that contains the following:
 
@@ -87,7 +113,25 @@
 
 The static `newInstance` method will be used later in "Registering the fix".
 
-## Testing the fix
+There's another getter you might need to override. The message associated with
+the fix kind is actually a template that can be filled in at runtime. The
+placeholders in the message are denoted by integers inside curly braces (such as
+`{0}`). The integers are indexes into a list of replacement values, and the
+getter `fixArguments` returns the list of replacement values. The message we
+used above doesn't have any placeholders, but if we'd written the message as
+`"Add '{0}' modifier"`, then we could return the replacement values by
+implementing:
+
+```dart
+@override
+List<Object> get fixArguments => ['final'];
+```
+
+If you don't implement this getter, then the inherited getter will return an
+empty list. The number of elements in the list must match the largest index used
+in the message.
+
+### Testing the fix
 
 Before we look at implementing the `compute` method, we should probably write
 some tests. Even if you don't normally use a test-driven approach to coding, we
@@ -153,7 +197,7 @@
 fix to the file, and textually compare the results with the second piece of
 code.
 
-## Registering the fix
+### Registering the fix
 
 Before we can run the test, we need to register the correction producer so that
 it can be run.
@@ -187,7 +231,7 @@
 
 At this point you should be able to run the test and see it failing.
 
-## Implementing the fix, part 2
+### Implementing the fix, part 2
 
 We're now at a point where we can finish the implementation of the fix by
 implementing the `compute` method.
@@ -197,7 +241,7 @@
 construct the fix that will be sent back to the client.
 
 The first step in the implementation of any fix is to find the location in the
-AST where the diagnostic was reported and verify that all of the conditions on
+AST where the diagnostic was reported and verify that all the conditions on
 which the fix is predicated are valid. Assuming that the lint has been written
 and tested correctly, there's no need to test that the conditions that caused
 the lint rule to generate a diagnostic are still true. However, sometimes there
@@ -337,7 +381,7 @@
 diagnostic's error code. Second, the test class would be a subclass of
 `FixProcessorTest` and wouldn't specify the name of the lint.
 
-## Multi-fix producers
+### Multi-fix producers
 
 We skipped over the map named `nonLintMultiProducerMap` earlier, promising that
 we'd return to it later. You'll probably never have a need for it, but in case
@@ -348,18 +392,172 @@
 you need to use a single correction producer to produce multiple fixes. This is
 generally only needed when you can't know in advance the maximum number of
 fixes that might need to be produced. For example, if there is an undefined
-identifier and it might be possible to add an import to fix the problem, there's
-no way to know in advance how many different libraries might define the name.
+identifier, and it might be possible to add an import to fix the problem,
+there's no way to know in advance how many libraries might define the name, but
+we'd want to proposing adding an import for each such library.
 
 If you are able to enumerate the possible fixes ahead of time, then you're
 better off to create one subclass of `CorrectionProducer` for each of the fixes.
 For example, taking the case of an undefined identifier again, another way to
 fix the problem is to add a declaration of the name. There are a finite number
 of kinds of declarations a user might want: class, mixin, variable, etc. Even
-though some of the declarations might not make sense because of how the
+though some kinds of declarations might not make sense because of how the
 identifier is being used, it's better to have a separate correction producer for
 each kind of declaration and have each one determine whether to generate a fix.
 
 And, we don't currently have support for associating a `MultiCorrectionProducer`
 with a lint, so if you're writing fixes for a lint then this option isn't
 available to you.
+
+## Fix-in-file fixes
+
+A fix-in-file fix is one in which a single fix can be applied that will fix all
+the locations within a single file at which a single kind of diagnostic has been
+reported.
+
+When the client asks for quick fixes, in addition to computing the single-site
+fixes, the analysis server looks to see whether any of the diagnostics at the
+cursor location are also reported at other places in the same file. If any of
+them are, and if the fix supports being used as a fix-in-file fix, then the
+analysis server will attempt to apply the fix in each of those locations and to
+build another fix that will apply edits to all the locations at which the
+diagnostic was reported.
+
+The fix-in-file fix will only be shown when there is more than one diagnostic
+for which your fix is able to produce an edit. For example, if there are three
+fields that could all be made final, but the fix only produces an edit for one
+of those places (maybe because the other two are in lists of fields), then the
+fix-in-file fix won't be shown.
+
+If a fix-in-file fix can be created then it will be returned along with any of
+the single-site fixes computed at the cursor location.
+
+In other words, most of the support for doing this comes for free; the only
+requirement is that you declare that your fix can be used this way.
+
+### Design considerations
+
+So why isn't this the default? Because it isn't always appropriate to support a
+fix-in-file fix. We believe that it's better for users to sometimes not have a
+fix-in-file fix that would have been appropriate than it is for them to have one
+that isn't appropriate. While there isn't a complete list of situations in which
+a fix-in-file fix isn't appropriate, let's look at a couple of the cases to
+consider.
+
+First, some fixes, by nature, should only be applied after due consideration.
+For example, there's a fix that will create a class declaration in response to
+seeing a reference to an undefined name. While it's useful to have a way to
+declare the name, how the name should be defined depends on the user's intent,
+so it probably isn't appropriate to create class declarations for all undefined
+identifiers without considering each case.
+
+Second, some fixes cause changes that impact other diagnostics of the same kind.
+In such a case the automated support for fix-in-file fixes might well cause an
+invalid edit to be produced, and fixes should never corrupt the user's code. For
+example, there's a fix to add `const ` before a constructor invocation. If some
+arguments to the invocation are also constructor invocations then the framework
+could add an unnecessary keyword, which would be undesirable.
+
+### Enabling the fix
+
+If it _is_ appropriate for your fix to be used as a fix-in-file fix, then there
+are two things you'll need to do to enable the fix-in-file support. The first
+step is to define another `FixKind` (in the same file in which you defined the
+first fix kind) that looks something like the following:
+
+```dart
+static const ADD_FINAL_MULTI = FixKind(
+  'dart.fix.add.final.multi',
+  DartFixKindPriority.IN_FILE,
+  "Add 'final' modifier everywhere in file",
+);
+```
+
+This is different than the original fix kind in the following ways:
+- both the name of the field and the identifier have a suffix added,
+- the priority is lower than the single location fixes, and
+- the message is worded in a way that makes it clear that multiple locations
+  will be changed.
+
+The second step is to implement a couple of additional getters in your
+`CorrectionProducer`. First, let the framework know that your fix can be used in
+this way:
+
+```dart
+@override
+bool get canBeAppliedToFile => true;
+```
+
+Then specify the fix kind associated with the fix-in-file fix:
+
+```dart
+@override
+FixKind get multiFixKind => DartFixKind.ADD_FINAL_MULTI;
+```
+
+And, if the message takes arguments (which the example above doesn't), provide
+them using something like the following:
+
+```dart
+@override
+List<Object> get multiFixArguments => ['first', 'second'];
+```
+
+That's it; the fix-in-file fix should now appear.
+
+You should, of course, write tests for the fix. Those tests will be similar in
+structure to those written to test the single application use case, but will be
+in a subclass of `FixInFileProcessorTest`. They should be added to the test file
+you created earlier for the single-site fixes
+(`analysis_server/test/src/services/correction/fix/add_final_test.dart`).
+
+The most important distinction between the two is that for the fix-in-file tests
+you'll need to ensure that there are at least two diagnostics produced for the
+test code. If possible, those two diagnostics ought to be overlapping in terms
+of the region of code impacted by the fix. For example, if the fix reverses the
+order of two arguments in an argument list (such as by converting `m(a, b)` to
+`m(b, a)`), then make one of the arguments be an invocation of `m` whose
+arguments would also need to be swapped (such as `m(a, m(b, c)`).
+
+## Bulk fixes
+
+A bulk fix is one in which all of the fixes for all of the diagnostics that have
+been reported in one or more files, such as an entire package, are applied in a
+single operation. This kind of fix is currently available through the `dart fix`
+command-line tool.
+
+A bulk fix is computed in a manner similar to the way a fix-in-file fix is
+computed except that all of the diagnostics across all of the specified files
+are iterated over. Unlike the fix-in-file fixes, when bulk fixes are requested
+only the one bulk fix that was computed is returned.
+
+### Design considerations
+
+The considerations for why you might not want to enable the fix for bulk
+application using `dart fix` include all of those given above for fix-in-file
+fixes, but there are a couple of other considerations to keep in mind.
+
+First, `dart fix` is a command-line tool, so unlike changes made in an editor
+there is no support for rolling back the changes it makes (other than whatever
+support the user has from their source control system).
+
+Second, the tool applies fixes to more than just a single diagnostic, so there
+are likely to be more edits applied. That means that there's an even higher
+probability of having conflicts between edits. The framework handles some kinds
+of conflicts automatically, but can't handle everything.
+
+### Enabling the fix
+
+If you decide that you do want your fix to be supported by `dart fix`, the only
+change that's required is to implement the following getter:
+
+```dart
+@override
+bool get canBeAppliedInBulk => true;
+```
+
+You should, of course, write tests for bulk application of the fix. Those tests
+will be identical in nature to those written to test the fix-in-file use case,
+but will be in a subclass of `BulkFixProcessorTest`. They should also be added
+to the test file you created earlier for the single-site and fix-in-file fixes
+(`analysis_server/test/src/services/correction/fix/add_final_test.dart`).
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 71e8148..6ff6528 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -61,7 +61,8 @@
     return null;
   }
 
-  CheckNameResponse? checkNewName(String filePath, int line, int column, String name) {
+  CheckNameResponse? checkNewName(
+      String filePath, int line, int column, String name) {
     var resolvedUnit = _fileResolver.resolve(path: filePath);
     var lineInfo = resolvedUnit.lineInfo;
     var offset = lineInfo.getOffsetOfLine(line) + column;
@@ -81,7 +82,7 @@
     } else if (element is FunctionElement) {
       status = validateFunctionName(name);
     }
-    if (status == null){
+    if (status == null) {
       return null;
     }
     return CheckNameResponse(lineInfo, status, element.displayName);
diff --git a/pkg/analysis_server/lib/src/lsp/client_configuration.dart b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
index 9093676..d5786cc 100644
--- a/pkg/analysis_server/lib/src/lsp/client_configuration.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
@@ -124,8 +124,22 @@
   bool get previewCommitCharacters =>
       _settings['previewCommitCharacters'] as bool? ?? false;
 
-  /// Whether diagnostics should be generated for TODO comments.
-  bool get showTodos => _settings['showTodos'] as bool? ?? false;
+  /// Whether diagnostics should be generated for all TODO comments.
+  bool get showAllTodos =>
+      _settings['showTodos'] is bool ? _settings['showTodos'] as bool : false;
+
+  /// A specific set of TODO comments that should generate diagnostics.
+  ///
+  /// Codes are all forced UPPERCASE regardless of what the client supplies.
+  ///
+  /// [showAllTodos] should be checked first, as this will return an empty
+  /// set if `showTodos` is a boolean.
+  Set<String> get showTodoTypes => _settings['showTodos'] is List
+      ? (_settings['showTodos'] as List)
+          .cast<String>()
+          .map((kind) => kind.toUpperCase())
+          .toSet()
+      : const {};
 }
 
 /// Wraps the client (editor) configuration for a specific resource.
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
index 1195c9b..68e112e 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
@@ -56,13 +56,17 @@
       if (hover.isDeprecated ?? false) {
         content.write('(deprecated) ');
       }
-      content..writeln(hover.elementDescription)..writeln('```');
+      content
+        ..writeln(hover.elementDescription)
+        ..writeln('```');
     }
 
     // Source library.
     final containingLibraryName = hover.containingLibraryName;
     if (containingLibraryName != null && containingLibraryName.isNotEmpty) {
-      content..writeln('*$containingLibraryName*')..writeln();
+      content
+        ..writeln('*$containingLibraryName*')
+        ..writeln();
     }
 
     // Doc comments.
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index 2dcd219..7098d09 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -920,7 +920,14 @@
     }
   }
 
-  bool _shouldSendError(protocol.AnalysisError error) =>
-      error.code != ErrorType.TODO.name.toLowerCase() ||
-      analysisServer.clientConfiguration.global.showTodos;
+  bool _shouldSendError(protocol.AnalysisError error) {
+    if (error.type.name != ErrorType.TODO.name) {
+      return true;
+    }
+    if (analysisServer.clientConfiguration.global.showAllTodos) {
+      return true;
+    }
+    return analysisServer.clientConfiguration.global.showTodoTypes
+        .contains(error.code.toUpperCase());
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
index d674907..8ec13f6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_block_body.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -30,6 +31,22 @@
       return;
     }
 
+    DartType? getFunctionReturnType() {
+      var parent = body.parent;
+      if (parent is MethodDeclaration) {
+        return parent.declaredElement?.returnType;
+      } else if (parent is ConstructorDeclaration) {
+        return parent.declaredElement?.returnType;
+      } else if (parent is FunctionExpression) {
+        return parent.declaredElement?.returnType;
+      }
+      return null;
+    }
+
+    var functionReturnType = getFunctionReturnType();
+    if (functionReturnType == null) {
+      return;
+    }
     var returnValueType = returnValue.typeOrThrow;
     var returnValueCode = utils.getNodeText(returnValue);
     // prepare prefix
@@ -42,7 +59,9 @@
           builder.write('async ');
         }
         builder.write('{$eol$prefix$indent');
-        if (!returnValueType.isVoid && !returnValueType.isBottom) {
+        if (!returnValueType.isVoid &&
+            !returnValueType.isBottom &&
+            !functionReturnType.isVoid) {
           builder.write('return ');
         }
         builder.write(returnValueCode);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
index abe052d..dee927b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
@@ -65,8 +65,7 @@
 
       var indent = utils.getNodePrefix(statement);
       var name = variable.name.name;
-      builder.addSimpleInsertion(
-          variable.name.end, ';' + eol + indent + name);
+      builder.addSimpleInsertion(variable.name.end, ';' + eol + indent + name);
     });
   }
 
diff --git a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
index 257fa24..ced0ca3 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -1379,7 +1379,9 @@
       buffer.write(e.name);
     }
     if (enclosingElt is ExecutableElement) {
-      buffer..write('@')..write(e.nameOffset - enclosingElt.nameOffset);
+      buffer
+        ..write('@')
+        ..write(e.nameOffset - enclosingElt.nameOffset);
     }
     return buffer;
   }
@@ -1394,6 +1396,8 @@
     // It is legal to have a named constructor with the same name as a type
     // parameter.  So we distinguish them by using '.' between the class (or
     // typedef) name and the type parameter name.
-    return e.enclosingElement!.accept(this)!..write('.')..write(e.name);
+    return e.enclosingElement!.accept(this)!
+      ..write('.')
+      ..write(e.name);
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index ebb50c0..3e9ead3 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -658,7 +658,8 @@
     var originalSource = utils.getText(range.offset, range.length);
     var pattern = _SourcePattern();
     var replaceEdits = <SourceEdit>[];
-    resolveResult.unit.accept(_GetSourcePatternVisitor(range, pattern, replaceEdits));
+    resolveResult.unit
+        .accept(_GetSourcePatternVisitor(range, pattern, replaceEdits));
     replaceEdits = replaceEdits.reversed.toList();
     var source = SourceEdit.applySequence(originalSource, replaceEdits);
     pattern.normalizedSource =
diff --git a/pkg/analysis_server/test/client/impl/abstract_client.dart b/pkg/analysis_server/test/client/impl/abstract_client.dart
index ac1a33c..caa0386 100644
--- a/pkg/analysis_server/test/client/impl/abstract_client.dart
+++ b/pkg/analysis_server/test/client/impl/abstract_client.dart
@@ -44,7 +44,7 @@
     required this.testFilePath,
     required String sdkPath,
     required this.serverOptions,
-  })   : serverChannel = MockServerChannel(),
+  })  : serverChannel = MockServerChannel(),
         pluginManager = TestPluginManager() {
     server = createAnalysisServer(sdkPath);
     var notificationStream = serverChannel.notificationController.stream;
diff --git a/pkg/analysis_server/test/client/impl/completion_driver.dart b/pkg/analysis_server/test/client/impl/completion_driver.dart
index 48a7ef0..60083d6 100644
--- a/pkg/analysis_server/test/client/impl/completion_driver.dart
+++ b/pkg/analysis_server/test/client/impl/completion_driver.dart
@@ -82,7 +82,7 @@
     required MemoryResourceProvider resourceProvider,
     required String projectPath,
     required String testFilePath,
-  })   : _resourceProvider = resourceProvider,
+  })  : _resourceProvider = resourceProvider,
         super(
             serverOptions: serverOptions ?? AnalysisServerOptions(),
             projectPath: resourceProvider.convertPath(projectPath),
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index 0e63271..04c6b0f 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -192,14 +192,18 @@
       if (badPoints.isNotEmpty) {
         err.write('No test location for tests:');
         for (var ch in badPoints) {
-          err..write(' ')..write(ch);
+          err
+            ..write(' ')
+            ..write(ch);
         }
         err.write(' ');
       }
       if (badResults.isNotEmpty) {
         err.write('No results for tests:');
         for (var ch in badResults) {
-          err..write(' ')..write(ch);
+          err
+            ..write(' ')
+            ..write(ch);
         }
       }
       throw StateError(err.toString());
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 96c7f5a..fc6dffe 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -378,10 +378,11 @@
     }
   }
 
-  Future<void> test_todos() async {
+  Future<void> test_todos_boolean() async {
     // TODOs only show up if there's also some code in the file.
     const contents = '''
     // TODO: This
+    // FIXME: This
     String a = "";
     ''';
     newFile(mainFilePath, content: contents);
@@ -394,7 +395,7 @@
       {'showTodos': true},
     );
     final initialDiagnostics = await firstDiagnosticsUpdate;
-    expect(initialDiagnostics, hasLength(1));
+    expect(initialDiagnostics, hasLength(2));
   }
 
   Future<void> test_todos_disabled() async {
@@ -439,4 +440,33 @@
     final updatedDiagnostics = await secondDiagnosticsUpdate;
     expect(updatedDiagnostics, hasLength(1));
   }
+
+  Future<void> test_todos_specific() async {
+    // TODOs only show up if there's also some code in the file.
+    const contents = '''
+    // TODO: This
+    // HACK: This
+    // FIXME: This
+    String a = "";
+    ''';
+    newFile(mainFilePath, content: contents);
+
+    final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
+    await provideConfig(
+      () => initialize(
+          workspaceCapabilities:
+              withConfigurationSupport(emptyWorkspaceClientCapabilities)),
+      {
+        // Include both casings, since this comes from the user we should handle
+        // either.
+        'showTodos': ['TODO', 'fixme']
+      },
+    );
+    final initialDiagnostics = (await firstDiagnosticsUpdate)!;
+    expect(initialDiagnostics, hasLength(2));
+    expect(
+      initialDiagnostics.map((e) => e.code!),
+      containsAll(['todo', 'fixme']),
+    );
+  }
 }
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
index 3a72bfd..303d1e8 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
@@ -162,6 +162,5 @@
 
 class Builder {
   final WidgetBuilder builder;
-  const Builder(
-      {Key key, @required this.builder});
+  const Builder({Key key, @required this.builder});
 }
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
index fc933c1..d524c70 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_async_body_test.dart
@@ -146,7 +146,6 @@
     await assertNoAssistAt('{}');
   }
 
-
   Future<void> test_syncStar() async {
     await resolveTestCode('''
 Iterable<String> f() sync* {}
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
index db04588..c135fc2 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_block_body_test.dart
@@ -163,4 +163,23 @@
 }
 ''');
   }
+
+  Future<void> test_void() async {
+    await resolveTestCode('''
+class C {
+  String? _s;
+
+  set s(String s) => _s = s;
+}
+''');
+    await assertHasAssistAt('=>', '''
+class C {
+  String? _s;
+
+  set s(String s) {
+    _s = s;
+  }
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart
index d3c41f7..da085a6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart
@@ -90,7 +90,8 @@
   }
 }
 ''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
     });
   }
 
@@ -130,7 +131,8 @@
   B m() => this;
 }
 ''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
     });
   }
 
@@ -204,7 +206,8 @@
   return 2.4;
 }
 ''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION;
     });
   }
 
@@ -229,7 +232,8 @@
   }
 }
 ''', errorFilter: (error) {
-      return error.errorCode == CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
+      return error.errorCode ==
+          CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD;
     });
   }
 }
diff --git a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
index 5698c0b..0aecc40 100644
--- a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
+++ b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
@@ -861,7 +861,9 @@
   } else if (type is MapType) {
     buffer.write('($valueCode is Map');
     if (fullDartType != 'Object?') {
-      buffer..write(' && (')..write('$valueCode.keys.every((item) => ');
+      buffer
+        ..write(' && (')
+        ..write('$valueCode.keys.every((item) => ');
       _writeTypeCheckCondition(
           buffer, interface, 'item', type.indexType, reporter);
       buffer.write('&& $valueCode.values.every((item) => ');
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 4a5235a..d11b587 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -890,6 +890,9 @@
   StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
   StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION,
   TodoCode.TODO,
+  TodoCode.FIXME,
+  TodoCode.HACK,
+  TodoCode.UNDONE,
 ];
 
 /// The lazy initialized map from [ErrorCode.uniqueName] to the [ErrorCode]
diff --git a/pkg/analyzer/lib/instrumentation/service.dart b/pkg/analyzer/lib/instrumentation/service.dart
index 617644f..4269a99 100644
--- a/pkg/analyzer/lib/instrumentation/service.dart
+++ b/pkg/analyzer/lib/instrumentation/service.dart
@@ -89,6 +89,6 @@
   InstrumentationServiceAttachment.string({
     required String id,
     required String value,
-  })   : id = id,
+  })  : id = id,
         stringValue = value;
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
index 9f3a4db..5a9400a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
@@ -28,7 +28,7 @@
     required FeatureSet packageDefaultFeatureSet,
     required Version nonPackageDefaultLanguageVersion,
     required FeatureSet nonPackageDefaultFeatureSet,
-  })   : _sdkLanguageVersion = sdkLanguageVersion,
+  })  : _sdkLanguageVersion = sdkLanguageVersion,
         _allowedExperiments = allowedExperiments,
         _resourceProvider = resourceProvider,
         _packages = packages,
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 3050f37..af436f5 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -428,8 +428,10 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_expression)..add(asOperator)..add(_type);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_expression)
+    ..add(asOperator)
+    ..add(_type);
 
   @override
   Token get endToken => _type.endToken;
@@ -641,8 +643,10 @@
   Token get beginToken => _leftHandSide.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_leftHandSide)..add(operator)..add(_rightHandSide);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_leftHandSide)
+    ..add(operator)
+    ..add(_rightHandSide);
 
   @override
   Token get endToken => _rightHandSide.endToken;
@@ -838,8 +842,9 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(awaitKeyword)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(awaitKeyword)
+    ..add(_expression);
 
   @override
   Token get endToken => _expression.endToken;
@@ -897,8 +902,10 @@
   Token get beginToken => _leftOperand.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_leftOperand)..add(operator)..add(_rightOperand);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_leftOperand)
+    ..add(operator)
+    ..add(_rightOperand);
 
   @override
   Token get endToken => _rightOperand.endToken;
@@ -973,8 +980,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(keyword)..add(star)..add(_block);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(keyword)
+    ..add(star)
+    ..add(_block);
 
   @override
   Token get endToken => _block.endToken;
@@ -1115,8 +1124,10 @@
   Token get beginToken => breakKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(breakKeyword)..add(_label)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(breakKeyword)
+    ..add(_label)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -1864,8 +1875,9 @@
   Token get beginToken => newKeyword ?? _identifier.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(newKeyword)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(newKeyword)
+    ..add(_identifier);
 
   @override
   Token get endToken => _identifier.endToken;
@@ -1985,7 +1997,9 @@
   Iterable<SyntacticEntity> get childEntities {
     ChildEntities result = ChildEntities()..add(_scriptTag);
     if (_directivesAreBeforeDeclarations) {
-      result..addAll(_directives)..addAll(_declarations);
+      result
+        ..addAll(_directives)
+        ..addAll(_declarations);
     } else {
       result.addAll(sortedDirectivesAndDeclarations);
     }
@@ -2604,8 +2618,10 @@
   Token get beginToken => _type.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_type)..add(period)..add(_name);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_type)
+    ..add(period)
+    ..add(_name);
 
   @override
   Token get endToken {
@@ -2718,8 +2734,10 @@
   Token get beginToken => continueKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(continueKeyword)..add(_label)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(continueKeyword)
+    ..add(_label)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -2781,8 +2799,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(keyword)..add(_type)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(keyword)
+    ..add(_type)
+    ..add(_identifier);
 
   @override
   LocalVariableElement? get declaredElement {
@@ -2883,8 +2903,10 @@
   Token get beginToken => _parameter.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_parameter)..add(separator)..add(_defaultValue);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_parameter)
+    ..add(separator)
+    ..add(_defaultValue);
 
   @override
   Token? get covariantKeyword => null;
@@ -3566,8 +3588,9 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_expression)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_expression)
+    ..add(semicolon);
 
   @override
   Token get endToken {
@@ -3618,8 +3641,9 @@
   Token get beginToken => extendsKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(extendsKeyword)..add(_superclass);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(extendsKeyword)
+    ..add(_superclass);
 
   @override
   Token get endToken => _superclass.endToken;
@@ -3899,8 +3923,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(staticKeyword)..add(_fieldList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(staticKeyword)
+    ..add(_fieldList)
+    ..add(semicolon);
 
   @override
   Element? get declaredElement => null;
@@ -4092,8 +4118,9 @@
   Token get beginToken => inKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(inKeyword)..add(_iterable);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(inKeyword)
+    ..add(_iterable);
 
   @override
   Token get endToken => _iterable.endToken;
@@ -4393,7 +4420,9 @@
       }
       result.add(parameter);
     }
-    return result..add(rightDelimiter)..add(rightParenthesis);
+    return result
+      ..add(rightDelimiter)
+      ..add(rightParenthesis);
   }
 
   @override
@@ -4868,8 +4897,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_typeParameters)..add(_parameters)..add(_body);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_typeParameters)
+    ..add(_parameters)
+    ..add(_body);
 
   @override
   Token get endToken {
@@ -4934,8 +4965,9 @@
   Token get beginToken => _function.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_function)..add(_argumentList);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_function)
+    ..add(_argumentList);
 
   @override
   Token get endToken => _argumentList.endToken;
@@ -4989,8 +5021,9 @@
   Token get beginToken => function.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(function)..add(typeArguments);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(function)
+    ..add(typeArguments);
 
   @override
   Token get endToken => typeArguments?.endToken ?? function.endToken;
@@ -5167,8 +5200,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_returnType)..add(identifier)..add(parameters);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_returnType)
+    ..add(identifier)
+    ..add(parameters);
 
   @override
   Token get endToken => question ?? _parameters.endToken;
@@ -6208,8 +6243,10 @@
   Token get beginToken => leftBracket;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(leftBracket)..add(_expression)..add(rightBracket);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(leftBracket)
+    ..add(_expression)
+    ..add(rightBracket);
 
   @override
   Token get endToken => rightBracket ?? _expression.endToken;
@@ -6462,8 +6499,9 @@
   Token get beginToken => _label.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_label)..add(colon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_label)
+    ..add(colon);
 
   @override
   Token get endToken => colon;
@@ -6510,8 +6548,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(libraryKeyword)..add(_name)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(libraryKeyword)
+    ..add(_name)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -6725,8 +6765,10 @@
   Token get beginToken => _key.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_key)..add(separator)..add(_value);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_key)
+    ..add(separator)
+    ..add(_value);
 
   @override
   Token get endToken => _value.endToken;
@@ -7213,8 +7255,9 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_name)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_name)
+    ..add(_expression);
 
   @override
   ParameterElement? get element {
@@ -7337,8 +7380,9 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(nativeKeyword)..add(_name);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(nativeKeyword)
+    ..add(_name);
 
   @override
   Token get endToken {
@@ -7391,8 +7435,10 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(nativeKeyword)..add(_stringLiteral)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(nativeKeyword)
+    ..add(_stringLiteral)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -7612,7 +7658,9 @@
     } else {
       result.addAll(sortedCommentAndAnnotations);
     }
-    result..add(requiredKeyword)..add(covariantKeyword);
+    result
+      ..add(requiredKeyword)
+      ..add(covariantKeyword);
     return result;
   }
 
@@ -7828,8 +7876,10 @@
       : super(comment, metadata, partUri);
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(partKeyword)..add(_uri)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(partKeyword)
+    ..add(_uri)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -7959,8 +8009,9 @@
   Token get beginToken => _operand.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_operand)..add(operator);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_operand)
+    ..add(operator);
 
   @override
   Token get endToken => operator;
@@ -8032,8 +8083,10 @@
   Token get beginToken => _prefix.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_prefix)..add(period)..add(_identifier);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_prefix)
+    ..add(period)
+    ..add(_identifier);
 
   @override
   Token get endToken => _identifier.endToken;
@@ -8116,8 +8169,9 @@
   Token get beginToken => operator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(operator)..add(_operand);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(operator)
+    ..add(_operand);
 
   @override
   Token get endToken => _operand.endToken;
@@ -8199,8 +8253,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_target)..add(operator)..add(_propertyName);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_target)
+    ..add(operator)
+    ..add(_propertyName);
 
   @override
   Token get endToken => _propertyName.endToken;
@@ -8414,8 +8470,10 @@
   Token get beginToken => returnKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(returnKeyword)..add(_expression)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(returnKeyword)
+    ..add(_expression)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -8655,8 +8713,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(keyword)..add(_type)..add(identifier);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(keyword)
+    ..add(_type)
+    ..add(identifier);
 
   @override
   Token get endToken => identifier?.endToken ?? type!.endToken;
@@ -8996,8 +9056,9 @@
   Token get beginToken => spreadOperator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(spreadOperator)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(spreadOperator)
+    ..add(_expression);
 
   @override
   Token get endToken => _expression.endToken;
@@ -9659,8 +9720,9 @@
   Token get beginToken => throwKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(throwKeyword)..add(_expression);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(throwKeyword)
+    ..add(_expression);
 
   @override
   Token get endToken {
@@ -9717,8 +9779,9 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_variableList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_variableList)
+    ..add(semicolon);
 
   @override
   Element? get declaredElement => null;
@@ -9957,8 +10020,9 @@
     _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?);
   }
 
-  ChildEntities get _childEntities =>
-      ChildEntities()..add(constKeyword)..add(_typeArguments);
+  ChildEntities get _childEntities => ChildEntities()
+    ..add(constKeyword)
+    ..add(_typeArguments);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -10044,8 +10108,10 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_name)..add(_typeArguments)..add(question);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_name)
+    ..add(_typeArguments)
+    ..add(question);
 
   @override
   Token get endToken => question ?? _typeArguments?.endToken ?? _name.endToken;
@@ -10128,8 +10194,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_name)..add(extendsKeyword)..add(_bound);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_name)
+    ..add(extendsKeyword)
+    ..add(_bound);
 
   @override
   TypeParameterElement? get declaredElement =>
@@ -10345,8 +10413,10 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      super._childEntities..add(_name)..add(equals)..add(_initializer);
+  Iterable<SyntacticEntity> get childEntities => super._childEntities
+    ..add(_name)
+    ..add(equals)
+    ..add(_initializer);
 
   @override
   VariableElement? get declaredElement =>
@@ -10538,8 +10608,9 @@
   Token get beginToken => _variableList.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_variableList)..add(semicolon);
+  Iterable<SyntacticEntity> get childEntities => ChildEntities()
+    ..add(_variableList)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
diff --git a/pkg/analyzer/lib/src/dart/error/todo_codes.dart b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
index ef128be..6b3d5c9 100644
--- a/pkg/analyzer/lib/src/dart/error/todo_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
@@ -14,11 +14,33 @@
  */
 class TodoCode extends ErrorCode {
   /**
-   * The single enum of TodoCode.
+   * A standard TODO comment marked as TODO.
    */
   static const TodoCode TODO = TodoCode('TODO');
 
   /**
+   * A TODO comment marked as FIXME.
+   */
+  static const TodoCode FIXME = TodoCode('FIXME');
+
+  /**
+   * A TODO comment marked as HACK.
+   */
+  static const TodoCode HACK = TodoCode('HACK');
+
+  /**
+   * A TODO comment marked as UNDONE.
+   */
+  static const TodoCode UNDONE = TodoCode('UNDONE');
+
+  static const _codes = {
+    'TODO': TODO,
+    'FIXME': FIXME,
+    'HACK': HACK,
+    'UNDONE': UNDONE,
+  };
+
+  /**
    * This matches the two common Dart task styles
    *
    * * TODO:
@@ -37,9 +59,16 @@
    *    * TODO(username): This line is
    *    *  wrapped onto the next line
    *    */
+   *
+   * The matched kind of the TODO (TODO, FIXME, etc.) is returned in named
+   * captures of "kind1", "kind2" (since it is not possible to reuse a name
+   * across different parts of the regex).
    */
   static RegExp TODO_REGEX = RegExp(
-      "([\\s/\\*])((TODO[^\\w\\d][^\\r\\n]*(?:\\n\\s*\\*  [^\\r\\n]*)*)|(TODO:?\$))");
+      '([\\s/\\*])(((?<kind1>$_TODO_KIND_PATTERN)[^\\w\\d][^\\r\\n]*(?:\\n\\s*\\*  [^\\r\\n]*)*)'
+      '|((?<kind2>$_TODO_KIND_PATTERN):?\$))');
+
+  static final _TODO_KIND_PATTERN = _codes.keys.join('|');
 
   /**
    * Initialize a newly created error code to have the given [name].
@@ -56,4 +85,7 @@
 
   @override
   ErrorType get type => ErrorType.TODO;
+
+  /// Returns the TodoCode for [kind], falling back to [TODO].
+  static TodoCode forKind(String kind) => _codes[kind] ?? TODO;
 }
diff --git a/pkg/analyzer/lib/src/dart/micro/library_graph.dart b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
index 0947549..cbee620 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
@@ -347,7 +347,9 @@
       ..addAll(importedFiles)
       ..addAll(exportedFiles)
       ..addAll(partedFiles);
-    directReferencedLibraries..addAll(importedFiles)..addAll(exportedFiles);
+    directReferencedLibraries
+      ..addAll(importedFiles)
+      ..addAll(exportedFiles);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
index beb8e4f..d243983 100644
--- a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
@@ -130,8 +130,7 @@
     }
 
     if (loopVariable != null) {
-      _resolver.flowAnalysis.flow
-          ?.declare(loopVariable.declaredElement!, true);
+      _resolver.flowAnalysis.flow?.declare(loopVariable.declaredElement!, true);
     }
 
     _resolver.flowAnalysis.flow?.forEach_bodyBegin(node);
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
index 599eda3..be1eec6 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
@@ -23,7 +23,7 @@
   FunctionExpressionResolver({
     required ResolverVisitor resolver,
     required MigrationResolutionHooks? migrationResolutionHooks,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _migrationResolutionHooks = migrationResolutionHooks,
         _inferenceHelper = resolver.inferenceHelper;
 
diff --git a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
index 2927a58..376a9d7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
@@ -27,7 +27,7 @@
 
   PostfixExpressionResolver({
     required ResolverVisitor resolver,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _typePropertyResolver = resolver.typePropertyResolver,
         _inferenceHelper = resolver.inferenceHelper,
         _assignmentShared = AssignmentExpressionShared(
diff --git a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
index 4f5a2d4..87aa6c6 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
@@ -27,7 +27,7 @@
 
   PrefixExpressionResolver({
     required ResolverVisitor resolver,
-  })   : _resolver = resolver,
+  })  : _resolver = resolver,
         _typePropertyResolver = resolver.typePropertyResolver,
         _inferenceHelper = resolver.inferenceHelper,
         _assignmentShared = AssignmentExpressionShared(
@@ -210,8 +210,7 @@
         if (operand is SimpleIdentifier) {
           var element = operand.staticElement;
           if (element is PromotableElement) {
-            _resolver.flowAnalysis.flow
-                ?.write(node, element, staticType, null);
+            _resolver.flowAnalysis.flow?.write(node, element, staticType, null);
           }
         }
       }
diff --git a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
index b1a079a..2978a39 100644
--- a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
+++ b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
@@ -32,7 +32,7 @@
   ConstructorFieldsVerifier({
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeSystem = typeSystem,
+  })  : _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
   void enterClass(ClassDeclaration node) {
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
index 7970e6f..e16cad4 100644
--- a/pkg/analyzer/lib/src/error/correct_override.dart
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -26,7 +26,7 @@
   CorrectOverrideHelper({
     required LibraryElementImpl library,
     required ExecutableElement thisMember,
-  })   : _library = library,
+  })  : _library = library,
         _typeSystem = library.typeSystem,
         _thisMember = thisMember {
     _computeThisTypeForSubtype();
@@ -106,7 +106,7 @@
 
   CovariantParametersVerifier({
     required ExecutableElement thisMember,
-  })   : _session = thisMember.library.session as AnalysisSessionImpl,
+  })  : _session = thisMember.library.session as AnalysisSessionImpl,
         _typeSystem = thisMember.library.typeSystem as TypeSystemImpl,
         _thisMember = thisMember;
 
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
index 933fe37..76860af 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -21,7 +21,7 @@
   GetterSetterTypesVerifier({
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeSystem = typeSystem,
+  })  : _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
   ErrorCode get _errorCode {
diff --git a/pkg/analyzer/lib/src/error/return_type_verifier.dart b/pkg/analyzer/lib/src/error/return_type_verifier.dart
index b222820..a4e5fe9 100644
--- a/pkg/analyzer/lib/src/error/return_type_verifier.dart
+++ b/pkg/analyzer/lib/src/error/return_type_verifier.dart
@@ -26,7 +26,7 @@
     required TypeProviderImpl typeProvider,
     required TypeSystemImpl typeSystem,
     required ErrorReporter errorReporter,
-  })   : _typeProvider = typeProvider,
+  })  : _typeProvider = typeProvider,
         _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
diff --git a/pkg/analyzer/lib/src/error/todo_finder.dart b/pkg/analyzer/lib/src/error/todo_finder.dart
index f3e536c..cbb1d38 100644
--- a/pkg/analyzer/lib/src/error/todo_finder.dart
+++ b/pkg/analyzer/lib/src/error/todo_finder.dart
@@ -65,7 +65,7 @@
   /// Returns the next comment token to begin searching from (skipping over
   /// any continuations).
   Token? _scrapeTodoComment(Token commentToken, LineInfo lineInfo) {
-    Iterable<Match> matches =
+    Iterable<RegExpMatch> matches =
         TodoCode.TODO_REGEX.allMatches(commentToken.lexeme);
     // Track the comment that will be returned for looking for the next todo.
     // This will be moved along if additional comments are consumed by multiline
@@ -73,11 +73,12 @@
     var nextComment = commentToken.next;
     final commentLocation = lineInfo.getLocation(commentToken.offset);
 
-    for (Match match in matches) {
+    for (RegExpMatch match in matches) {
       int offset = commentToken.offset + match.start + match.group(1)!.length;
       int column =
           commentLocation.columnNumber + match.start + match.group(1)!.length;
       String todoText = match.group(2)!;
+      String todoKind = match.namedGroup('kind1') ?? match.namedGroup('kind2')!;
       int end = offset + todoText.length;
 
       if (commentToken.type == TokenType.MULTI_LINE_COMMENT) {
@@ -126,7 +127,7 @@
       }
 
       _errorReporter.reportErrorForOffset(
-          TodoCode.TODO, offset, end - offset, [todoText]);
+          TodoCode.forKind(todoKind), offset, end - offset, [todoText]);
     }
 
     return nextComment;
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
index cf6fd54..18fe9b0 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_array_multi_non_positive_input_test.dart
@@ -16,8 +16,7 @@
 @reflectiveTest
 class FfiArrayMultiNonPositiveInput extends PubPackageResolutionTest {
   test_multi() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -32,8 +31,7 @@
   }
 
   test_negative() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -48,8 +46,7 @@
   }
 
   test_non_error() async {
-    await assertNoErrorsInCode(
-'''
+    await assertNoErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
@@ -62,8 +59,7 @@
   }
 
   test_zero() async {
-    await assertErrorsInCode(
-'''
+    await assertErrorsInCode('''
 import "dart:ffi";
 
 class MyStruct extends Struct {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
index 4e8d01c..518858a 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
@@ -41,8 +41,11 @@
 class C { const C(int i); }
 @C(a.x) main () {}
 ''', [
-      error(CompileTimeErrorCode
-          .INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY, 79, 3),
+      error(
+          CompileTimeErrorCode
+              .INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY,
+          79,
+          3),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/todo_test.dart b/pkg/analyzer/test/src/diagnostics/todo_test.dart
index f61b675..a72d8b3 100644
--- a/pkg/analyzer/test/src/diagnostics/todo_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/todo_test.dart
@@ -15,6 +15,26 @@
 
 @reflectiveTest
 class TodoTest extends PubPackageResolutionTest {
+  test_fixme() async {
+    await assertErrorsInCode(r'''
+main() {
+  // FIXME: Implement
+}
+''', [
+      error(TodoCode.FIXME, 14, 16, text: 'FIXME: Implement'),
+    ]);
+  }
+
+  test_hack() async {
+    await assertErrorsInCode(r'''
+main() {
+  // HACK: This is a hack
+}
+''', [
+      error(TodoCode.HACK, 14, 20, text: 'HACK: This is a hack'),
+    ]);
+  }
+
   test_todo_multiLineComment() async {
     await assertErrorsInCode(r'''
 main() {
@@ -162,4 +182,14 @@
           text: 'TODO: Implement something that is too long for one line'),
     ]);
   }
+
+  test_undone() async {
+    await assertErrorsInCode(r'''
+main() {
+  // UNDONE: This was undone
+}
+''', [
+      error(TodoCode.UNDONE, 14, 23, text: 'UNDONE: This was undone'),
+    ]);
+  }
 }
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
index 946343c..0707033 100644
--- a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
@@ -28,8 +28,7 @@
   /// types.
   ///
   /// The logic is the same as the one used in [writeType]
-  bool canWriteType(DartType? type,
-      {ExecutableElement? methodBeingCopied});
+  bool canWriteType(DartType? type, {ExecutableElement? methodBeingCopied});
 
   /// Write the code for a declaration of a class with the given [name]. If a
   /// list of [interfaces] is provided, then the class will implement those
@@ -316,8 +315,7 @@
   /// If a [methodBeingCopied] is provided, then type parameters defined by that
   /// method are assumed to be part of what is being written and hence valid
   /// types.
-  bool canWriteType(DartType? type,
-      {ExecutableElement? methodBeingCopied});
+  bool canWriteType(DartType? type, {ExecutableElement? methodBeingCopied});
 
   /// Create one or more edits that will convert the given function [body] from
   /// being synchronous to be asynchronous. This includes adding the `async`
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
index d190e3d..185d382 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
@@ -52,8 +52,7 @@
   /// Update the completion [target] and [dotTarget] based on the given [unit].
   Expression? _computeDotTarget(
       DartCompletionRequest request, AstNode? entryPoint) {
-    var target = CompletionTarget.forOffset(
-        request.result.unit, request.offset,
+    var target = CompletionTarget.forOffset(request.result.unit, request.offset,
         entryPoint: entryPoint);
     var node = target.containingNode;
     if (node is MethodInvocation) {
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 57ecf0f..434091d 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -143,6 +143,9 @@
   /// Flag to stop after splitting the program.
   static const String stopAfterProgramSplit = '--stop-after-program-split';
 
+  static const String writeProgramSplit = '--write-program-split';
+  static const String readProgramSplit = '--read-program-split';
+
   // The syntax-only level of support for generic methods is included in the
   // 1.50 milestone for Dart. It is not experimental, but also not permanent:
   // a full implementation is expected in the future. Hence, the
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index b3f137b..024488f 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -20,6 +20,9 @@
 import 'common_elements.dart' show ElementEnvironment;
 import 'deferred_load/deferred_load.dart' show DeferredLoadTask;
 import 'deferred_load/output_unit.dart' show OutputUnitData;
+import 'deferred_load/program_split_constraints/nodes.dart' as psc
+    show ConstraintData;
+import 'deferred_load/program_split_constraints/parser.dart' as psc show Parser;
 import 'diagnostics/code_location.dart';
 import 'diagnostics/messages.dart' show Message, MessageTemplate;
 import 'dump_info.dart' show DumpInfoTask;
@@ -121,6 +124,8 @@
 
   bool compilationFailed = false;
 
+  psc.ConstraintData programSplitConstraintsData;
+
   // Callback function used for testing resolution enqueuing.
   void Function() onResolutionQueueEmptyForTesting;
 
@@ -242,6 +247,12 @@
     assert(uri != null);
     reporter.log('Compiling $uri (${options.buildId})');
 
+    if (options.readProgramSplit != null) {
+      var constraintParser = psc.Parser();
+      programSplitConstraintsData =
+          await constraintParser.read(provider, options.readProgramSplit);
+    }
+
     if (onlyPerformGlobalTypeInference) {
       ir.Component component =
           await serializationTask.deserializeComponentAndUpdateOptions();
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index f506091..5b95d9e 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -554,6 +554,8 @@
     new OptionHandler(Flags.disableRtiOptimization, passThrough),
     new OptionHandler(Flags.terse, passThrough),
     new OptionHandler('--deferred-map=.+', passThrough),
+    new OptionHandler('${Flags.writeProgramSplit}=.+', passThrough),
+    new OptionHandler('${Flags.readProgramSplit}=.+', passThrough),
     new OptionHandler('${Flags.dumpInfo}|${Flags.dumpInfo}=.+', setDumpInfo),
     new OptionHandler('--disallow-unsafe-eval', ignoreOption),
     new OptionHandler(Option.showPackageWarnings, passThrough),
diff --git a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
index 69cd2c4..fca24eb 100644
--- a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
+++ b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
@@ -100,7 +100,7 @@
       // all deferred roots.
       info.deferredRoots.forEach((entity, imports) {
         for (ImportEntity deferredImport in imports) {
-          queue.addEntityData(entity, importSets.singleton(deferredImport));
+          queue.addEntityData(entity, importSets.initialSetOf(deferredImport));
         }
       });
     }
diff --git a/pkg/compiler/lib/src/deferred_load/deferred_load.dart b/pkg/compiler/lib/src/deferred_load/deferred_load.dart
index 360d33e..1d21d68 100644
--- a/pkg/compiler/lib/src/deferred_load/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load/deferred_load.dart
@@ -268,6 +268,8 @@
 // contains a bigger delta.)
 library deferred_load;
 
+import 'program_split_constraints/builder.dart' as psc show Builder;
+
 import 'algorithm_state.dart';
 import 'entity_data.dart';
 import 'import_set.dart';
@@ -525,6 +527,14 @@
           }
         });
       }
+
+      // If program split constraints are provided, then parse and interpret
+      // them now.
+      if (compiler.programSplitConstraintsData != null) {
+        var builder = psc.Builder(compiler.programSplitConstraintsData);
+        var transitions = builder.buildTransitionsMap(_allDeferredImports);
+        importSets.buildInitialSets(transitions);
+      }
     });
   }
 
diff --git a/pkg/compiler/lib/src/deferred_load/import_set.dart b/pkg/compiler/lib/src/deferred_load/import_set.dart
index 2d24a74..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..f5ad80a 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 802eace..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 @@
         'endOptionalForma