Version 2.16.0-125.0.dev

Merge commit '8cdc0e647441ee2d470995efd53d04836efb3f67' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
index 81a7644..9741d8c 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -61,8 +61,9 @@
   }
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
-    listener?.beginClassDeclaration(begin, abstractToken, name);
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+    listener?.beginClassDeclaration(begin, abstractToken, macroToken, name);
   }
 
   @override
@@ -339,8 +340,9 @@
 
   @override
   void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token name) {
-    listener?.beginNamedMixinApplication(begin, abstractToken, name);
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+    listener?.beginNamedMixinApplication(
+        begin, abstractToken, macroToken, name);
   }
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index be42436..2f5e2a4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -126,7 +126,8 @@
   /// (or extraneous modifiers in the case of recovery) preceding [name].
   ///
   /// At this point we have parsed the name and type parameter declarations.
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {}
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {}
 
   /// Handle an extends clause in a class declaration. Substructures:
   /// - supertype (may be a mixin application)
@@ -720,7 +721,7 @@
   ///
   /// At this point we have parsed the name and type parameter declarations.
   void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token name) {}
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {}
 
   /// Handle a named mixin application with clause (e.g. "A with B, C").
   /// Substructures:
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 6ffcaf0..43e8331 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -494,7 +494,8 @@
     token = parseMetadataStar(token);
     Token next = token.next!;
     if (next.isTopLevelKeyword) {
-      return parseTopLevelKeywordDeclaration(token, next, directiveState);
+      return parseTopLevelKeywordDeclaration(/* start = */ token,
+          /* keyword = */ next, /* macroToken = */ null, directiveState);
     }
     Token start = token;
     // Skip modifiers to find a top level keyword or identifier
@@ -513,8 +514,16 @@
       }
     }
     next = token.next!;
+    Token? macroToken;
+    if (next.isIdentifier &&
+        next.lexeme == 'macro' &&
+        optional('class', next.next!)) {
+      macroToken = next;
+      next = next.next!;
+    }
     if (next.isTopLevelKeyword) {
-      return parseTopLevelKeywordDeclaration(start, next, directiveState);
+      return parseTopLevelKeywordDeclaration(/* start = */ start,
+          /* keyword = */ next, /* macroToken = */ macroToken, directiveState);
     } else if (next.isKeywordOrIdentifier) {
       // TODO(danrubel): improve parseTopLevelMember
       // so that we don't parse modifiers twice.
@@ -591,14 +600,16 @@
 
   /// Parse any top-level declaration that begins with a keyword.
   /// [start] is the token before any modifiers preceding [keyword].
-  Token parseTopLevelKeywordDeclaration(
-      Token start, Token keyword, DirectiveContext? directiveState) {
+  Token parseTopLevelKeywordDeclaration(Token start, Token keyword,
+      Token? macroToken, DirectiveContext? directiveState) {
     assert(keyword.isTopLevelKeyword);
     final String? value = keyword.stringValue;
     if (identical(value, 'class')) {
       directiveState?.checkDeclaration();
-      Token? abstractToken = parseClassDeclarationModifiers(start, keyword);
-      return parseClassOrNamedMixinApplication(abstractToken, keyword);
+      Token? abstractToken =
+          parseClassDeclarationModifiers(start, macroToken ?? keyword);
+      return parseClassOrNamedMixinApplication(
+          abstractToken, macroToken, keyword);
     } else if (identical(value, 'enum')) {
       directiveState?.checkDeclaration();
       parseTopLevelKeywordModifiers(start, keyword);
@@ -2055,7 +2066,7 @@
   }
 
   Token parseClassOrNamedMixinApplication(
-      Token? abstractToken, Token classKeyword) {
+      Token? abstractToken, Token? macroToken, Token classKeyword) {
     assert(optional('class', classKeyword));
     Token begin = abstractToken ?? classKeyword;
     listener.beginClassOrMixinOrNamedMixinApplicationPrelude(begin);
@@ -2065,10 +2076,11 @@
             name, /* inDeclaration = */ true, /* allowsVariance = */ true)
         .parseVariables(name, this);
     if (optional('=', token.next!)) {
-      listener.beginNamedMixinApplication(begin, abstractToken, name);
+      listener.beginNamedMixinApplication(
+          begin, abstractToken, macroToken, name);
       return parseNamedMixinApplication(token, begin, classKeyword);
     } else {
-      listener.beginClassDeclaration(begin, abstractToken, name);
+      listener.beginClassDeclaration(begin, abstractToken, macroToken, name);
       return parseClass(token, begin, classKeyword, name.lexeme);
     }
   }
diff --git a/pkg/analysis_server/test/services/correction/sort_members_test.dart b/pkg/analysis_server/test/services/correction/sort_members_test.dart
index 2d3b8a2..87042b0 100644
--- a/pkg/analysis_server/test/services/correction/sort_members_test.dart
+++ b/pkg/analysis_server/test/services/correction/sort_members_test.dart
@@ -977,25 +977,7 @@
 ''');
   }
 
-  Future<void> test_mixinMembers_method() async {
-    await _parseTestUnit(r'''
-mixin A {
-  c() {}
-  a() {}
-  b() {}
-}
-''');
-    // validate change
-    _assertSort(r'''
-mixin A {
-  a() {}
-  b() {}
-  c() {}
-}
-''');
-  }
-
-  Future<void> test_unitMembers_class() async {
+  Future<void> test_unit_class() async {
     await _parseTestUnit(r'''
 class C {}
 class A {}
@@ -1009,7 +991,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_class_ignoreCase() async {
+  Future<void> test_unit_class_ignoreCase() async {
     await _parseTestUnit(r'''
 class C {}
 class a {}
@@ -1023,7 +1005,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_classTypeAlias() async {
+  Future<void> test_unit_classTypeAlias() async {
     await _parseTestUnit(r'''
 class M {}
 class C = Object with M;
@@ -1039,7 +1021,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_directive_hasDirective() async {
+  Future<void> test_unit_directive_hasDirective() async {
     await _parseTestUnit(r'''
 library lib;
 class C {}
@@ -1055,7 +1037,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_directive_noDirective_hasComment_line() async {
+  Future<void> test_unit_directive_noDirective_hasComment_line() async {
     await _parseTestUnit(r'''
 // Some comment
 
@@ -1073,7 +1055,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_directive_noDirective_noComment() async {
+  Future<void> test_unit_directive_noDirective_noComment() async {
     await _parseTestUnit(r'''
 
 class B {}
@@ -1089,7 +1071,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_enum() async {
+  Future<void> test_unit_enum() async {
     await _parseTestUnit(r'''
 enum C {x, y}
 enum A {x, y}
@@ -1103,7 +1085,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_enumClass() async {
+  Future<void> test_unit_enumClass() async {
     await _parseTestUnit(r'''
 enum C {x, y}
 class A {}
@@ -1119,7 +1101,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_extensionClass() async {
+  Future<void> test_unit_extensionClass() async {
     await _parseTestUnit(r'''
 extension E on C {}
 class C {}
@@ -1131,7 +1113,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_extensions() async {
+  Future<void> test_unit_extensions() async {
     await _parseTestUnit(r'''
 extension E2 on String {}
 extension on List {}
@@ -1147,7 +1129,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_function() async {
+  Future<void> test_unit_function() async {
     await _parseTestUnit(r'''
 fc() {}
 fa() {}
@@ -1161,7 +1143,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_functionTypeAlias() async {
+  Future<void> test_unit_functionTypeAlias() async {
     await _parseTestUnit(r'''
 typedef FC();
 typedef FA();
@@ -1175,7 +1157,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_genericTypeAlias() async {
+  Future<void> test_unit_genericTypeAlias() async {
     await _parseTestUnit(r'''
 typedef FC = void Function();
 typedef FA = void Function();
@@ -1189,7 +1171,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_importsAndDeclarations() async {
+  Future<void> test_unit_importsAndDeclarations() async {
     await _parseTestUnit(r'''
 import 'dart:a';
 import 'package:b';
@@ -1212,7 +1194,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_mainFirst() async {
+  Future<void> test_unit_mainFirst() async {
     await _parseTestUnit(r'''
 class C {}
 aaa() {}
@@ -1232,7 +1214,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_mix() async {
+  Future<void> test_unit_mix() async {
     await _parseTestUnit(r'''
 _mmm() {}
 typedef nnn();
@@ -1294,7 +1276,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_mixin() async {
+  Future<void> test_unit_mixin() async {
     await _parseTestUnit(r'''
 mixin C {}
 mixin A {}
@@ -1307,7 +1289,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_topLevelVariable() async {
+  Future<void> test_unit_topLevelVariable() async {
     await _parseTestUnit(r'''
 int c;
 int a;
@@ -1321,7 +1303,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_topLevelVariable_withConst() async {
+  Future<void> test_unit_topLevelVariable_withConst() async {
     await _parseTestUnit(r'''
 int c;
 int a;
@@ -1339,7 +1321,7 @@
 ''');
   }
 
-  Future<void> test_unitMembers_trailingComments() async {
+  Future<void> test_unit_trailingComments() async {
     await _parseTestUnit(r'''
 // Header
 class B {} // B
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index 2ac11df..9922aec 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -34,6 +34,9 @@
   /// Feature information for generic metadata.
   static final generic_metadata = ExperimentalFeatures.generic_metadata;
 
+  /// Feature information for macros.
+  static final macros = ExperimentalFeatures.macros;
+
   /// Feature information for spread collections.
   static final spread_collections = ExperimentalFeatures.spread_collections;
 
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index d9e553e..a0b7a9c 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -814,6 +814,9 @@
   /// Return `true` if this class is declared to be an abstract class.
   bool get isAbstract;
 
+  /// Return the 'macro' keyword, or `null` if the keyword was absent.
+  Token? get macroKeyword;
+
   /// Return the native clause for this class, or `null` if the class does not
   /// have a native clause.
   NativeClause? get nativeClause;
@@ -901,6 +904,10 @@
   /// Return `true` if this class is declared to be an abstract class.
   bool get isAbstract;
 
+  /// Return the token for the 'macro' keyword, or `null` if this is not
+  /// defining a macro class.
+  Token? get macroKeyword;
+
   @override
   SimpleIdentifier get name;
 
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index 45c0d49..9cb8248 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -118,7 +118,8 @@
   /// Returns a newly created class declaration. Either or both of the
   /// [comment] and [metadata] can be `null` if the class does not have the
   /// corresponding attribute. The [abstractKeyword] can be `null` if the class
-  /// is not abstract. The [typeParameters] can be `null` if the class does not
+  /// is not abstract. The [macroKeyword] can be `null` if the class is not a
+  /// macro class. The [typeParameters] can be `null` if the class does not
   /// have any type parameters. Any or all of the [extendsClause], [withClause],
   /// and [implementsClause] can be `null` if the class does not have the
   /// corresponding clause. The list of [members] can be `null` if the class
@@ -127,6 +128,7 @@
       Comment? comment,
       List<Annotation>? metadata,
       Token? abstractKeyword,
+      Token? macroKeyword,
       Token classKeyword,
       SimpleIdentifier name,
       TypeParameterList? typeParameters,
@@ -141,7 +143,8 @@
   /// and [metadata] can be `null` if the class type alias does not have the
   /// corresponding attribute. The [typeParameters] can be `null` if the class
   /// does not have any type parameters. The [abstractKeyword] can be `null` if
-  /// the class is not abstract. The [implementsClause] can be `null` if the
+  /// the class is not abstract. The [macroKeyword] can be `null` if the class
+  /// is not a macro class. The [implementsClause] can be `null` if the
   /// class does not implement any interfaces.
   ClassTypeAlias classTypeAlias(
       Comment? comment,
@@ -151,6 +154,7 @@
       TypeParameterList? typeParameters,
       Token equals,
       Token? abstractKeyword,
+      Token? macroKeyword,
       NamedType superclass,
       WithClause withClause,
       ImplementsClause? implementsClause,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 88c2ab5..a10310d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -83,7 +83,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 191;
+  static const int DATA_VERSION = 192;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 9d06f65..1fda845 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -21,6 +21,7 @@
   EnableString.extension_methods: ExperimentalFeatures.extension_methods,
   EnableString.extension_types: ExperimentalFeatures.extension_types,
   EnableString.generic_metadata: ExperimentalFeatures.generic_metadata,
+  EnableString.macros: ExperimentalFeatures.macros,
   EnableString.named_arguments_anywhere:
       ExperimentalFeatures.named_arguments_anywhere,
   EnableString.non_nullable: ExperimentalFeatures.non_nullable,
@@ -62,6 +63,9 @@
   /// String to enable the experiment "generic-metadata"
   static const String generic_metadata = 'generic-metadata';
 
+  /// String to enable the experiment "macros"
+  static const String macros = 'macros';
+
   /// String to enable the experiment "named-arguments-anywhere"
   static const String named_arguments_anywhere = 'named-arguments-anywhere';
 
@@ -177,8 +181,18 @@
     releaseVersion: Version.parse('2.14.0'),
   );
 
-  static final named_arguments_anywhere = ExperimentalFeature(
+  static final macros = ExperimentalFeature(
     index: 8,
+    enableString: EnableString.macros,
+    isEnabledByDefault: IsEnabledByDefault.macros,
+    isExpired: IsExpired.macros,
+    documentation: 'Static meta-programming',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
+  static final named_arguments_anywhere = ExperimentalFeature(
+    index: 9,
     enableString: EnableString.named_arguments_anywhere,
     isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere,
     isExpired: IsExpired.named_arguments_anywhere,
@@ -188,7 +202,7 @@
   );
 
   static final non_nullable = ExperimentalFeature(
-    index: 9,
+    index: 10,
     enableString: EnableString.non_nullable,
     isEnabledByDefault: IsEnabledByDefault.non_nullable,
     isExpired: IsExpired.non_nullable,
@@ -198,7 +212,7 @@
   );
 
   static final nonfunction_type_aliases = ExperimentalFeature(
-    index: 10,
+    index: 11,
     enableString: EnableString.nonfunction_type_aliases,
     isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases,
     isExpired: IsExpired.nonfunction_type_aliases,
@@ -208,7 +222,7 @@
   );
 
   static final set_literals = ExperimentalFeature(
-    index: 11,
+    index: 12,
     enableString: EnableString.set_literals,
     isEnabledByDefault: IsEnabledByDefault.set_literals,
     isExpired: IsExpired.set_literals,
@@ -218,7 +232,7 @@
   );
 
   static final spread_collections = ExperimentalFeature(
-    index: 12,
+    index: 13,
     enableString: EnableString.spread_collections,
     isEnabledByDefault: IsEnabledByDefault.spread_collections,
     isExpired: IsExpired.spread_collections,
@@ -228,7 +242,7 @@
   );
 
   static final super_parameters = ExperimentalFeature(
-    index: 13,
+    index: 14,
     enableString: EnableString.super_parameters,
     isEnabledByDefault: IsEnabledByDefault.super_parameters,
     isExpired: IsExpired.super_parameters,
@@ -238,7 +252,7 @@
   );
 
   static final test_experiment = ExperimentalFeature(
-    index: 14,
+    index: 15,
     enableString: EnableString.test_experiment,
     isEnabledByDefault: IsEnabledByDefault.test_experiment,
     isExpired: IsExpired.test_experiment,
@@ -249,7 +263,7 @@
   );
 
   static final triple_shift = ExperimentalFeature(
-    index: 15,
+    index: 16,
     enableString: EnableString.triple_shift,
     isEnabledByDefault: IsEnabledByDefault.triple_shift,
     isExpired: IsExpired.triple_shift,
@@ -259,7 +273,7 @@
   );
 
   static final value_class = ExperimentalFeature(
-    index: 16,
+    index: 17,
     enableString: EnableString.value_class,
     isEnabledByDefault: IsEnabledByDefault.value_class,
     isExpired: IsExpired.value_class,
@@ -269,7 +283,7 @@
   );
 
   static final variance = ExperimentalFeature(
-    index: 17,
+    index: 18,
     enableString: EnableString.variance,
     isEnabledByDefault: IsEnabledByDefault.variance,
     isExpired: IsExpired.variance,
@@ -306,6 +320,9 @@
   /// Default state of the experiment "generic-metadata"
   static const bool generic_metadata = true;
 
+  /// Default state of the experiment "macros"
+  static const bool macros = false;
+
   /// Default state of the experiment "named-arguments-anywhere"
   static const bool named_arguments_anywhere = false;
 
@@ -365,6 +382,9 @@
   /// Expiration status of the experiment "generic-metadata"
   static const bool generic_metadata = false;
 
+  /// Expiration status of the experiment "macros"
+  static const bool macros = false;
+
   /// Expiration status of the experiment "named-arguments-anywhere"
   static const bool named_arguments_anywhere = false;
 
@@ -425,6 +445,9 @@
   /// Current state for the flag "generic-metadata"
   bool get generic_metadata => isEnabled(ExperimentalFeatures.generic_metadata);
 
+  /// Current state for the flag "macros"
+  bool get macros => isEnabled(ExperimentalFeatures.macros);
+
   /// Current state for the flag "named-arguments-anywhere"
   bool get named_arguments_anywhere =>
       isEnabled(ExperimentalFeatures.named_arguments_anywhere);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index d9e8915..ca91eb4 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1395,6 +1395,10 @@
   @override
   Token? abstractKeyword;
 
+  /// The 'macro' keyword, or `null` if the keyword was absent.
+  @override
+  Token? macroKeyword;
+
   /// The token representing the 'class' keyword.
   @override
   Token classKeyword;
@@ -1423,6 +1427,7 @@
       CommentImpl? comment,
       List<Annotation>? metadata,
       this.abstractKeyword,
+      this.macroKeyword,
       this.classKeyword,
       SimpleIdentifierImpl name,
       TypeParameterListImpl? typeParameters,
@@ -1441,6 +1446,7 @@
   @override
   Iterable<SyntacticEntity> get childEntities => super._childEntities
     ..add(abstractKeyword)
+    ..add(macroKeyword)
     ..add(classKeyword)
     ..add(_name)
     ..add(_typeParameters)
@@ -1464,7 +1470,7 @@
 
   @override
   Token get firstTokenAfterCommentAndMetadata {
-    return abstractKeyword ?? classKeyword;
+    return abstractKeyword ?? macroKeyword ?? classKeyword;
   }
 
   @override
@@ -1644,6 +1650,11 @@
   @override
   Token? abstractKeyword;
 
+  /// The token for the 'macro' keyword, or `null` if this is not defining a
+  /// macro class.
+  @override
+  Token? macroKeyword;
+
   /// The name of the superclass of the class being declared.
   NamedTypeImpl _superclass;
 
@@ -1668,6 +1679,7 @@
       this._typeParameters,
       this.equals,
       this.abstractKeyword,
+      this.macroKeyword,
       this._superclass,
       this._withClause,
       this._implementsClause,
@@ -1686,6 +1698,7 @@
     ..add(_typeParameters)
     ..add(equals)
     ..add(abstractKeyword)
+    ..add(macroKeyword)
     ..add(_superclass)
     ..add(_withClause)
     ..add(_implementsClause)
@@ -1696,7 +1709,7 @@
 
   @override
   Token get firstTokenAfterCommentAndMetadata {
-    return abstractKeyword ?? typedefKeyword;
+    return abstractKeyword ?? macroKeyword ?? typedefKeyword;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index 4fed3a0..806d84e 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -155,6 +155,7 @@
           Comment? comment,
           List<Annotation>? metadata,
           Token? abstractKeyword,
+          Token? macroKeyword,
           Token classKeyword,
           SimpleIdentifier name,
           TypeParameterList? typeParameters,
@@ -168,6 +169,7 @@
           comment as CommentImpl?,
           metadata,
           abstractKeyword,
+          macroKeyword,
           classKeyword,
           name as SimpleIdentifierImpl,
           typeParameters as TypeParameterListImpl?,
@@ -187,6 +189,7 @@
           TypeParameterList? typeParameters,
           Token equals,
           Token? abstractKeyword,
+          Token? macroKeyword,
           NamedType superclass,
           WithClause withClause,
           ImplementsClause? implementsClause,
@@ -199,6 +202,7 @@
           typeParameters as TypeParameterListImpl?,
           equals,
           abstractKeyword,
+          macroKeyword,
           superclass as NamedTypeImpl,
           withClause as WithClauseImpl,
           implementsClause as ImplementsClauseImpl?,
diff --git a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
index 7b52a19..294a89f 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -151,6 +151,7 @@
   void visitClassDeclaration(ClassDeclaration node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     _visitToken(node.abstractKeyword, suffix: ' ');
+    _visitToken(node.macroKeyword, suffix: ' ');
     sink.write('class ');
     _visitNode(node.name);
     _visitNode(node.typeParameters);
@@ -168,6 +169,7 @@
     if (node.abstractKeyword != null) {
       sink.write('abstract ');
     }
+    _visitToken(node.macroKeyword, suffix: ' ');
     sink.write('class ');
     _visitNode(node.name);
     _visitNode(node.typeParameters);
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 0eb702a..b3bc7a1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -925,6 +925,9 @@
         implicitConstructor.parameters = implicitParameters;
       }
       implicitConstructor.enclosingElement = this;
+      // TODO(scheglov) Why do we manually map parameters types above?
+      implicitConstructor.superConstructor =
+          ConstructorMember.from(superclassConstructor, supertype!);
 
       var isNamed = superclassConstructor.name.isNotEmpty;
       implicitConstructor.constantInitializers = [
@@ -1411,6 +1414,14 @@
 class ConstructorElementImpl extends ExecutableElementImpl
     with ConstructorElementMixin
     implements ConstructorElement {
+  /// The super-constructor which this constructor is invoking, or `null` if
+  /// this constructor is not generative, or is redirecting, or the
+  /// super-constructor is not resolved, or the enclosing class is `Object`.
+  ///
+  /// TODO(scheglov) We cannot have both super and redirecting constructors.
+  /// So, ideally we should have some kind of "either" or "variant" here.
+  ConstructorElement? _superConstructor;
+
   /// The constructor to which this constructor is redirecting.
   ConstructorElement? _redirectedConstructor;
 
@@ -1541,6 +1552,15 @@
     return (_returnType ??= enclosingElement.thisType) as InterfaceType;
   }
 
+  ConstructorElement? get superConstructor {
+    linkedData?.read(this);
+    return _superConstructor;
+  }
+
+  set superConstructor(ConstructorElement? superConstructor) {
+    _superConstructor = superConstructor;
+  }
+
   @override
   FunctionType get type => ElementTypeProvider.current.getExecutableType(this);
 
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 2522580..455a0f6 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -161,6 +161,9 @@
   /// `true` if enhanced enums are enabled
   final bool enableEnhancedEnums;
 
+  /// `true` if macros are enabled
+  final bool enableMacros;
+
   final FeatureSet _featureSet;
 
   AstBuilder(ErrorReporter? errorReporter, this.fileUri, this.isFullAst,
@@ -183,6 +186,7 @@
             _featureSet.isEnabled(Feature.named_arguments_anywhere),
         enableSuperParameters = _featureSet.isEnabled(Feature.super_parameters),
         enableEnhancedEnums = _featureSet.isEnabled(Feature.enhanced_enums),
+        enableMacros = _featureSet.isEnabled(Feature.macros),
         uri = uri ?? fileUri;
 
   NodeList<ClassMember> get currentDeclarationMembers {
@@ -240,11 +244,25 @@
   }
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     assert(classDeclaration == null &&
         mixinDeclaration == null &&
         extensionDeclaration == null);
     push(_Modifiers()..abstractKeyword = abstractToken);
+    if (macroToken != null && !enableMacros) {
+      var feature = ExperimentalFeatures.macros;
+      handleRecoverableError(
+          templateExperimentNotEnabled.withArguments(
+            feature.enableString,
+            _versionAsString(ExperimentStatus.currentVersion),
+          ),
+          macroToken,
+          macroToken);
+      // Pretend that 'macro' didn't occur while this feature is incomplete.
+      macroToken = null;
+    }
+    push(macroToken ?? NullValue.Token);
   }
 
   @override
@@ -375,8 +393,21 @@
 
   @override
   void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token name) {
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     push(_Modifiers()..abstractKeyword = abstractToken);
+    if (macroToken != null && !enableMacros) {
+      var feature = ExperimentalFeatures.macros;
+      handleRecoverableError(
+          templateExperimentNotEnabled.withArguments(
+            feature.enableString,
+            _versionAsString(ExperimentStatus.currentVersion),
+          ),
+          macroToken,
+          macroToken);
+      // Pretend that 'macro' didn't occur while this feature is incomplete.
+      macroToken = null;
+    }
+    push(macroToken ?? NullValue.Token);
   }
 
   @override
@@ -2045,6 +2076,7 @@
     }
     var withClause = pop(NullValue.WithClause) as WithClause;
     var superclass = pop() as NamedType;
+    var macroKeyword = pop(NullValue.Token) as Token?;
     var modifiers = pop() as _Modifiers?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
@@ -2059,6 +2091,7 @@
         typeParameters,
         equalsToken,
         abstractKeyword,
+        macroKeyword,
         superclass,
         withClause,
         implementsClause,
@@ -2643,6 +2676,7 @@
     var implementsClause = pop(NullValue.IdentifierList) as ImplementsClause?;
     var withClause = pop(NullValue.WithClause) as WithClause?;
     var extendsClause = pop(NullValue.ExtendsClause) as ExtendsClause?;
+    var macroKeyword = pop(NullValue.Token) as Token?;
     var modifiers = pop() as _Modifiers?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
@@ -2655,6 +2689,7 @@
       comment,
       metadata,
       abstractKeyword,
+      macroKeyword,
       classKeyword,
       name,
       typeParameters,
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index fec2395..9fb88ca 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -240,13 +240,15 @@
           ExtendsClause? extendsClause,
           WithClause? withClause,
           ImplementsClause? implementsClause,
-          [List<ClassMember> members = const []]) =>
+          {List<ClassMember> members = const [],
+          bool isMacro = false}) =>
       astFactory.classDeclaration(
           null,
           null,
           abstractKeyword == null
               ? null
               : TokenFactory.tokenFromKeyword(abstractKeyword),
+          isMacro ? TokenFactory.tokenFromString('macro') : null,
           TokenFactory.tokenFromKeyword(Keyword.CLASS),
           identifier3(name),
           typeParameters,
@@ -263,7 +265,8 @@
           Keyword? abstractKeyword,
           NamedType superclass,
           WithClause withClause,
-          ImplementsClause? implementsClause) =>
+          ImplementsClause? implementsClause,
+          {bool isMacro = false}) =>
       astFactory.classTypeAlias(
           null,
           null,
@@ -274,6 +277,7 @@
           abstractKeyword == null
               ? null
               : TokenFactory.tokenFromKeyword(abstractKeyword),
+          isMacro ? TokenFactory.tokenFromString('macro') : null,
           superclass,
           withClause,
           implementsClause,
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index 99372ae..a332f28 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -90,11 +90,9 @@
 /// The [UriResolver] that knows about sources that are served from their
 /// summaries.
 class InSummaryUriResolver extends UriResolver {
-  /// TODO(scheglov) Remove it, we don't need it.
-  ResourceProvider? resourceProvider;
   final SummaryDataStore _dataStore;
 
-  InSummaryUriResolver(this.resourceProvider, this._dataStore);
+  InSummaryUriResolver(this._dataStore);
 
   @override
   Uri? pathToUri(String path) => null;
diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart
index e53670d..bb34ac0 100644
--- a/pkg/analyzer/lib/src/summary/summary_sdk.dart
+++ b/pkg/analyzer/lib/src/summary/summary_sdk.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/file_system/file_system.dart' show ResourceProvider;
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart' show Source;
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
@@ -14,29 +13,15 @@
 /// suitable only for command-line tools, but not for IDEs - it does not
 /// implement [sdkLibraries], [uris] and [fromFileUri].
 class SummaryBasedDartSdk implements DartSdk {
-  late final PackageBundleReader _bundle;
-  late final SummaryDataStore _dataStore;
+  final PackageBundleReader _bundle;
   late final InSummaryUriResolver _uriResolver;
 
-  /// TODO(scheglov) Remove it when the default constructor.
-  ResourceProvider? resourceProvider;
-
-  @Deprecated('Use SummaryBasedDartSdk.forBundle() instead')
-  SummaryBasedDartSdk(String summaryPath, bool _, {this.resourceProvider}) {
-    _dataStore = SummaryDataStore(<String>[summaryPath],
-        resourceProvider: resourceProvider);
-    _uriResolver = InSummaryUriResolver(resourceProvider, _dataStore);
-    _bundle = _dataStore.bundles.single;
-  }
-
-  SummaryBasedDartSdk.forBundle(PackageBundleReader bundle) {
-    _bundle = bundle;
-
-    _dataStore = SummaryDataStore([]);
+  SummaryBasedDartSdk.forBundle(this._bundle) {
+    var dataStore = SummaryDataStore([]);
     // TODO(scheglov) We need a solution to avoid these paths at all.
-    _dataStore.addBundle('', bundle);
+    dataStore.addBundle('', bundle);
 
-    _uriResolver = InSummaryUriResolver(resourceProvider, _dataStore);
+    _uriResolver = InSummaryUriResolver(dataStore);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
index b763df3..b30141a 100644
--- a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
@@ -145,6 +145,7 @@
   void visitClassDeclaration(ClassDeclaration node) {
     _compilationUnitMember(node);
     _token(node.abstractKeyword);
+    _token(node.macroKeyword);
     _token(node.classKeyword);
     node.name.accept(this);
     node.typeParameters?.accept(this);
@@ -161,6 +162,7 @@
   void visitClassTypeAlias(ClassTypeAlias node) {
     _compilationUnitMember(node);
     _token(node.abstractKeyword);
+    _token(node.macroKeyword);
     _token(node.typedefKeyword);
     node.name.accept(this);
     node.typeParameters?.accept(this);
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index e331093..3811175 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -161,6 +161,7 @@
     );
     reader._addFormalParameters(element.parameters);
     _readFormalParameters(reader, element.parameters);
+    element.superConstructor = reader.readElement() as ConstructorElement?;
     element.redirectedConstructor = reader.readElement() as ConstructorElement?;
     element.constantInitializers = reader._readNodeList();
     applyConstantOffsets?.perform();
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 1adc959..114e90b 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -162,6 +162,7 @@
 
     _resolutionSink.localElements.withElements(element.parameters, () {
       _writeList(element.parameters, _writeParameterElement);
+      _resolutionSink.writeElement(element.superConstructor);
       _resolutionSink.writeElement(element.redirectedConstructor);
       _resolutionSink._writeNodeList(element.constantInitializers);
     });
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index d605919..cf733cc 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -17,6 +17,7 @@
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
 import 'package:analyzer/src/summary2/reference.dart';
 import 'package:analyzer/src/summary2/simply_bounded.dart';
+import 'package:analyzer/src/summary2/super_constructor_resolver.dart';
 import 'package:analyzer/src/summary2/top_level_inference.dart';
 import 'package:analyzer/src/summary2/type_alias.dart';
 import 'package:analyzer/src/summary2/types_builder.dart';
@@ -89,6 +90,7 @@
     _createTypeSystem();
     _buildEnumChildren();
     _resolveTypes();
+    SuperConstructorResolver(this).perform();
     _performTopLevelInference();
     _resolveConstructors();
     _resolveConstantInitializers();
diff --git a/pkg/analyzer/lib/src/summary2/super_constructor_resolver.dart b/pkg/analyzer/lib/src/summary2/super_constructor_resolver.dart
new file mode 100644
index 0000000..694f27d
--- /dev/null
+++ b/pkg/analyzer/lib/src/summary2/super_constructor_resolver.dart
@@ -0,0 +1,65 @@
+// 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:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/summary2/link.dart';
+import 'package:collection/collection.dart';
+
+/// Resolves the explicit or implicit super-constructors invoked by
+/// non-redirecting generative constructors.
+class SuperConstructorResolver {
+  final Linker _linker;
+
+  SuperConstructorResolver(this._linker);
+
+  void perform() {
+    for (var builder in _linker.builders.values) {
+      for (var unitElement in builder.element.units) {
+        for (var classElement in unitElement.classes) {
+          for (var constructorElement in classElement.constructors) {
+            _constructor(classElement, constructorElement);
+          }
+        }
+      }
+    }
+  }
+
+  void _constructor(ClassElement classElement, ConstructorElement element) {
+    element as ConstructorElementImpl;
+
+    // Constructors of mixin applications are already configured.
+    if (classElement.isMixinApplication) {
+      return;
+    }
+
+    // We handle only generative constructors here.
+    if (element.isFactory) {
+      return;
+    }
+
+    var invokesDefaultSuperConstructor = true;
+    var node = _linker.getLinkingNode(element);
+    if (node is ConstructorDeclaration) {
+      for (var initializer in node.initializers) {
+        if (initializer is RedirectingConstructorInvocation) {
+          invokesDefaultSuperConstructor = false;
+        } else if (initializer is SuperConstructorInvocation) {
+          invokesDefaultSuperConstructor = false;
+          var name = initializer.constructorName?.name ?? '';
+          element.superConstructor = classElement.supertype?.constructors
+              .where((element) => element.name == name)
+              .firstOrNull;
+        }
+      }
+    }
+
+    if (invokesDefaultSuperConstructor) {
+      element.superConstructor = classElement.supertype?.constructors
+          .where((element) => element.name.isEmpty)
+          .firstOrNull;
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/src/workspace/bazel.dart b/pkg/analyzer/lib/src/workspace/bazel.dart
index e8f24d5..5198c44 100644
--- a/pkg/analyzer/lib/src/workspace/bazel.dart
+++ b/pkg/analyzer/lib/src/workspace/bazel.dart
@@ -242,7 +242,7 @@
     resolvers.add(packageUriResolver);
     resolvers.add(BazelFileUriResolver(this));
     if (summaryData != null) {
-      resolvers.add(InSummaryUriResolver(provider, summaryData));
+      resolvers.add(InSummaryUriResolver(summaryData));
     }
     return SourceFactory(resolvers);
   }
diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart
index 12d892c..5519a0d 100644
--- a/pkg/analyzer/test/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/dart/ast/ast_test.dart
@@ -56,8 +56,9 @@
         "b",
         AstTestFactory.formalParameterList(),
         initializers);
-    ClassDeclaration clazz = AstTestFactory.classDeclaration(null, "Test", null,
-        null, null, null, [defaultConstructor, aConstructor, bConstructor]);
+    ClassDeclaration clazz = AstTestFactory.classDeclaration(
+        null, "Test", null, null, null, null,
+        members: [defaultConstructor, aConstructor, bConstructor]);
     expect(clazz.getConstructor(null), same(defaultConstructor));
     expect(clazz.getConstructor("a"), same(aConstructor));
     expect(clazz.getConstructor("b"), same(bConstructor));
@@ -68,11 +69,12 @@
     VariableDeclaration aVar = AstTestFactory.variableDeclaration("a");
     VariableDeclaration bVar = AstTestFactory.variableDeclaration("b");
     VariableDeclaration cVar = AstTestFactory.variableDeclaration("c");
-    ClassDeclaration clazz =
-        AstTestFactory.classDeclaration(null, "Test", null, null, null, null, [
-      AstTestFactory.fieldDeclaration2(false, null, [aVar]),
-      AstTestFactory.fieldDeclaration2(false, null, [bVar, cVar])
-    ]);
+    ClassDeclaration clazz = AstTestFactory.classDeclaration(
+        null, "Test", null, null, null, null,
+        members: [
+          AstTestFactory.fieldDeclaration2(false, null, [aVar]),
+          AstTestFactory.fieldDeclaration2(false, null, [bVar, cVar])
+        ]);
     expect(clazz.getField("a"), same(aVar));
     expect(clazz.getField("b"), same(bVar));
     expect(clazz.getField("c"), same(cVar));
@@ -95,7 +97,8 @@
         AstTestFactory.identifier3("b"),
         AstTestFactory.formalParameterList());
     ClassDeclaration clazz = AstTestFactory.classDeclaration(
-        null, "Test", null, null, null, null, [aMethod, bMethod]);
+        null, "Test", null, null, null, null,
+        members: [aMethod, bMethod]);
     expect(clazz.getMethod("a"), same(aMethod));
     expect(clazz.getMethod("b"), same(bMethod));
     expect(clazz.getMethod("noSuchMethod"), isNull);
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index f40c8da..d588af2 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -87,8 +87,8 @@
 
   @override
   void beginClassDeclaration(
-      Token beginToken, Token? abstractToken, Token name) {
-    super.beginClassDeclaration(beginToken, abstractToken, name);
+      Token beginToken, Token? abstractToken, Token? macroToken, Token name) {
+    super.beginClassDeclaration(beginToken, abstractToken, macroToken, name);
     begin('ClassDeclaration');
   }
 
@@ -392,8 +392,9 @@
 
   @override
   void beginNamedMixinApplication(
-      Token beginToken, Token? abstractToken, Token name) {
-    super.beginNamedMixinApplication(beginToken, abstractToken, name);
+      Token beginToken, Token? abstractToken, Token? macroToken, Token name) {
+    super.beginNamedMixinApplication(
+        beginToken, abstractToken, macroToken, name);
     begin('NamedMixinApplication');
   }
 
diff --git a/pkg/analyzer/test/generated/parser_test_base.dart b/pkg/analyzer/test/generated/parser_test_base.dart
index aed3955..4c2d5a6 100644
--- a/pkg/analyzer/test/generated/parser_test_base.dart
+++ b/pkg/analyzer/test/generated/parser_test_base.dart
@@ -814,6 +814,7 @@
         null,
         null,
         null,
+        null,
         Token(Keyword.CLASS, 0),
         astFactory.simpleIdentifier(
             fasta.StringToken.fromString(TokenType.IDENTIFIER, className, 6)),
diff --git a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
index da1409d..082ba9d 100644
--- a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
@@ -211,6 +211,13 @@
             Keyword.ABSTRACT, "C", null, null, null, null));
   }
 
+  void test_visitClassDeclaration_abstractMacro() {
+    ClassDeclaration declaration = AstTestFactory.classDeclaration(
+        Keyword.ABSTRACT, "C", null, null, null, null,
+        isMacro: true);
+    _assertSource("abstract macro class C {}", declaration);
+  }
+
   void test_visitClassDeclaration_empty() {
     _assertSource("class C {}",
         AstTestFactory.classDeclaration(null, "C", null, null, null, null));
@@ -271,15 +278,23 @@
             AstTestFactory.implementsClause([AstTestFactory.namedType4("B")])));
   }
 
+  void test_visitClassDeclaration_macro() {
+    ClassDeclaration declaration = AstTestFactory.classDeclaration(
+        null, "C", null, null, null, null,
+        isMacro: true);
+    _assertSource("macro class C {}", declaration);
+  }
+
   void test_visitClassDeclaration_multipleMember() {
     _assertSource(
         "class C {var a; var b;}",
-        AstTestFactory.classDeclaration(null, "C", null, null, null, null, [
-          AstTestFactory.fieldDeclaration2(
-              false, Keyword.VAR, [AstTestFactory.variableDeclaration("a")]),
-          AstTestFactory.fieldDeclaration2(
-              false, Keyword.VAR, [AstTestFactory.variableDeclaration("b")])
-        ]));
+        AstTestFactory.classDeclaration(null, "C", null, null, null, null,
+            members: [
+              AstTestFactory.fieldDeclaration2(false, Keyword.VAR,
+                  [AstTestFactory.variableDeclaration("a")]),
+              AstTestFactory.fieldDeclaration2(
+                  false, Keyword.VAR, [AstTestFactory.variableDeclaration("b")])
+            ]));
   }
 
   void test_visitClassDeclaration_parameters() {
@@ -352,10 +367,11 @@
   void test_visitClassDeclaration_singleMember() {
     _assertSource(
         "class C {var a;}",
-        AstTestFactory.classDeclaration(null, "C", null, null, null, null, [
-          AstTestFactory.fieldDeclaration2(
-              false, Keyword.VAR, [AstTestFactory.variableDeclaration("a")])
-        ]));
+        AstTestFactory.classDeclaration(null, "C", null, null, null, null,
+            members: [
+              AstTestFactory.fieldDeclaration2(
+                  false, Keyword.VAR, [AstTestFactory.variableDeclaration("a")])
+            ]));
   }
 
   void test_visitClassDeclaration_withMetadata() {
@@ -390,6 +406,19 @@
             AstTestFactory.implementsClause([AstTestFactory.namedType4("I")])));
   }
 
+  void test_visitClassTypeAlias_abstractMacro() {
+    _assertSource(
+        "abstract macro class C = S with M1;",
+        AstTestFactory.classTypeAlias(
+            "C",
+            null,
+            Keyword.ABSTRACT,
+            AstTestFactory.namedType4("S"),
+            AstTestFactory.withClause([AstTestFactory.namedType4("M1")]),
+            null,
+            isMacro: true));
+  }
+
   void test_visitClassTypeAlias_generic() {
     _assertSource(
         "class C<E> = S<E> with M1<E>;",
@@ -416,6 +445,19 @@
             AstTestFactory.implementsClause([AstTestFactory.namedType4("I")])));
   }
 
+  void test_visitClassTypeAlias_macro() {
+    _assertSource(
+        "macro class C = S with M1;",
+        AstTestFactory.classTypeAlias(
+            "C",
+            null,
+            null,
+            AstTestFactory.namedType4("S"),
+            AstTestFactory.withClause([AstTestFactory.namedType4("M1")]),
+            null,
+            isMacro: true));
+  }
+
   void test_visitClassTypeAlias_minimal() {
     _assertSource(
         "class C = S with M1;",
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 96d9eb1..f95078a 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -385,6 +385,13 @@
         _writeNode,
       );
 
+      var superConstructor = e.superConstructor;
+      if (superConstructor != null) {
+        if (!superConstructor.enclosingElement.isDartCoreObject) {
+          _writeElementReference('superConstructor', superConstructor);
+        }
+      }
+
       var redirectedConstructor = e.redirectedConstructor;
       if (redirectedConstructor != null) {
         _writeElementReference('redirectedConstructor', redirectedConstructor);
diff --git a/pkg/analyzer/test/src/summary/in_summary_source_test.dart b/pkg/analyzer/test/src/summary/in_summary_source_test.dart
index 2e8ef04..0587667 100644
--- a/pkg/analyzer/test/src/summary/in_summary_source_test.dart
+++ b/pkg/analyzer/test/src/summary/in_summary_source_test.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:test/test.dart';
@@ -19,12 +18,12 @@
   test_InSummarySource() {
     var sourceFactory = SourceFactory([
       InSummaryUriResolver(
-          PhysicalResourceProvider.INSTANCE,
-          MockSummaryDataStore.fake({
-            'package:foo/foo.dart': 'foo.sum',
-            'package:foo/src/foo_impl.dart': 'foo.sum',
-            'package:bar/baz.dart': 'bar.sum',
-          }))
+        MockSummaryDataStore.fake({
+          'package:foo/foo.dart': 'foo.sum',
+          'package:foo/src/foo_impl.dart': 'foo.sum',
+          'package:bar/baz.dart': 'bar.sum',
+        }),
+      )
     ]);
 
     var source =
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 6d989da..f4ae652 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -1098,6 +1098,7 @@
                   rightParenthesis: ) @92
                 staticElement: self::@class::A::@constructor::•
                 superKeyword: super @78
+            superConstructor: self::@class::A::@constructor::•
 ''');
   }
 
@@ -1142,6 +1143,7 @@
                 period: . @73
                 staticElement: self::@class::A::@constructor::aaa
                 superKeyword: super @68
+            superConstructor: self::@class::A::@constructor::aaa
 ''');
   }
 
@@ -1179,6 +1181,7 @@
                 period: . @66
                 staticElement: self::@class::A::@constructor::_
                 superKeyword: super @61
+            superConstructor: self::@class::A::@constructor::_
 ''');
   }
 
@@ -1234,6 +1237,7 @@
                 period: . @78
                 staticElement: self::@class::A::@constructor::aaa
                 superKeyword: super @73
+            superConstructor: self::@class::A::@constructor::aaa
 ''');
   }
 
@@ -1273,6 +1277,7 @@
                   rightParenthesis: ) @76
                 staticElement: self::@class::A::@constructor::•
                 superKeyword: super @68
+            superConstructor: self::@class::A::@constructor::•
 ''');
   }
 
@@ -1491,6 +1496,7 @@
           named @70
             periodOffset: 69
             nameEnd: 75
+            superConstructor: self::@class::C::@constructor::_
 ''');
   }
 
@@ -1533,6 +1539,9 @@
           named @94
             periodOffset: 93
             nameEnd: 99
+            superConstructor: ConstructorMember
+              base: self::@class::C::@constructor::_
+              substitution: {T: U, U: T}
 ''');
   }
 
@@ -1792,6 +1801,7 @@
         supertype: C
         constructors
           @62
+            superConstructor: self::@class::C::@constructor::_
 ''');
   }
 
@@ -1832,6 +1842,9 @@
         supertype: C<U, T>
         constructors
           @86
+            superConstructor: ConstructorMember
+              base: self::@class::C::@constructor::_
+              substitution: {T: U, U: T}
 ''');
   }
 
@@ -2125,6 +2138,7 @@
         supertype: B
         constructors
           @77
+            superConstructor: self::@class::B::@constructor::_
     typeAliases
       A @8
         aliasedType: C
@@ -2301,6 +2315,130 @@
 ''');
   }
 
+  test_class_constructor_superConstructor_generic_named() async {
+    var library = await checkLibrary('''
+class A<T> {
+  A.named(T a);
+}
+class B extends A<int> {
+  B() : super.named(0);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          named @17
+            periodOffset: 16
+            nameEnd: 22
+            parameters
+              requiredPositional a @25
+                type: T
+      class B @37
+        supertype: A<int>
+        constructors
+          @58
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::named
+              substitution: {T: int}
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_named() async {
+    var library = await checkLibrary('''
+class A {
+  A.named();
+}
+class B extends A {
+  B() : super.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          named @14
+            periodOffset: 13
+            nameEnd: 19
+      class B @31
+        supertype: A
+        constructors
+          @47
+            superConstructor: self::@class::A::@constructor::named
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
+    var library = await checkLibrary('''
+class A {}
+class B extends A {
+  B() : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        supertype: A
+        constructors
+          @33
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_implicit() async {
+    var library = await checkLibrary('''
+class A {}
+class B extends A {
+  B();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        supertype: A
+        constructors
+          @33
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_implicit2() async {
+    var library = await checkLibrary('''
+class A {}
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
   test_class_constructor_unnamed_implicit() async {
     var library = await checkLibrary('class C {}');
     checkElementText(
@@ -3118,6 +3256,7 @@
             parameters
               requiredPositional final this.v @34
                 type: int
+            superConstructor: self::@class::D::@constructor::•
         accessors
           synthetic get v @-1
             returnType: int
@@ -3244,6 +3383,7 @@
             type: int
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
         accessors
           synthetic get v @-1
             returnType: int
@@ -3306,6 +3446,7 @@
                 staticType: List<int>
         constructors
           const @94
+            superConstructor: self::@class::A::@constructor::•
         accessors
           synthetic get f @-1
             returnType: List<int>
@@ -3380,6 +3521,7 @@
                 staticType: double
         constructors
           const @80
+            superConstructor: self::@class::A::@constructor::•
         accessors
           synthetic get foo @-1
             returnType: double
@@ -3844,6 +3986,7 @@
             type: int
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         accessors
           synthetic get f @-1
             returnType: int
@@ -3885,6 +4028,7 @@
             type: int
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         accessors
           synthetic get f @-1
             returnType: int
@@ -4271,6 +4415,7 @@
         supertype: D
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
         methods
           f @25
             parameters
@@ -4306,6 +4451,7 @@
         supertype: D
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
         methods
           f @22
             returnType: int
@@ -4336,6 +4482,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           A @38
             returnType: void
@@ -4533,6 +4680,7 @@
           G
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
       class D @40
         constructors
           synthetic @-1
@@ -4566,6 +4714,7 @@
           C<double>
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
       class A @50
         constructors
           synthetic @-1
@@ -5376,6 +5525,7 @@
             type: double
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         accessors
           synthetic get t @-1
             returnType: double
@@ -5390,6 +5540,7 @@
           B
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
       class D @96
         supertype: C
         fields
@@ -5397,6 +5548,7 @@
             type: dynamic
         constructors
           synthetic @-1
+            superConstructor: self::@class::C::@constructor::•
         accessors
           set t @121
             parameters
@@ -5421,6 +5573,7 @@
             type: int
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
         accessors
           set f @29
             parameters
@@ -5643,6 +5796,7 @@
         supertype: D
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
       class D @27
         constructors
           synthetic @-1
@@ -5662,6 +5816,9 @@
         supertype: D<int, double>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::D::@constructor::•
+              substitution: {T1: int, T2: double}
       class D @40
         typeParameters
           covariant T1 @42
@@ -5692,6 +5849,9 @@
         supertype: A<B>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: B}
 ''');
   }
 
@@ -6308,6 +6468,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @32
         constructors
           synthetic @-1
@@ -6346,6 +6507,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @35
         constructors
           synthetic @-1
@@ -6383,6 +6545,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @43
         constructors
           synthetic @-1
@@ -6420,6 +6583,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @48
         constructors
           synthetic @-1
@@ -6457,6 +6621,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @87
         constructors
           synthetic @-1
@@ -6491,6 +6656,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::A::@constructor::•
       class A @42
         constructors
           synthetic @-1
@@ -6536,6 +6702,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @39
         constructors
           synthetic @-1
@@ -6573,6 +6740,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @29
         constructors
           synthetic @-1
@@ -6607,6 +6775,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @26
         constructors
           synthetic @-1
@@ -6652,6 +6821,7 @@
                   rightParenthesis: ) @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::•
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::•
           synthetic const named @-1
             constantInitializers
               SuperConstructorInvocation
@@ -6665,6 +6835,7 @@
                 period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::named
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::named
 ''');
   }
 
@@ -6712,6 +6883,7 @@
                   rightParenthesis: ) @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::•
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::•
           synthetic noArgs @-1
             constantInitializers
               SuperConstructorInvocation
@@ -6725,6 +6897,7 @@
                 period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::noArgs
           synthetic requiredArg @-1
             parameters
               requiredPositional x @-1
@@ -6746,6 +6919,7 @@
                 period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::requiredArg
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::requiredArg
           synthetic positionalArg @-1
             parameters
               optionalPositional x @-1
@@ -6771,6 +6945,7 @@
                 period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg
           synthetic positionalArg2 @-1
             parameters
               optionalPositional final x @-1
@@ -6796,6 +6971,7 @@
                 period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg2
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg2
           synthetic namedArg @-1
             parameters
               optionalNamed x @-1
@@ -6821,6 +6997,7 @@
                 period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::namedArg
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg
           synthetic namedArg2 @-1
             parameters
               optionalNamed final x @-1
@@ -6846,6 +7023,7 @@
                 period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::namedArg2
                 superKeyword: super @0
+            superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg2
 ''');
   }
 
@@ -6909,6 +7087,9 @@
                 period: . @0
                 staticElement: self::@class::Base::@constructor::ctor
                 superKeyword: super @0
+            superConstructor: ConstructorMember
+              base: self::@class::Base::@constructor::ctor
+              substitution: {T: dynamic}
 ''');
   }
 
@@ -6975,6 +7156,9 @@
                 period: . @0
                 staticElement: self::@class::Base::@constructor::ctor
                 superKeyword: super @0
+            superConstructor: ConstructorMember
+              base: self::@class::Base::@constructor::ctor
+              substitution: {T: List<U>}
 ''');
   }
 
@@ -7005,6 +7189,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @26
         constructors
           synthetic @-1
@@ -9600,6 +9785,9 @@
         supertype: P<T>
         constructors
           const @64
+            superConstructor: ConstructorMember
+              base: self::@class::P::@constructor::•
+              substitution: {T: T}
       class P2 @79
         typeParameters
           covariant T @82
@@ -9607,6 +9795,9 @@
         supertype: P<T>
         constructors
           const @108
+            superConstructor: ConstructorMember
+              base: self::@class::P::@constructor::•
+              substitution: {T: T}
     topLevelVariables
       static const values @131
         type: List<P<dynamic>>
@@ -16051,6 +16242,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::A::@constructor::•
       class alias X @48
         supertype: B
         mixins
@@ -16064,6 +16256,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::B::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::B::@constructor::•
     mixins
       mixin M @68
         superclassConstraints
@@ -17042,6 +17235,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: foo.dart::@class::A::@constructor::•
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo.dart');
@@ -17074,6 +17268,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: foo_io.dart::@class::A::@constructor::•
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_io.dart');
@@ -17106,6 +17301,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: foo_html.dart::@class::A::@constructor::•
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_html.dart');
@@ -18758,6 +18954,9 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
                 superKeyword: super @0
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: void Function()}
     mixins
       mixin M @20
         superclassConstraints
@@ -18928,6 +19127,7 @@
             type: int
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
         accessors
           get f @24
             returnType: int
@@ -19099,6 +19299,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: foo.dart::@class::A::@constructor::•
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo.dart');
@@ -19129,6 +19330,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: foo_io.dart::@class::A::@constructor::•
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_io.dart');
@@ -19159,6 +19361,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: foo_io.dart::@class::A::@constructor::•
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_io.dart');
@@ -19189,6 +19392,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: foo_html.dart::@class::A::@constructor::•
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_html.dart');
@@ -19219,6 +19423,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: foo_html.dart::@class::A::@constructor::•
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_html.dart');
@@ -19419,6 +19624,7 @@
         supertype: C
         constructors
           synthetic @-1
+            superConstructor: self::@class::C::@constructor::•
 ''');
   }
 
@@ -19706,6 +19912,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
       class S @40
         typeParameters
           covariant T @42
@@ -19783,6 +19990,7 @@
         supertype: C
         constructors
           synthetic @-1
+            superConstructor: self::@class::C::@constructor::•
     topLevelVariables
       static a @111
         type: A
@@ -20180,6 +20388,7 @@
               aliasElement: self::@typeAlias::F
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
         accessors
           synthetic get v @-1
             returnType: int Function(String)
@@ -20335,6 +20544,9 @@
             type: Map<T, int>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::D::@constructor::•
+              substitution: {U: int, V: T}
         accessors
           synthetic get v @-1
             returnType: Map<T, int>
@@ -20422,6 +20634,9 @@
         supertype: D<U, int>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::D::@constructor::•
+              substitution: {V: U, W: int}
         methods
           f @41
             parameters
@@ -20478,6 +20693,7 @@
         supertype: D
         constructors
           synthetic @-1
+            superConstructor: a.dart::@class::D::@constructor::•
         methods
           f @44
             parameters
@@ -20500,6 +20716,7 @@
         supertype: D
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
         methods
           f @25
             parameters
@@ -20605,6 +20822,7 @@
             type: int Function(String)
         constructors
           synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
         accessors
           set f @29
             parameters
@@ -20652,6 +20870,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: a.dart::@class::A::@constructor::•
         methods
           m @39
             parameters
@@ -20839,6 +21058,7 @@
             type: dynamic
         constructors
           synthetic @-1
+            superConstructor: self::@class::C::@constructor::•
         accessors
           synthetic get f @-1
             returnType: dynamic
@@ -21040,6 +21260,7 @@
         supertype: LegacyDefault*
         constructors
           synthetic @-1
+            superConstructor: legacy.dart::@class::LegacyDefault::@constructor::•
         methods
           == @71
             parameters
@@ -21050,6 +21271,7 @@
         supertype: LegacyObject*
         constructors
           synthetic @-1
+            superConstructor: legacy.dart::@class::LegacyObject::@constructor::•
         methods
           == @140
             parameters
@@ -21060,6 +21282,7 @@
         supertype: LegacyInt*
         constructors
           synthetic @-1
+            superConstructor: legacy.dart::@class::LegacyInt::@constructor::•
         methods
           == @206
             parameters
@@ -21120,6 +21343,7 @@
           NullSafeDefault*
         constructors
           synthetic @-1
+            superConstructor: legacy.dart::@class::LegacyDefault::@constructor::•
         methods
           == @136
             parameters
@@ -21132,6 +21356,7 @@
           NullSafeObject*
         constructors
           synthetic @-1
+            superConstructor: legacy.dart::@class::LegacyObject::@constructor::•
         methods
           == @231
             parameters
@@ -21144,6 +21369,7 @@
           NullSafeInt*
         constructors
           synthetic @-1
+            superConstructor: legacy.dart::@class::LegacyInt::@constructor::•
         methods
           == @320
             parameters
@@ -21187,6 +21413,7 @@
         supertype: NullSafeDefault
         constructors
           synthetic @-1
+            superConstructor: nullSafe.dart::@class::NullSafeDefault::@constructor::•
         methods
           == @74
             parameters
@@ -21197,6 +21424,7 @@
         supertype: NullSafeObject
         constructors
           synthetic @-1
+            superConstructor: nullSafe.dart::@class::NullSafeObject::@constructor::•
         methods
           == @145
             parameters
@@ -21207,6 +21435,7 @@
         supertype: NullSafeInt
         constructors
           synthetic @-1
+            superConstructor: nullSafe.dart::@class::NullSafeInt::@constructor::•
         methods
           == @213
             parameters
@@ -22159,6 +22388,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::C::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::C::@constructor::•
       class C @29
         constructors
           synthetic @-1
@@ -22470,6 +22700,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @45
         constructors
           synthetic @-1
@@ -22920,6 +23151,7 @@
                 period: . @0
                 staticElement: self::@class::A::@constructor::named
                 superKeyword: super @0
+            superConstructor: self::@class::A::@constructor::named
       class D @85
         metadata
           Annotation
@@ -23270,6 +23502,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::A::@constructor::•
       class D @73
         metadata
           Annotation
@@ -24996,6 +25229,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::A::@constructor::•
     mixins
       mixin M @33
         superclassConstraints
@@ -26022,6 +26256,7 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
                 superKeyword: super @0
+            superConstructor: self::@class::D::@constructor::•
       class D @48
         constructors
           synthetic @-1
@@ -26550,6 +26785,9 @@
           M<int*>*
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int*}
     mixins
       mixin M @20
         typeParameters
@@ -26584,6 +26822,9 @@
           M<int>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
     mixins
       mixin M @20
         typeParameters
@@ -26622,6 +26863,9 @@
           C<int*>*
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: a.dart::@class::A::@constructor::•
+              substitution: {T: int*}
 ''');
   }
 
@@ -26647,6 +26891,9 @@
           M<int*>*
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: a.dart::@class::A::@constructor::•
+              substitution: {T: int*}
 ''');
   }
 
@@ -27936,6 +28183,9 @@
         supertype: A<T>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: T}
         methods
           f @75
             parameters
@@ -27971,6 +28221,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @68
             parameters
@@ -28932,6 +29183,9 @@
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
                 superKeyword: super @0
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: T}
       class C @78
         fields
           a @88
@@ -29148,6 +29402,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
       class C @40
         typeParameters
           covariant T @42
@@ -32136,6 +32391,9 @@
           aliasElement: self::@typeAlias::X
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
     typeAliases
       X @8
         aliasedType: A<int>
@@ -32165,6 +32423,9 @@
             A<int>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
     typeAliases
       X @8
         typeParameters
@@ -32238,6 +32499,9 @@
           aliasElement: self::@typeAlias::X
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int?}
     typeAliases
       X @8
         aliasedType: A<int?>
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index feb2509..7a9a91c 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -1661,6 +1661,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           foo @52
             returnType: int
@@ -4712,6 +4713,9 @@
             type: List<dynamic Function()>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
         accessors
           get x @114
             returnType: dynamic Function()
@@ -4898,6 +4902,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @58
             parameters
@@ -4949,6 +4954,7 @@
           B
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @100
             typeInferenceError: overrideNoCombinedSuperSignature
@@ -5099,6 +5105,7 @@
           B
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @88
             typeInferenceError: overrideNoCombinedSuperSignature
@@ -5152,6 +5159,9 @@
           B<double>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
         methods
           m @112
             typeInferenceError: overrideNoCombinedSuperSignature
@@ -5210,6 +5220,9 @@
           B<double>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {K: int, V: String}
         methods
           m @119
             typeInferenceError: overrideNoCombinedSuperSignature
@@ -5246,6 +5259,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @53
             parameters
@@ -5283,6 +5297,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @53
             parameters
@@ -5320,6 +5335,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @44
             parameters
@@ -5355,6 +5371,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @63
             parameters
@@ -5395,6 +5412,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @48
             parameters
@@ -5439,10 +5457,16 @@
         supertype: A<int, T>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {K: int, V: T}
       class C @70
         supertype: B<String>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::B::@constructor::•
+              substitution: {T: String}
         methods
           m @94
             parameters
@@ -5481,6 +5505,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @55
             parameters
@@ -5491,6 +5516,7 @@
         supertype: B
         constructors
           synthetic @-1
+            superConstructor: self::@class::B::@constructor::•
         methods
           m @87
             parameters
@@ -5540,6 +5566,7 @@
         supertype: B
         constructors
           synthetic @-1
+            superConstructor: self::@class::B::@constructor::•
         methods
           m @90
             parameters
@@ -5590,6 +5617,7 @@
         supertype: B
         constructors
           synthetic @-1
+            superConstructor: self::@class::B::@constructor::•
         methods
           m @99
             parameters
@@ -5632,6 +5660,9 @@
         supertype: A<int, String>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {K: int, V: String}
         methods
           m @77
             parameters
@@ -5669,6 +5700,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @55
             parameters
@@ -5706,6 +5738,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @67
             parameters
@@ -5745,6 +5778,7 @@
         supertype: A
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @67
             parameters
@@ -5791,10 +5825,16 @@
         supertype: A<int, T>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {K: int, V: T}
       class C @70
         supertype: B<String>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::B::@constructor::•
+              substitution: {T: String}
         methods
           m @94
             parameters
@@ -5918,6 +5958,9 @@
         supertype: A<T2, T1>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {K: T2, V: T1}
       class C @91
         interfaces
           B<int, String>
@@ -5962,6 +6005,7 @@
         supertype: A1
         constructors
           synthetic @-1
+            superConstructor: self::@class::A1::@constructor::•
         methods
           _foo @77
             returnType: int
@@ -6053,6 +6097,9 @@
           B<String>
         constructors
           synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {K: int, V: String}
         methods
           m @119
             parameters
@@ -6102,6 +6149,7 @@
           B
         constructors
           synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
         methods
           m @101
             parameters
diff --git a/pkg/dds/CHANGELOG.md b/pkg/dds/CHANGELOG.md
index 0b7db0f..3b33fd2 100644
--- a/pkg/dds/CHANGELOG.md
+++ b/pkg/dds/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 2.1.6
+- Improve performance of CPU sample caching.
+
 # 2.1.5
 - Update to new CpuSamplesEvent format for CPU sample caching for improved
   performance.
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
index ef5124d..bc3e130 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.5
+version: 2.1.6
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds
 
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index 50570c9..4dd9122 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -19,6 +19,7 @@
   extensionMethods,
   extensionTypes,
   genericMetadata,
+  macros,
   namedArgumentsAnywhere,
   nonNullable,
   nonfunctionTypeAliases,
@@ -41,6 +42,7 @@
 const Version enableExtensionMethodsVersion = const Version(2, 6);
 const Version enableExtensionTypesVersion = const Version(2, 16);
 const Version enableGenericMetadataVersion = const Version(2, 14);
+const Version enableMacrosVersion = const Version(2, 16);
 const Version enableNamedArgumentsAnywhereVersion = const Version(2, 16);
 const Version enableNonNullableVersion = const Version(2, 12);
 const Version enableNonfunctionTypeAliasesVersion = const Version(2, 13);
@@ -72,6 +74,8 @@
       return ExperimentalFlag.extensionTypes;
     case "generic-metadata":
       return ExperimentalFlag.genericMetadata;
+    case "macros":
+      return ExperimentalFlag.macros;
     case "named-arguments-anywhere":
       return ExperimentalFlag.namedArgumentsAnywhere;
     case "non-nullable":
@@ -106,6 +110,7 @@
   ExperimentalFlag.extensionMethods: true,
   ExperimentalFlag.extensionTypes: false,
   ExperimentalFlag.genericMetadata: true,
+  ExperimentalFlag.macros: false,
   ExperimentalFlag.namedArgumentsAnywhere: false,
   ExperimentalFlag.nonNullable: true,
   ExperimentalFlag.nonfunctionTypeAliases: true,
@@ -128,6 +133,7 @@
   ExperimentalFlag.extensionMethods: true,
   ExperimentalFlag.extensionTypes: false,
   ExperimentalFlag.genericMetadata: true,
+  ExperimentalFlag.macros: false,
   ExperimentalFlag.namedArgumentsAnywhere: false,
   ExperimentalFlag.nonNullable: true,
   ExperimentalFlag.nonfunctionTypeAliases: true,
@@ -150,6 +156,7 @@
   ExperimentalFlag.extensionMethods: const Version(2, 6),
   ExperimentalFlag.extensionTypes: const Version(2, 16),
   ExperimentalFlag.genericMetadata: const Version(2, 14),
+  ExperimentalFlag.macros: const Version(2, 16),
   ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 16),
   ExperimentalFlag.nonNullable: const Version(2, 12),
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
@@ -172,6 +179,7 @@
   ExperimentalFlag.extensionMethods: const Version(2, 6),
   ExperimentalFlag.extensionTypes: const Version(2, 16),
   ExperimentalFlag.genericMetadata: const Version(2, 14),
+  ExperimentalFlag.macros: const Version(2, 16),
   ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 16),
   ExperimentalFlag.nonNullable: const Version(2, 10),
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
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 86edd9f..ae3196c 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -918,7 +918,8 @@
   }
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     debugEvent("beginClassDeclaration");
     push(begin);
   }
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 79fdc67..5dace80 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -814,7 +814,8 @@
   }
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     debugEvent("beginClassDeclaration");
     popDeclarationContext(
         DeclarationContext.ClassOrMixinOrNamedMixinApplication);
@@ -827,6 +828,16 @@
     libraryBuilder.setCurrentClassName(name.lexeme);
     inAbstractClass = abstractToken != null;
     push(abstractToken != null ? abstractMask : 0);
+    if (macroToken != null && !libraryBuilder.enableMacrosInLibrary) {
+      // TODO(johnniwinther): We should emit a different message when the
+      // experiment is not released yet. The current message indicates that
+      // changing the sdk version can solve the problem.
+      addProblem(
+          templateExperimentNotEnabled.withArguments(
+              'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
+          macroToken.next!.charOffset,
+          macroToken.next!.length);
+    }
   }
 
   @override
@@ -899,7 +910,7 @@
 
   @override
   void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token name) {
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     debugEvent("beginNamedMixinApplication");
     popDeclarationContext(
         DeclarationContext.ClassOrMixinOrNamedMixinApplication);
@@ -910,6 +921,13 @@
     libraryBuilder.currentTypeParameterScopeBuilder.markAsNamedMixinApplication(
         name.lexeme, name.charOffset, typeVariables);
     push(abstractToken != null ? abstractMask : 0);
+    if (macroToken != null && !libraryBuilder.enableMacrosInLibrary) {
+      addProblem(
+          templateExperimentNotEnabled.withArguments(
+              'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
+          macroToken.next!.charOffset,
+          macroToken.next!.length);
+    }
   }
 
   @override
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 b8b0563..5089e47 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
@@ -327,6 +327,7 @@
   Version? _enableNamedArgumentsAnywhereVersionInLibrary;
   Version? _enableSuperParametersVersionInLibrary;
   Version? _enableEnhancedEnumsVersionInLibrary;
+  Version? _enableMacrosVersionInLibrary;
   bool? _enableTripleShiftInLibrary;
   bool? _enableExtensionMethodsInLibrary;
   bool? _enableGenericMetadataInLibrary;
@@ -335,6 +336,7 @@
   bool? _enableConstructorTearOffsInLibrary;
   bool? _enableNamedArgumentsAnywhereInLibrary;
   bool? _enableSuperParametersInLibrary;
+  bool? _enableMacrosInLibrary;
 
   bool get enableConstFunctionsInLibrary => _enableConstFunctionsInLibrary ??=
       loader.target.isExperimentEnabledInLibraryByVersion(
@@ -444,6 +446,14 @@
           .getExperimentEnabledVersionInLibrary(
               ExperimentalFlag.enhancedEnums, _packageUri ?? importUri);
 
+  bool get enableMacrosInLibrary => _enableMacrosInLibrary ??= loader.target
+      .isExperimentEnabledInLibraryByVersion(ExperimentalFlag.macros,
+          _packageUri ?? importUri, languageVersion.version);
+
+  Version get enableMacrosVersionInLibrary => _enableMacrosVersionInLibrary ??=
+      loader.target.getExperimentEnabledVersionInLibrary(
+          ExperimentalFlag.macros, _packageUri ?? importUri);
+
   void _updateLibraryNNBDSettings() {
     library.isNonNullableByDefault = isNonNullableByDefault;
     switch (loader.nnbdMode) {
diff --git a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
index b38e4ed..d7140cd 100644
--- a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
@@ -165,9 +165,13 @@
   }
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     ClassDeclarationBegin data = new ClassDeclarationBegin(ParserAstType.BEGIN,
-        begin: begin, abstractToken: abstractToken, name: name);
+        begin: begin,
+        abstractToken: abstractToken,
+        macroToken: macroToken,
+        name: name);
     seen(data);
   }
 
@@ -917,11 +921,12 @@
 
   @override
   void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token name) {
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     NamedMixinApplicationBegin data = new NamedMixinApplicationBegin(
         ParserAstType.BEGIN,
         begin: begin,
         abstractToken: abstractToken,
+        macroToken: macroToken,
         name: name);
     seen(data);
   }
@@ -2825,16 +2830,21 @@
 class ClassDeclarationBegin extends ParserAstNode {
   final Token begin;
   final Token? abstractToken;
+  final Token? macroToken;
   final Token name;
 
   ClassDeclarationBegin(ParserAstType type,
-      {required this.begin, this.abstractToken, required this.name})
+      {required this.begin,
+      this.abstractToken,
+      this.macroToken,
+      required this.name})
       : super("ClassDeclaration", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "abstractToken": abstractToken,
+        "macroToken": macroToken,
         "name": name,
       };
 }
@@ -4188,16 +4198,21 @@
 class NamedMixinApplicationBegin extends ParserAstNode {
   final Token begin;
   final Token? abstractToken;
+  final Token? macroToken;
   final Token name;
 
   NamedMixinApplicationBegin(ParserAstType type,
-      {required this.begin, this.abstractToken, required this.name})
+      {required this.begin,
+      this.abstractToken,
+      this.macroToken,
+      required this.name})
       : super("NamedMixinApplication", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
         "begin": begin,
         "abstractToken": abstractToken,
+        "macroToken": macroToken,
         "name": name,
       };
 }
diff --git a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
index 04b3942..2403c22 100644
--- a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(enum)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, enum, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, enum)
       parseEnum(enum)
         listener: beginUncategorizedTopLevelDeclaration(enum)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
index 9fc344c..315d899 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
@@ -14,7 +14,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -114,7 +114,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(D, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, D)
+    beginClassDeclaration(class, null, null, D)
       handleNoType(D)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
index 07f6de4..f075fef 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -258,14 +258,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(D, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, D)
+        listener: beginClassDeclaration(class, null, null, D)
         parseClass(D, class, class, D)
           parseClassHeaderOpt(D, class, class)
             parseClassExtendsOpt(D)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
index acb0f6c..df50087 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
@@ -126,7 +126,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
index 88944b7f..06d293d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
index 4b23187..ddc254b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
index 75979e4..3f0d02a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
index 77c9204..c5b9ca5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
index 7ab4015..510034d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
index f2201dc..49cb540 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
index 55c390c..fdc9ae0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
index 4f6c582..affdbb5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
index 21be0f7..3e8ea041 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
index 2ed0508..3353b3f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
index 5109bb5..fbd18be 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
index 6b37228..9ecbeda 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
@@ -78,7 +78,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
index e584d14..06cf3f0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
index 3c0bbca..a93fe07 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
index 057bb78..148639d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
index 1620ea3..e78880d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
index 5abf42d..d1bd6a8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
index 0d4f0e2..c951cb0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, extension, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, extension, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
index 0a96f68..3caae1e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
index 0fd3f33..32d89ec 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
index 448b3e0..cfcdd2e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -41,7 +41,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, B)
+    beginClassDeclaration(class, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -56,7 +56,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(,)
       handleType(A, null)
@@ -92,7 +92,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Bar, classOrMixinDeclaration)
     handleNoTypeVariables(extend)
-    beginClassDeclaration(class, null, Bar)
+    beginClassDeclaration(class, null, null, Bar)
       handleNoType(Bar)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -134,7 +134,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Baz, classOrMixinDeclaration)
     handleNoTypeVariables(on)
-    beginClassDeclaration(class, null, Baz)
+    beginClassDeclaration(class, null, null, Baz)
       handleNoType(Baz)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
index 612efb5..0c27622 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, B)
+        listener: beginClassDeclaration(class, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -62,14 +62,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -130,14 +130,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Bar, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extend)
-        listener: beginClassDeclaration(class, null, Bar)
+        listener: beginClassDeclaration(class, null, null, Bar)
         parseClass(Bar, class, class, Bar)
           parseClassHeaderOpt(Bar, class, class)
             parseClassExtendsOpt(Bar)
@@ -214,14 +214,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Baz, classOrMixinDeclaration)
         listener: handleNoTypeVariables(on)
-        listener: beginClassDeclaration(class, null, Baz)
+        listener: beginClassDeclaration(class, null, null, Baz)
         parseClass(Baz, class, class, Baz)
           parseClassHeaderOpt(Baz, class, class)
             parseClassExtendsOpt(Baz)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
index c95dc3b..50def6f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Annotation, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Annotation)
+    beginClassDeclaration(class, null, null, Annotation)
       handleNoType(Annotation)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -80,7 +80,7 @@
         handleNoType(E)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -95,7 +95,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
index 4720e85..8d39ca9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
@@ -28,14 +28,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Annotation, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Annotation)
+        listener: beginClassDeclaration(class, null, null, Annotation)
         parseClass(Annotation, class, class, Annotation)
           parseClassHeaderOpt(Annotation, class, class)
             parseClassExtendsOpt(Annotation)
@@ -112,9 +112,9 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -127,7 +127,7 @@
         listener: handleNoType(E)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -148,14 +148,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
index 0453611..d081a84 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -44,7 +44,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -79,7 +79,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -120,7 +120,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -158,7 +158,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -203,7 +203,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -249,7 +249,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -306,7 +306,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -386,7 +386,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -458,7 +458,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -476,7 +476,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
index db84d46..2ac0d92 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, Key)
+    beginClassDeclaration(abstract, abstract, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
index e575bbf..b1c109a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
@@ -6,15 +6,15 @@
     parseMetadataStar()
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, class)
+      parseClassOrNamedMixinApplication(abstract, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
index b5464e1..0316b5f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, Key)
+    beginClassDeclaration(abstract, abstract, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
index d50b821..91ece53 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
@@ -6,15 +6,15 @@
     parseMetadataStar()
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, class)
+      parseClassOrNamedMixinApplication(abstract, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
index 4f4d844..c5a4273 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, Key)
+    beginClassDeclaration(abstract, abstract, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
index 8d04871..f8f7500 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
@@ -6,15 +6,15 @@
     parseMetadataStar()
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, class)
+      parseClassOrNamedMixinApplication(abstract, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
index e14c1cd..abe79a6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
@@ -14,7 +14,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
index 885acb8..19f4ce1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
index ef39e22..ecd1166 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
index 8a9a4f4..6329811 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
index 8064bef..8b108c7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
index eb7be0a..e533d5c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
index 486d7a3..87cebd9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
index 1443cf1..c9eff1a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
@@ -18,7 +18,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -54,7 +54,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(DND1, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, DND1)
+    beginClassDeclaration(class, null, null, DND1)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(with)
       handleType(Object, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
index c046fee..32477fe 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
@@ -6,9 +6,9 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -21,7 +21,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -42,7 +42,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(mixin)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, mixin, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, mixin, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, mixin)
       parseMixin(mixin)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
@@ -74,14 +74,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(DND1, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, DND1)
+        listener: beginClassDeclaration(class, null, null, DND1)
         parseClass(DND1, class, class, DND1)
           parseClassHeaderOpt(DND1, class, class)
             parseClassExtendsOpt(DND1)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
index 1fc743a..fdef824 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
index 2c656d6..4c19f5b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
index 2845e0b..b8f453d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
index d370a1f..9a36032 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
index 487b2f4..46c74ad 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
index 3e6acd8..548af9c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
index 3286fb7..04648ed 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
index a77c1d4..fc0194c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
index 78e2879..78a0d51 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
index 7671fc4..143a90d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
index 1859b0b..5602483 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
index 1711905..9792fa7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
index 4a37dea..eba032d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
index b2a0a36..88ac7ed 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
index 77176c4..ccc11a0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
index 48a989a..9138896 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
index 4c25c0e..498b48a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
index e64026f..a2bf1e5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
index 2b0b373..b2e7f3e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
index cf0c95b..a62bd2c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, F)
+    beginClassDeclaration(class, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
index 642c608..dabdaef 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, F)
+        listener: beginClassDeclaration(class, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
index 51b616e..aaf3524 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
@@ -22,7 +22,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
index 352b89d..4cba827 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
@@ -6,9 +6,9 @@
     parseMetadataStar(UnmatchedToken(())
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(UnmatchedToken((), class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(UnmatchedToken((), class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(UnmatchedToken((), class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
@@ -21,7 +21,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(>, class, class, Foo)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
index 1819758..3bc1986 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
@@ -227,7 +227,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
     handleIdentifier(abstract, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, abstract)
+    beginClassDeclaration(class, null, null, abstract)
       handleNoType(abstract)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -243,7 +243,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
     handleIdentifier(as, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, as)
+    beginClassDeclaration(class, null, null, as)
       handleNoType(as)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -259,7 +259,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
     handleIdentifier(assert, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, assert)
+    beginClassDeclaration(class, null, null, assert)
       handleNoType(assert)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -274,7 +274,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(async, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, async)
+    beginClassDeclaration(class, null, null, async)
       handleNoType(async)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -289,7 +289,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(await, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, await)
+    beginClassDeclaration(class, null, null, await)
       handleNoType(await)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -305,7 +305,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
     handleIdentifier(break, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, break)
+    beginClassDeclaration(class, null, null, break)
       handleNoType(break)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -321,7 +321,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
     handleIdentifier(case, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, case)
+    beginClassDeclaration(class, null, null, case)
       handleNoType(case)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -337,7 +337,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
     handleIdentifier(catch, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, catch)
+    beginClassDeclaration(class, null, null, catch)
       handleNoType(catch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -353,7 +353,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
     handleIdentifier(class, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, class)
+    beginClassDeclaration(class, null, null, class)
       handleNoType(class)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -369,7 +369,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
     handleIdentifier(const, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, const)
+    beginClassDeclaration(class, null, null, const)
       handleNoType(const)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -385,7 +385,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
     handleIdentifier(continue, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, continue)
+    beginClassDeclaration(class, null, null, continue)
       handleNoType(continue)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -401,7 +401,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
     handleIdentifier(covariant, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, covariant)
+    beginClassDeclaration(class, null, null, covariant)
       handleNoType(covariant)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -417,7 +417,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
     handleIdentifier(default, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, default)
+    beginClassDeclaration(class, null, null, default)
       handleNoType(default)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -433,7 +433,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
     handleIdentifier(deferred, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, deferred)
+    beginClassDeclaration(class, null, null, deferred)
       handleNoType(deferred)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -449,7 +449,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
     handleIdentifier(do, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, do)
+    beginClassDeclaration(class, null, null, do)
       handleNoType(do)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -465,7 +465,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
     handleIdentifier(dynamic, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, dynamic)
+    beginClassDeclaration(class, null, null, dynamic)
       handleNoType(dynamic)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -481,7 +481,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
     handleIdentifier(else, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, else)
+    beginClassDeclaration(class, null, null, else)
       handleNoType(else)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -497,7 +497,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
     handleIdentifier(enum, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, enum)
+    beginClassDeclaration(class, null, null, enum)
       handleNoType(enum)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -513,7 +513,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
     handleIdentifier(export, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, export)
+    beginClassDeclaration(class, null, null, export)
       handleNoType(export)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -529,7 +529,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
     handleIdentifier(extends, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, extends)
+    beginClassDeclaration(class, null, null, extends)
       handleNoType(extends)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -545,7 +545,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
     handleIdentifier(extension, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, extension)
+    beginClassDeclaration(class, null, null, extension)
       handleNoType(extension)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -561,7 +561,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
     handleIdentifier(external, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, external)
+    beginClassDeclaration(class, null, null, external)
       handleNoType(external)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -577,7 +577,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
     handleIdentifier(factory, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, factory)
+    beginClassDeclaration(class, null, null, factory)
       handleNoType(factory)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -593,7 +593,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
     handleIdentifier(false, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, false)
+    beginClassDeclaration(class, null, null, false)
       handleNoType(false)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -609,7 +609,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
     handleIdentifier(final, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, final)
+    beginClassDeclaration(class, null, null, final)
       handleNoType(final)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -625,7 +625,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
     handleIdentifier(finally, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, finally)
+    beginClassDeclaration(class, null, null, finally)
       handleNoType(finally)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -641,7 +641,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
     handleIdentifier(for, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, for)
+    beginClassDeclaration(class, null, null, for)
       handleNoType(for)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -656,7 +656,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Function, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Function)
+    beginClassDeclaration(class, null, null, Function)
       handleNoType(Function)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -672,7 +672,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
     handleIdentifier(get, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, get)
+    beginClassDeclaration(class, null, null, get)
       handleNoType(get)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -687,7 +687,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(hide, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, hide)
+    beginClassDeclaration(class, null, null, hide)
       handleNoType(hide)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -703,7 +703,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
     handleIdentifier(if, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, if)
+    beginClassDeclaration(class, null, null, if)
       handleNoType(if)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -719,7 +719,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
     handleIdentifier(implements, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, implements)
+    beginClassDeclaration(class, null, null, implements)
       handleNoType(implements)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -735,7 +735,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
     handleIdentifier(import, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, import)
+    beginClassDeclaration(class, null, null, import)
       handleNoType(import)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -751,7 +751,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
     handleIdentifier(in, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, in)
+    beginClassDeclaration(class, null, null, in)
       handleNoType(in)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -766,7 +766,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(inout, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, inout)
+    beginClassDeclaration(class, null, null, inout)
       handleNoType(inout)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -782,7 +782,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
     handleIdentifier(interface, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, interface)
+    beginClassDeclaration(class, null, null, interface)
       handleNoType(interface)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -798,7 +798,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
     handleIdentifier(is, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, is)
+    beginClassDeclaration(class, null, null, is)
       handleNoType(is)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -814,7 +814,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, late)
+    beginClassDeclaration(class, null, null, late)
       handleNoType(late)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -830,7 +830,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
     handleIdentifier(library, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, library)
+    beginClassDeclaration(class, null, null, library)
       handleNoType(library)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -846,7 +846,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
     handleIdentifier(mixin, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, mixin)
+    beginClassDeclaration(class, null, null, mixin)
       handleNoType(mixin)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -861,7 +861,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(native, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, native)
+    beginClassDeclaration(class, null, null, native)
       handleNoType(native)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -877,7 +877,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
     handleIdentifier(new, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, new)
+    beginClassDeclaration(class, null, null, new)
       handleNoType(new)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -893,7 +893,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
     handleIdentifier(null, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null)
+    beginClassDeclaration(class, null, null, null)
       handleNoType(null)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -908,7 +908,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(of, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, of)
+    beginClassDeclaration(class, null, null, of)
       handleNoType(of)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -923,7 +923,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(on, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, on)
+    beginClassDeclaration(class, null, null, on)
       handleNoType(on)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -939,7 +939,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, operator)
+    beginClassDeclaration(class, null, null, operator)
       handleNoType(operator)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -954,7 +954,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(out, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, out)
+    beginClassDeclaration(class, null, null, out)
       handleNoType(out)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -970,7 +970,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
     handleIdentifier(part, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, part)
+    beginClassDeclaration(class, null, null, part)
       handleNoType(part)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -985,7 +985,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(patch, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, patch)
+    beginClassDeclaration(class, null, null, patch)
       handleNoType(patch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1001,7 +1001,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, required)
+    beginClassDeclaration(class, null, null, required)
       handleNoType(required)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1017,7 +1017,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
     handleIdentifier(rethrow, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, rethrow)
+    beginClassDeclaration(class, null, null, rethrow)
       handleNoType(rethrow)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1033,7 +1033,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
     handleIdentifier(return, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, return)
+    beginClassDeclaration(class, null, null, return)
       handleNoType(return)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1049,7 +1049,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
     handleIdentifier(set, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, set)
+    beginClassDeclaration(class, null, null, set)
       handleNoType(set)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1064,7 +1064,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(show, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, show)
+    beginClassDeclaration(class, null, null, show)
       handleNoType(show)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1079,7 +1079,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(source, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, source)
+    beginClassDeclaration(class, null, null, source)
       handleNoType(source)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1095,7 +1095,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
     handleIdentifier(static, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, static)
+    beginClassDeclaration(class, null, null, static)
       handleNoType(static)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1111,7 +1111,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
     handleIdentifier(super, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, super)
+    beginClassDeclaration(class, null, null, super)
       handleNoType(super)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1127,7 +1127,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
     handleIdentifier(switch, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, switch)
+    beginClassDeclaration(class, null, null, switch)
       handleNoType(switch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1142,7 +1142,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(sync, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, sync)
+    beginClassDeclaration(class, null, null, sync)
       handleNoType(sync)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1158,7 +1158,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
     handleIdentifier(this, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, this)
+    beginClassDeclaration(class, null, null, this)
       handleNoType(this)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1174,7 +1174,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
     handleIdentifier(throw, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, throw)
+    beginClassDeclaration(class, null, null, throw)
       handleNoType(throw)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1190,7 +1190,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
     handleIdentifier(true, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, true)
+    beginClassDeclaration(class, null, null, true)
       handleNoType(true)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1206,7 +1206,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
     handleIdentifier(try, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, try)
+    beginClassDeclaration(class, null, null, try)
       handleNoType(try)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1222,7 +1222,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
     handleIdentifier(typedef, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, typedef)
+    beginClassDeclaration(class, null, null, typedef)
       handleNoType(typedef)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1238,7 +1238,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
     handleIdentifier(var, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, var)
+    beginClassDeclaration(class, null, null, var)
       handleNoType(var)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1254,7 +1254,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
     handleIdentifier(void, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, void)
+    beginClassDeclaration(class, null, null, void)
       handleNoType(void)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1270,7 +1270,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
     handleIdentifier(while, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, while)
+    beginClassDeclaration(class, null, null, while)
       handleNoType(while)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1286,7 +1286,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
     handleIdentifier(with, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, with)
+    beginClassDeclaration(class, null, null, with)
       handleNoType(with)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1301,7 +1301,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(yield, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, yield)
+    beginClassDeclaration(class, null, null, yield)
       handleNoType(yield)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
index 5a31b41..6c9c866 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
@@ -6,16 +6,16 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
           listener: handleIdentifier(abstract, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, abstract)
+        listener: beginClassDeclaration(class, null, null, abstract)
         parseClass(abstract, class, class, abstract)
           parseClassHeaderOpt(abstract, class, class)
             parseClassExtendsOpt(abstract)
@@ -36,16 +36,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
           listener: handleIdentifier(as, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, as)
+        listener: beginClassDeclaration(class, null, null, as)
         parseClass(as, class, class, as)
           parseClassHeaderOpt(as, class, class)
             parseClassExtendsOpt(as)
@@ -66,16 +66,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
           listener: handleIdentifier(assert, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, assert)
+        listener: beginClassDeclaration(class, null, null, assert)
         parseClass(assert, class, class, assert)
           parseClassHeaderOpt(assert, class, class)
             parseClassExtendsOpt(assert)
@@ -96,14 +96,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(async, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, async)
+        listener: beginClassDeclaration(class, null, null, async)
         parseClass(async, class, class, async)
           parseClassHeaderOpt(async, class, class)
             parseClassExtendsOpt(async)
@@ -124,14 +124,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(await, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, await)
+        listener: beginClassDeclaration(class, null, null, await)
         parseClass(await, class, class, await)
           parseClassHeaderOpt(await, class, class)
             parseClassExtendsOpt(await)
@@ -152,16 +152,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
           listener: handleIdentifier(break, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, break)
+        listener: beginClassDeclaration(class, null, null, break)
         parseClass(break, class, class, break)
           parseClassHeaderOpt(break, class, class)
             parseClassExtendsOpt(break)
@@ -182,16 +182,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
           listener: handleIdentifier(case, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, case)
+        listener: beginClassDeclaration(class, null, null, case)
         parseClass(case, class, class, case)
           parseClassHeaderOpt(case, class, class)
             parseClassExtendsOpt(case)
@@ -212,16 +212,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
           listener: handleIdentifier(catch, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, catch)
+        listener: beginClassDeclaration(class, null, null, catch)
         parseClass(catch, class, class, catch)
           parseClassHeaderOpt(catch, class, class)
             parseClassExtendsOpt(catch)
@@ -242,16 +242,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
           listener: handleIdentifier(class, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, class)
+        listener: beginClassDeclaration(class, null, null, class)
         parseClass(class, class, class, class)
           parseClassHeaderOpt(class, class, class)
             parseClassExtendsOpt(class)
@@ -272,16 +272,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
           listener: handleIdentifier(const, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, const)
+        listener: beginClassDeclaration(class, null, null, const)
         parseClass(const, class, class, const)
           parseClassHeaderOpt(const, class, class)
             parseClassExtendsOpt(const)
@@ -302,16 +302,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
           listener: handleIdentifier(continue, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, continue)
+        listener: beginClassDeclaration(class, null, null, continue)
         parseClass(continue, class, class, continue)
           parseClassHeaderOpt(continue, class, class)
             parseClassExtendsOpt(continue)
@@ -332,16 +332,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
           listener: handleIdentifier(covariant, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, covariant)
+        listener: beginClassDeclaration(class, null, null, covariant)
         parseClass(covariant, class, class, covariant)
           parseClassHeaderOpt(covariant, class, class)
             parseClassExtendsOpt(covariant)
@@ -362,16 +362,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
           listener: handleIdentifier(default, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, default)
+        listener: beginClassDeclaration(class, null, null, default)
         parseClass(default, class, class, default)
           parseClassHeaderOpt(default, class, class)
             parseClassExtendsOpt(default)
@@ -392,16 +392,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
           listener: handleIdentifier(deferred, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, deferred)
+        listener: beginClassDeclaration(class, null, null, deferred)
         parseClass(deferred, class, class, deferred)
           parseClassHeaderOpt(deferred, class, class)
             parseClassExtendsOpt(deferred)
@@ -422,16 +422,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
           listener: handleIdentifier(do, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, do)
+        listener: beginClassDeclaration(class, null, null, do)
         parseClass(do, class, class, do)
           parseClassHeaderOpt(do, class, class)
             parseClassExtendsOpt(do)
@@ -452,16 +452,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
           listener: handleIdentifier(dynamic, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, dynamic)
+        listener: beginClassDeclaration(class, null, null, dynamic)
         parseClass(dynamic, class, class, dynamic)
           parseClassHeaderOpt(dynamic, class, class)
             parseClassExtendsOpt(dynamic)
@@ -482,16 +482,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
           listener: handleIdentifier(else, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, else)
+        listener: beginClassDeclaration(class, null, null, else)
         parseClass(else, class, class, else)
           parseClassHeaderOpt(else, class, class)
             parseClassExtendsOpt(else)
@@ -512,16 +512,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
           listener: handleIdentifier(enum, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, enum)
+        listener: beginClassDeclaration(class, null, null, enum)
         parseClass(enum, class, class, enum)
           parseClassHeaderOpt(enum, class, class)
             parseClassExtendsOpt(enum)
@@ -542,16 +542,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
           listener: handleIdentifier(export, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, export)
+        listener: beginClassDeclaration(class, null, null, export)
         parseClass(export, class, class, export)
           parseClassHeaderOpt(export, class, class)
             parseClassExtendsOpt(export)
@@ -572,16 +572,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
           listener: handleIdentifier(extends, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, extends)
+        listener: beginClassDeclaration(class, null, null, extends)
         parseClass(extends, class, class, extends)
           parseClassHeaderOpt(extends, class, class)
             parseClassExtendsOpt(extends)
@@ -602,16 +602,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
           listener: handleIdentifier(extension, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, extension)
+        listener: beginClassDeclaration(class, null, null, extension)
         parseClass(extension, class, class, extension)
           parseClassHeaderOpt(extension, class, class)
             parseClassExtendsOpt(extension)
@@ -632,16 +632,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
           listener: handleIdentifier(external, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, external)
+        listener: beginClassDeclaration(class, null, null, external)
         parseClass(external, class, class, external)
           parseClassHeaderOpt(external, class, class)
             parseClassExtendsOpt(external)
@@ -662,16 +662,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
           listener: handleIdentifier(factory, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, factory)
+        listener: beginClassDeclaration(class, null, null, factory)
         parseClass(factory, class, class, factory)
           parseClassHeaderOpt(factory, class, class)
             parseClassExtendsOpt(factory)
@@ -692,16 +692,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
           listener: handleIdentifier(false, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, false)
+        listener: beginClassDeclaration(class, null, null, false)
         parseClass(false, class, class, false)
           parseClassHeaderOpt(false, class, class)
             parseClassExtendsOpt(false)
@@ -722,16 +722,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
           listener: handleIdentifier(final, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, final)
+        listener: beginClassDeclaration(class, null, null, final)
         parseClass(final, class, class, final)
           parseClassHeaderOpt(final, class, class)
             parseClassExtendsOpt(final)
@@ -752,16 +752,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
           listener: handleIdentifier(finally, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, finally)
+        listener: beginClassDeclaration(class, null, null, finally)
         parseClass(finally, class, class, finally)
           parseClassHeaderOpt(finally, class, class)
             parseClassExtendsOpt(finally)
@@ -782,16 +782,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
           listener: handleIdentifier(for, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, for)
+        listener: beginClassDeclaration(class, null, null, for)
         parseClass(for, class, class, for)
           parseClassHeaderOpt(for, class, class)
             parseClassExtendsOpt(for)
@@ -812,14 +812,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Function, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Function)
+        listener: beginClassDeclaration(class, null, null, Function)
         parseClass(Function, class, class, Function)
           parseClassHeaderOpt(Function, class, class)
             parseClassExtendsOpt(Function)
@@ -840,16 +840,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
           listener: handleIdentifier(get, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, get)
+        listener: beginClassDeclaration(class, null, null, get)
         parseClass(get, class, class, get)
           parseClassHeaderOpt(get, class, class)
             parseClassExtendsOpt(get)
@@ -870,14 +870,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(hide, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, hide)
+        listener: beginClassDeclaration(class, null, null, hide)
         parseClass(hide, class, class, hide)
           parseClassHeaderOpt(hide, class, class)
             parseClassExtendsOpt(hide)
@@ -898,16 +898,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
           listener: handleIdentifier(if, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, if)
+        listener: beginClassDeclaration(class, null, null, if)
         parseClass(if, class, class, if)
           parseClassHeaderOpt(if, class, class)
             parseClassExtendsOpt(if)
@@ -928,16 +928,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
           listener: handleIdentifier(implements, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, implements)
+        listener: beginClassDeclaration(class, null, null, implements)
         parseClass(implements, class, class, implements)
           parseClassHeaderOpt(implements, class, class)
             parseClassExtendsOpt(implements)
@@ -958,16 +958,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
           listener: handleIdentifier(import, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, import)
+        listener: beginClassDeclaration(class, null, null, import)
         parseClass(import, class, class, import)
           parseClassHeaderOpt(import, class, class)
             parseClassExtendsOpt(import)
@@ -988,16 +988,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
           listener: handleIdentifier(in, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, in)
+        listener: beginClassDeclaration(class, null, null, in)
         parseClass(in, class, class, in)
           parseClassHeaderOpt(in, class, class)
             parseClassExtendsOpt(in)
@@ -1018,14 +1018,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(inout, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, inout)
+        listener: beginClassDeclaration(class, null, null, inout)
         parseClass(inout, class, class, inout)
           parseClassHeaderOpt(inout, class, class)
             parseClassExtendsOpt(inout)
@@ -1046,16 +1046,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
           listener: handleIdentifier(interface, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, interface)
+        listener: beginClassDeclaration(class, null, null, interface)
         parseClass(interface, class, class, interface)
           parseClassHeaderOpt(interface, class, class)
             parseClassExtendsOpt(interface)
@@ -1076,16 +1076,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
           listener: handleIdentifier(is, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, is)
+        listener: beginClassDeclaration(class, null, null, is)
         parseClass(is, class, class, is)
           parseClassHeaderOpt(is, class, class)
             parseClassExtendsOpt(is)
@@ -1106,16 +1106,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, late)
+        listener: beginClassDeclaration(class, null, null, late)
         parseClass(late, class, class, late)
           parseClassHeaderOpt(late, class, class)
             parseClassExtendsOpt(late)
@@ -1136,16 +1136,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
           listener: handleIdentifier(library, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, library)
+        listener: beginClassDeclaration(class, null, null, library)
         parseClass(library, class, class, library)
           parseClassHeaderOpt(library, class, class)
             parseClassExtendsOpt(library)
@@ -1166,16 +1166,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
           listener: handleIdentifier(mixin, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, mixin)
+        listener: beginClassDeclaration(class, null, null, mixin)
         parseClass(mixin, class, class, mixin)
           parseClassHeaderOpt(mixin, class, class)
             parseClassExtendsOpt(mixin)
@@ -1196,14 +1196,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(native, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, native)
+        listener: beginClassDeclaration(class, null, null, native)
         parseClass(native, class, class, native)
           parseClassHeaderOpt(native, class, class)
             parseClassExtendsOpt(native)
@@ -1224,16 +1224,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
           listener: handleIdentifier(new, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, new)
+        listener: beginClassDeclaration(class, null, null, new)
         parseClass(new, class, class, new)
           parseClassHeaderOpt(new, class, class)
             parseClassExtendsOpt(new)
@@ -1254,16 +1254,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
           listener: handleIdentifier(null, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null)
+        listener: beginClassDeclaration(class, null, null, null)
         parseClass(null, class, class, null)
           parseClassHeaderOpt(null, class, class)
             parseClassExtendsOpt(null)
@@ -1284,14 +1284,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(of, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, of)
+        listener: beginClassDeclaration(class, null, null, of)
         parseClass(of, class, class, of)
           parseClassHeaderOpt(of, class, class)
             parseClassExtendsOpt(of)
@@ -1312,14 +1312,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(on, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, on)
+        listener: beginClassDeclaration(class, null, null, on)
         parseClass(on, class, class, on)
           parseClassHeaderOpt(on, class, class)
             parseClassExtendsOpt(on)
@@ -1340,16 +1340,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, operator)
+        listener: beginClassDeclaration(class, null, null, operator)
         parseClass(operator, class, class, operator)
           parseClassHeaderOpt(operator, class, class)
             parseClassExtendsOpt(operator)
@@ -1370,14 +1370,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(out, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, out)
+        listener: beginClassDeclaration(class, null, null, out)
         parseClass(out, class, class, out)
           parseClassHeaderOpt(out, class, class)
             parseClassExtendsOpt(out)
@@ -1398,16 +1398,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
           listener: handleIdentifier(part, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, part)
+        listener: beginClassDeclaration(class, null, null, part)
         parseClass(part, class, class, part)
           parseClassHeaderOpt(part, class, class)
             parseClassExtendsOpt(part)
@@ -1428,14 +1428,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(patch, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, patch)
+        listener: beginClassDeclaration(class, null, null, patch)
         parseClass(patch, class, class, patch)
           parseClassHeaderOpt(patch, class, class)
             parseClassExtendsOpt(patch)
@@ -1456,16 +1456,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, required)
+        listener: beginClassDeclaration(class, null, null, required)
         parseClass(required, class, class, required)
           parseClassHeaderOpt(required, class, class)
             parseClassExtendsOpt(required)
@@ -1486,16 +1486,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
           listener: handleIdentifier(rethrow, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, rethrow)
+        listener: beginClassDeclaration(class, null, null, rethrow)
         parseClass(rethrow, class, class, rethrow)
           parseClassHeaderOpt(rethrow, class, class)
             parseClassExtendsOpt(rethrow)
@@ -1516,16 +1516,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
           listener: handleIdentifier(return, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, return)
+        listener: beginClassDeclaration(class, null, null, return)
         parseClass(return, class, class, return)
           parseClassHeaderOpt(return, class, class)
             parseClassExtendsOpt(return)
@@ -1546,16 +1546,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
           listener: handleIdentifier(set, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, set)
+        listener: beginClassDeclaration(class, null, null, set)
         parseClass(set, class, class, set)
           parseClassHeaderOpt(set, class, class)
             parseClassExtendsOpt(set)
@@ -1576,14 +1576,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(show, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, show)
+        listener: beginClassDeclaration(class, null, null, show)
         parseClass(show, class, class, show)
           parseClassHeaderOpt(show, class, class)
             parseClassExtendsOpt(show)
@@ -1604,14 +1604,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(source, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, source)
+        listener: beginClassDeclaration(class, null, null, source)
         parseClass(source, class, class, source)
           parseClassHeaderOpt(source, class, class)
             parseClassExtendsOpt(source)
@@ -1632,16 +1632,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
           listener: handleIdentifier(static, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, static)
+        listener: beginClassDeclaration(class, null, null, static)
         parseClass(static, class, class, static)
           parseClassHeaderOpt(static, class, class)
             parseClassExtendsOpt(static)
@@ -1662,16 +1662,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
           listener: handleIdentifier(super, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, super)
+        listener: beginClassDeclaration(class, null, null, super)
         parseClass(super, class, class, super)
           parseClassHeaderOpt(super, class, class)
             parseClassExtendsOpt(super)
@@ -1692,16 +1692,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
           listener: handleIdentifier(switch, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, switch)
+        listener: beginClassDeclaration(class, null, null, switch)
         parseClass(switch, class, class, switch)
           parseClassHeaderOpt(switch, class, class)
             parseClassExtendsOpt(switch)
@@ -1722,14 +1722,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(sync, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, sync)
+        listener: beginClassDeclaration(class, null, null, sync)
         parseClass(sync, class, class, sync)
           parseClassHeaderOpt(sync, class, class)
             parseClassExtendsOpt(sync)
@@ -1750,16 +1750,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
           listener: handleIdentifier(this, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, this)
+        listener: beginClassDeclaration(class, null, null, this)
         parseClass(this, class, class, this)
           parseClassHeaderOpt(this, class, class)
             parseClassExtendsOpt(this)
@@ -1780,16 +1780,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
           listener: handleIdentifier(throw, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, throw)
+        listener: beginClassDeclaration(class, null, null, throw)
         parseClass(throw, class, class, throw)
           parseClassHeaderOpt(throw, class, class)
             parseClassExtendsOpt(throw)
@@ -1810,16 +1810,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
           listener: handleIdentifier(true, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, true)
+        listener: beginClassDeclaration(class, null, null, true)
         parseClass(true, class, class, true)
           parseClassHeaderOpt(true, class, class)
             parseClassExtendsOpt(true)
@@ -1840,16 +1840,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
           listener: handleIdentifier(try, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, try)
+        listener: beginClassDeclaration(class, null, null, try)
         parseClass(try, class, class, try)
           parseClassHeaderOpt(try, class, class)
             parseClassExtendsOpt(try)
@@ -1870,16 +1870,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
           listener: handleIdentifier(typedef, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, typedef)
+        listener: beginClassDeclaration(class, null, null, typedef)
         parseClass(typedef, class, class, typedef)
           parseClassHeaderOpt(typedef, class, class)
             parseClassExtendsOpt(typedef)
@@ -1900,16 +1900,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
           listener: handleIdentifier(var, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, var)
+        listener: beginClassDeclaration(class, null, null, var)
         parseClass(var, class, class, var)
           parseClassHeaderOpt(var, class, class)
             parseClassExtendsOpt(var)
@@ -1930,16 +1930,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
           listener: handleIdentifier(void, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, void)
+        listener: beginClassDeclaration(class, null, null, void)
         parseClass(void, class, class, void)
           parseClassHeaderOpt(void, class, class)
             parseClassExtendsOpt(void)
@@ -1960,16 +1960,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
           listener: handleIdentifier(while, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, while)
+        listener: beginClassDeclaration(class, null, null, while)
         parseClass(while, class, class, while)
           parseClassHeaderOpt(while, class, class)
             parseClassExtendsOpt(while)
@@ -1990,16 +1990,16 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
           listener: handleIdentifier(with, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, with)
+        listener: beginClassDeclaration(class, null, null, with)
         parseClass(with, class, class, with)
           parseClassHeaderOpt(with, class, class)
             parseClassExtendsOpt(with)
@@ -2020,14 +2020,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(yield, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, yield)
+        listener: beginClassDeclaration(class, null, null, yield)
         parseClass(yield, class, class, yield)
           parseClassHeaderOpt(yield, class, class)
             parseClassExtendsOpt(yield)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
index ddf5505..b29582c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
@@ -227,7 +227,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
     handleIdentifier(abstract, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, abstract)
+    beginNamedMixinApplication(class, null, null, abstract)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -245,7 +245,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
     handleIdentifier(as, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, as)
+    beginNamedMixinApplication(class, null, null, as)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -263,7 +263,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
     handleIdentifier(assert, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, assert)
+    beginNamedMixinApplication(class, null, null, assert)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -280,7 +280,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(async, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, async)
+    beginNamedMixinApplication(class, null, null, async)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -297,7 +297,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(await, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, await)
+    beginNamedMixinApplication(class, null, null, await)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -315,7 +315,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
     handleIdentifier(break, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, break)
+    beginNamedMixinApplication(class, null, null, break)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -333,7 +333,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
     handleIdentifier(case, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, case)
+    beginNamedMixinApplication(class, null, null, case)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -351,7 +351,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
     handleIdentifier(catch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, catch)
+    beginNamedMixinApplication(class, null, null, catch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -369,7 +369,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
     handleIdentifier(class, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, class)
+    beginNamedMixinApplication(class, null, null, class)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -387,7 +387,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
     handleIdentifier(const, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, const)
+    beginNamedMixinApplication(class, null, null, const)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -405,7 +405,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
     handleIdentifier(continue, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, continue)
+    beginNamedMixinApplication(class, null, null, continue)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -423,7 +423,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
     handleIdentifier(covariant, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, covariant)
+    beginNamedMixinApplication(class, null, null, covariant)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -441,7 +441,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
     handleIdentifier(default, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, default)
+    beginNamedMixinApplication(class, null, null, default)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -459,7 +459,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
     handleIdentifier(deferred, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, deferred)
+    beginNamedMixinApplication(class, null, null, deferred)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -477,7 +477,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
     handleIdentifier(do, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, do)
+    beginNamedMixinApplication(class, null, null, do)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -495,7 +495,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
     handleIdentifier(dynamic, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, dynamic)
+    beginNamedMixinApplication(class, null, null, dynamic)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -513,7 +513,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
     handleIdentifier(else, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, else)
+    beginNamedMixinApplication(class, null, null, else)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -531,7 +531,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
     handleIdentifier(enum, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, enum)
+    beginNamedMixinApplication(class, null, null, enum)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -549,7 +549,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
     handleIdentifier(export, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, export)
+    beginNamedMixinApplication(class, null, null, export)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -567,7 +567,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
     handleIdentifier(extends, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, extends)
+    beginNamedMixinApplication(class, null, null, extends)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -585,7 +585,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
     handleIdentifier(extension, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, extension)
+    beginNamedMixinApplication(class, null, null, extension)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -603,7 +603,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
     handleIdentifier(external, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, external)
+    beginNamedMixinApplication(class, null, null, external)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -621,7 +621,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
     handleIdentifier(factory, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, factory)
+    beginNamedMixinApplication(class, null, null, factory)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -639,7 +639,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
     handleIdentifier(false, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, false)
+    beginNamedMixinApplication(class, null, null, false)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -657,7 +657,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
     handleIdentifier(final, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, final)
+    beginNamedMixinApplication(class, null, null, final)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -675,7 +675,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
     handleIdentifier(finally, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, finally)
+    beginNamedMixinApplication(class, null, null, finally)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -693,7 +693,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
     handleIdentifier(for, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, for)
+    beginNamedMixinApplication(class, null, null, for)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -710,7 +710,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Function, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, Function)
+    beginNamedMixinApplication(class, null, null, Function)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -728,7 +728,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
     handleIdentifier(get, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, get)
+    beginNamedMixinApplication(class, null, null, get)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -745,7 +745,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(hide, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, hide)
+    beginNamedMixinApplication(class, null, null, hide)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -763,7 +763,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
     handleIdentifier(if, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, if)
+    beginNamedMixinApplication(class, null, null, if)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -781,7 +781,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
     handleIdentifier(implements, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, implements)
+    beginNamedMixinApplication(class, null, null, implements)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -799,7 +799,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
     handleIdentifier(import, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, import)
+    beginNamedMixinApplication(class, null, null, import)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -817,7 +817,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
     handleIdentifier(in, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, in)
+    beginNamedMixinApplication(class, null, null, in)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -834,7 +834,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(inout, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, inout)
+    beginNamedMixinApplication(class, null, null, inout)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -852,7 +852,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
     handleIdentifier(interface, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, interface)
+    beginNamedMixinApplication(class, null, null, interface)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -870,7 +870,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
     handleIdentifier(is, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, is)
+    beginNamedMixinApplication(class, null, null, is)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -888,7 +888,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, late)
+    beginNamedMixinApplication(class, null, null, late)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -906,7 +906,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
     handleIdentifier(library, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, library)
+    beginNamedMixinApplication(class, null, null, library)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -924,7 +924,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
     handleIdentifier(mixin, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, mixin)
+    beginNamedMixinApplication(class, null, null, mixin)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -941,7 +941,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(native, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, native)
+    beginNamedMixinApplication(class, null, null, native)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -959,7 +959,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
     handleIdentifier(new, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, new)
+    beginNamedMixinApplication(class, null, null, new)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -977,7 +977,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
     handleIdentifier(null, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null)
+    beginNamedMixinApplication(class, null, null, null)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -994,7 +994,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(of, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, of)
+    beginNamedMixinApplication(class, null, null, of)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1011,7 +1011,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(on, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, on)
+    beginNamedMixinApplication(class, null, null, on)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1029,7 +1029,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, operator)
+    beginNamedMixinApplication(class, null, null, operator)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1046,7 +1046,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(out, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, out)
+    beginNamedMixinApplication(class, null, null, out)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1064,7 +1064,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
     handleIdentifier(part, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, part)
+    beginNamedMixinApplication(class, null, null, part)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1081,7 +1081,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(patch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, patch)
+    beginNamedMixinApplication(class, null, null, patch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1099,7 +1099,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, required)
+    beginNamedMixinApplication(class, null, null, required)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1117,7 +1117,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
     handleIdentifier(rethrow, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, rethrow)
+    beginNamedMixinApplication(class, null, null, rethrow)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1135,7 +1135,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
     handleIdentifier(return, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, return)
+    beginNamedMixinApplication(class, null, null, return)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1153,7 +1153,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
     handleIdentifier(set, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, set)
+    beginNamedMixinApplication(class, null, null, set)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1170,7 +1170,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(show, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, show)
+    beginNamedMixinApplication(class, null, null, show)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1187,7 +1187,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(source, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, source)
+    beginNamedMixinApplication(class, null, null, source)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1205,7 +1205,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
     handleIdentifier(static, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, static)
+    beginNamedMixinApplication(class, null, null, static)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1223,7 +1223,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
     handleIdentifier(super, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, super)
+    beginNamedMixinApplication(class, null, null, super)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1241,7 +1241,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
     handleIdentifier(switch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, switch)
+    beginNamedMixinApplication(class, null, null, switch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1258,7 +1258,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(sync, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, sync)
+    beginNamedMixinApplication(class, null, null, sync)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1276,7 +1276,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
     handleIdentifier(this, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, this)
+    beginNamedMixinApplication(class, null, null, this)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1294,7 +1294,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
     handleIdentifier(throw, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, throw)
+    beginNamedMixinApplication(class, null, null, throw)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1312,7 +1312,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
     handleIdentifier(true, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, true)
+    beginNamedMixinApplication(class, null, null, true)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1330,7 +1330,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
     handleIdentifier(try, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, try)
+    beginNamedMixinApplication(class, null, null, try)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1348,7 +1348,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
     handleIdentifier(typedef, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, typedef)
+    beginNamedMixinApplication(class, null, null, typedef)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1366,7 +1366,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
     handleIdentifier(var, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, var)
+    beginNamedMixinApplication(class, null, null, var)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1384,7 +1384,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
     handleIdentifier(void, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, void)
+    beginNamedMixinApplication(class, null, null, void)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1402,7 +1402,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
     handleIdentifier(while, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, while)
+    beginNamedMixinApplication(class, null, null, while)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1420,7 +1420,7 @@
     handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
     handleIdentifier(with, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, with)
+    beginNamedMixinApplication(class, null, null, with)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1437,7 +1437,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(yield, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, yield)
+    beginNamedMixinApplication(class, null, null, yield)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
index 5e0bb61..732268f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
@@ -6,16 +6,16 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
           listener: handleIdentifier(abstract, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, abstract)
+        listener: beginNamedMixinApplication(class, null, null, abstract)
         parseNamedMixinApplication(abstract, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -35,16 +35,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
           listener: handleIdentifier(as, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, as)
+        listener: beginNamedMixinApplication(class, null, null, as)
         parseNamedMixinApplication(as, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -64,16 +64,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
           listener: handleIdentifier(assert, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, assert)
+        listener: beginNamedMixinApplication(class, null, null, assert)
         parseNamedMixinApplication(assert, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -93,14 +93,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(async, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, async)
+        listener: beginNamedMixinApplication(class, null, null, async)
         parseNamedMixinApplication(async, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -120,14 +120,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(await, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, await)
+        listener: beginNamedMixinApplication(class, null, null, await)
         parseNamedMixinApplication(await, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -147,16 +147,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
           listener: handleIdentifier(break, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, break)
+        listener: beginNamedMixinApplication(class, null, null, break)
         parseNamedMixinApplication(break, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -176,16 +176,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
           listener: handleIdentifier(case, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, case)
+        listener: beginNamedMixinApplication(class, null, null, case)
         parseNamedMixinApplication(case, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -205,16 +205,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
           listener: handleIdentifier(catch, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, catch)
+        listener: beginNamedMixinApplication(class, null, null, catch)
         parseNamedMixinApplication(catch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -234,16 +234,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
           listener: handleIdentifier(class, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, class)
+        listener: beginNamedMixinApplication(class, null, null, class)
         parseNamedMixinApplication(class, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -263,16 +263,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
           listener: handleIdentifier(const, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, const)
+        listener: beginNamedMixinApplication(class, null, null, const)
         parseNamedMixinApplication(const, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -292,16 +292,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
           listener: handleIdentifier(continue, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, continue)
+        listener: beginNamedMixinApplication(class, null, null, continue)
         parseNamedMixinApplication(continue, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -321,16 +321,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
           listener: handleIdentifier(covariant, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, covariant)
+        listener: beginNamedMixinApplication(class, null, null, covariant)
         parseNamedMixinApplication(covariant, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -350,16 +350,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
           listener: handleIdentifier(default, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, default)
+        listener: beginNamedMixinApplication(class, null, null, default)
         parseNamedMixinApplication(default, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -379,16 +379,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
           listener: handleIdentifier(deferred, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, deferred)
+        listener: beginNamedMixinApplication(class, null, null, deferred)
         parseNamedMixinApplication(deferred, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -408,16 +408,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
           listener: handleIdentifier(do, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, do)
+        listener: beginNamedMixinApplication(class, null, null, do)
         parseNamedMixinApplication(do, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -437,16 +437,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
           listener: handleIdentifier(dynamic, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, dynamic)
+        listener: beginNamedMixinApplication(class, null, null, dynamic)
         parseNamedMixinApplication(dynamic, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -466,16 +466,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
           listener: handleIdentifier(else, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, else)
+        listener: beginNamedMixinApplication(class, null, null, else)
         parseNamedMixinApplication(else, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -495,16 +495,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
           listener: handleIdentifier(enum, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, enum)
+        listener: beginNamedMixinApplication(class, null, null, enum)
         parseNamedMixinApplication(enum, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -524,16 +524,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
           listener: handleIdentifier(export, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, export)
+        listener: beginNamedMixinApplication(class, null, null, export)
         parseNamedMixinApplication(export, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -553,16 +553,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
           listener: handleIdentifier(extends, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, extends)
+        listener: beginNamedMixinApplication(class, null, null, extends)
         parseNamedMixinApplication(extends, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -582,16 +582,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
           listener: handleIdentifier(extension, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, extension)
+        listener: beginNamedMixinApplication(class, null, null, extension)
         parseNamedMixinApplication(extension, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -611,16 +611,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
           listener: handleIdentifier(external, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, external)
+        listener: beginNamedMixinApplication(class, null, null, external)
         parseNamedMixinApplication(external, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -640,16 +640,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
           listener: handleIdentifier(factory, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, factory)
+        listener: beginNamedMixinApplication(class, null, null, factory)
         parseNamedMixinApplication(factory, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -669,16 +669,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
           listener: handleIdentifier(false, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, false)
+        listener: beginNamedMixinApplication(class, null, null, false)
         parseNamedMixinApplication(false, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -698,16 +698,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
           listener: handleIdentifier(final, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, final)
+        listener: beginNamedMixinApplication(class, null, null, final)
         parseNamedMixinApplication(final, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -727,16 +727,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
           listener: handleIdentifier(finally, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, finally)
+        listener: beginNamedMixinApplication(class, null, null, finally)
         parseNamedMixinApplication(finally, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -756,16 +756,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
           listener: handleIdentifier(for, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, for)
+        listener: beginNamedMixinApplication(class, null, null, for)
         parseNamedMixinApplication(for, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -785,14 +785,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Function, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, Function)
+        listener: beginNamedMixinApplication(class, null, null, Function)
         parseNamedMixinApplication(Function, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -812,16 +812,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
           listener: handleIdentifier(get, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, get)
+        listener: beginNamedMixinApplication(class, null, null, get)
         parseNamedMixinApplication(get, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -841,14 +841,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(hide, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, hide)
+        listener: beginNamedMixinApplication(class, null, null, hide)
         parseNamedMixinApplication(hide, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -868,16 +868,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
           listener: handleIdentifier(if, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, if)
+        listener: beginNamedMixinApplication(class, null, null, if)
         parseNamedMixinApplication(if, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -897,16 +897,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
           listener: handleIdentifier(implements, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, implements)
+        listener: beginNamedMixinApplication(class, null, null, implements)
         parseNamedMixinApplication(implements, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -926,16 +926,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
           listener: handleIdentifier(import, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, import)
+        listener: beginNamedMixinApplication(class, null, null, import)
         parseNamedMixinApplication(import, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -955,16 +955,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
           listener: handleIdentifier(in, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, in)
+        listener: beginNamedMixinApplication(class, null, null, in)
         parseNamedMixinApplication(in, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -984,14 +984,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(inout, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, inout)
+        listener: beginNamedMixinApplication(class, null, null, inout)
         parseNamedMixinApplication(inout, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1011,16 +1011,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
           listener: handleIdentifier(interface, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, interface)
+        listener: beginNamedMixinApplication(class, null, null, interface)
         parseNamedMixinApplication(interface, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1040,16 +1040,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
           listener: handleIdentifier(is, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, is)
+        listener: beginNamedMixinApplication(class, null, null, is)
         parseNamedMixinApplication(is, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1069,16 +1069,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, late)
+        listener: beginNamedMixinApplication(class, null, null, late)
         parseNamedMixinApplication(late, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1098,16 +1098,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
           listener: handleIdentifier(library, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, library)
+        listener: beginNamedMixinApplication(class, null, null, library)
         parseNamedMixinApplication(library, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1127,16 +1127,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
           listener: handleIdentifier(mixin, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, mixin)
+        listener: beginNamedMixinApplication(class, null, null, mixin)
         parseNamedMixinApplication(mixin, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1156,14 +1156,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(native, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, native)
+        listener: beginNamedMixinApplication(class, null, null, native)
         parseNamedMixinApplication(native, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1183,16 +1183,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
           listener: handleIdentifier(new, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, new)
+        listener: beginNamedMixinApplication(class, null, null, new)
         parseNamedMixinApplication(new, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1212,16 +1212,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
           listener: handleIdentifier(null, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null)
+        listener: beginNamedMixinApplication(class, null, null, null)
         parseNamedMixinApplication(null, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1241,14 +1241,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(of, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, of)
+        listener: beginNamedMixinApplication(class, null, null, of)
         parseNamedMixinApplication(of, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1268,14 +1268,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(on, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, on)
+        listener: beginNamedMixinApplication(class, null, null, on)
         parseNamedMixinApplication(on, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1295,16 +1295,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, operator)
+        listener: beginNamedMixinApplication(class, null, null, operator)
         parseNamedMixinApplication(operator, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1324,14 +1324,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(out, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, out)
+        listener: beginNamedMixinApplication(class, null, null, out)
         parseNamedMixinApplication(out, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1351,16 +1351,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
           listener: handleIdentifier(part, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, part)
+        listener: beginNamedMixinApplication(class, null, null, part)
         parseNamedMixinApplication(part, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1380,14 +1380,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(patch, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, patch)
+        listener: beginNamedMixinApplication(class, null, null, patch)
         parseNamedMixinApplication(patch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1407,16 +1407,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, required)
+        listener: beginNamedMixinApplication(class, null, null, required)
         parseNamedMixinApplication(required, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1436,16 +1436,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
           listener: handleIdentifier(rethrow, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, rethrow)
+        listener: beginNamedMixinApplication(class, null, null, rethrow)
         parseNamedMixinApplication(rethrow, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1465,16 +1465,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
           listener: handleIdentifier(return, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, return)
+        listener: beginNamedMixinApplication(class, null, null, return)
         parseNamedMixinApplication(return, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1494,16 +1494,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
           listener: handleIdentifier(set, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, set)
+        listener: beginNamedMixinApplication(class, null, null, set)
         parseNamedMixinApplication(set, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1523,14 +1523,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(show, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, show)
+        listener: beginNamedMixinApplication(class, null, null, show)
         parseNamedMixinApplication(show, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1550,14 +1550,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(source, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, source)
+        listener: beginNamedMixinApplication(class, null, null, source)
         parseNamedMixinApplication(source, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1577,16 +1577,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
           listener: handleIdentifier(static, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, static)
+        listener: beginNamedMixinApplication(class, null, null, static)
         parseNamedMixinApplication(static, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1606,16 +1606,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
           listener: handleIdentifier(super, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, super)
+        listener: beginNamedMixinApplication(class, null, null, super)
         parseNamedMixinApplication(super, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1635,16 +1635,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
           listener: handleIdentifier(switch, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, switch)
+        listener: beginNamedMixinApplication(class, null, null, switch)
         parseNamedMixinApplication(switch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1664,14 +1664,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(sync, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, sync)
+        listener: beginNamedMixinApplication(class, null, null, sync)
         parseNamedMixinApplication(sync, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1691,16 +1691,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
           listener: handleIdentifier(this, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, this)
+        listener: beginNamedMixinApplication(class, null, null, this)
         parseNamedMixinApplication(this, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1720,16 +1720,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
           listener: handleIdentifier(throw, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, throw)
+        listener: beginNamedMixinApplication(class, null, null, throw)
         parseNamedMixinApplication(throw, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1749,16 +1749,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
           listener: handleIdentifier(true, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, true)
+        listener: beginNamedMixinApplication(class, null, null, true)
         parseNamedMixinApplication(true, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1778,16 +1778,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
           listener: handleIdentifier(try, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, try)
+        listener: beginNamedMixinApplication(class, null, null, try)
         parseNamedMixinApplication(try, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1807,16 +1807,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
           listener: handleIdentifier(typedef, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, typedef)
+        listener: beginNamedMixinApplication(class, null, null, typedef)
         parseNamedMixinApplication(typedef, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1836,16 +1836,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
           listener: handleIdentifier(var, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, var)
+        listener: beginNamedMixinApplication(class, null, null, var)
         parseNamedMixinApplication(var, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1865,16 +1865,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
           listener: handleIdentifier(void, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, void)
+        listener: beginNamedMixinApplication(class, null, null, void)
         parseNamedMixinApplication(void, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1894,16 +1894,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
           listener: handleIdentifier(while, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, while)
+        listener: beginNamedMixinApplication(class, null, null, while)
         parseNamedMixinApplication(while, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1923,16 +1923,16 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
           listener: handleIdentifier(with, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, with)
+        listener: beginNamedMixinApplication(class, null, null, with)
         parseNamedMixinApplication(with, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1952,14 +1952,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(yield, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, yield)
+        listener: beginNamedMixinApplication(class, null, null, yield)
         parseNamedMixinApplication(yield, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
index c531ce9..4d447d1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
@@ -20,7 +20,7 @@
     // WARNING: Reporting at eof for .
     handleIdentifier(, classOrMixinDeclaration)
     handleNoTypeVariables()
-    beginClassDeclaration(class, null, )
+    beginClassDeclaration(class, null, null, )
       handleNoType()
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
index 7f36933..64a2d2b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
@@ -6,9 +6,9 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           insertSyntheticIdentifier(class, classOrMixinDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], messageOnToken: null)
@@ -18,7 +18,7 @@
             rewriter()
           listener: handleIdentifier(, classOrMixinDeclaration)
         listener: handleNoTypeVariables()
-        listener: beginClassDeclaration(class, null, )
+        listener: beginClassDeclaration(class, null, null, )
         parseClass(, class, class, )
           parseClassHeaderOpt(, class, class)
             parseClassExtendsOpt()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
index 5319e1e..63e8b06 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -67,7 +67,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, B)
+    beginClassDeclaration(class, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
index 2084366..08cfe6a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -73,14 +73,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, B)
+        listener: beginClassDeclaration(class, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
index 57ee430..a9ee40d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
index 7943b6e..4ee602f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
index 9966ba4..78cd4a8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
index ef59ba8..f5178bd 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
index e72edce..dad6879 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
index facee11..058793d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
index c08729f..fc06fb1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
index 6b797ae..0f37588 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
index 2f106f1..e10973c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
@@ -82,7 +82,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -127,7 +127,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, B)
+    beginClassDeclaration(class, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -199,7 +199,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
index 67c819d..fc2c4c6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -83,14 +83,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, B)
+        listener: beginClassDeclaration(class, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -197,14 +197,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
index 1c4ffc0..151c812 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
index b5de8a7..4c286fe 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
index 40b87ef..673d794 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
@@ -138,7 +138,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, WrapperClass)
+    beginClassDeclaration(class, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
index 769412a..c6060ad 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
index bf58a68..a281a5c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
@@ -478,7 +478,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, WrapperClass)
+    beginClassDeclaration(class, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
index 22c9cba..75b6cd7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
index 6085b02..5b96bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
index 194b6ca..0b284d4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
@@ -49,14 +49,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
index 77d7a90..93da896 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -28,7 +28,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -53,7 +53,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -75,7 +75,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -100,7 +100,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -122,7 +122,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -147,7 +147,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -167,7 +167,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -190,7 +190,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -210,7 +210,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -233,7 +233,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -255,7 +255,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -280,7 +280,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -302,7 +302,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -327,7 +327,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -349,7 +349,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -374,7 +374,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -396,7 +396,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -421,7 +421,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -443,7 +443,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -468,7 +468,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -490,7 +490,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -515,7 +515,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -537,7 +537,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -562,7 +562,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -584,7 +584,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -609,7 +609,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -631,7 +631,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -656,7 +656,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -678,7 +678,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -703,7 +703,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -725,7 +725,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -750,7 +750,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -772,7 +772,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -797,7 +797,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -819,7 +819,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -844,7 +844,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -866,7 +866,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -891,7 +891,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -913,7 +913,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -938,7 +938,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -960,7 +960,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -985,7 +985,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1007,7 +1007,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1032,7 +1032,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1054,7 +1054,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1079,7 +1079,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1101,7 +1101,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1126,7 +1126,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1148,7 +1148,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1173,7 +1173,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1195,7 +1195,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1220,7 +1220,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1242,7 +1242,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1267,7 +1267,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1289,7 +1289,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1314,7 +1314,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1336,7 +1336,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1361,7 +1361,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1381,7 +1381,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1404,7 +1404,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1426,7 +1426,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1451,7 +1451,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1473,7 +1473,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1498,7 +1498,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1520,7 +1520,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1545,7 +1545,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1567,7 +1567,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1592,7 +1592,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1612,7 +1612,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1635,7 +1635,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1657,7 +1657,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1682,7 +1682,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1704,7 +1704,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1729,7 +1729,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1751,7 +1751,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1776,7 +1776,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1798,7 +1798,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1823,7 +1823,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1845,7 +1845,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1870,7 +1870,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1890,7 +1890,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1913,7 +1913,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1935,7 +1935,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1960,7 +1960,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1982,7 +1982,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2007,7 +2007,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2027,7 +2027,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2050,7 +2050,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2070,7 +2070,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2093,7 +2093,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2115,7 +2115,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2140,7 +2140,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2160,7 +2160,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2183,7 +2183,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2205,7 +2205,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2230,7 +2230,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2250,7 +2250,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2273,7 +2273,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2295,7 +2295,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2320,7 +2320,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2342,7 +2342,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2367,7 +2367,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2389,7 +2389,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2414,7 +2414,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2436,7 +2436,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2461,7 +2461,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2481,7 +2481,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2504,7 +2504,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2524,7 +2524,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2547,7 +2547,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2569,7 +2569,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2594,7 +2594,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2616,7 +2616,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2641,7 +2641,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2663,7 +2663,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2688,7 +2688,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2708,7 +2708,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2731,7 +2731,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2753,7 +2753,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2778,7 +2778,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2800,7 +2800,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2825,7 +2825,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2847,7 +2847,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2872,7 +2872,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2894,7 +2894,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2919,7 +2919,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2941,7 +2941,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2966,7 +2966,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -2988,7 +2988,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3013,7 +3013,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3035,7 +3035,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3103,7 +3103,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3125,7 +3125,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3150,7 +3150,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3172,7 +3172,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3197,7 +3197,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -3217,7 +3217,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
index 3ec322e..38ec0b6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
index a3ee2de..eaf2a2d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
index 5f2c8b0..ce905c8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
index 0bfc02a..74b3c11 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
index 2975c4f..fe1e36e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, B)
+    beginClassDeclaration(class, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -52,7 +52,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(M1, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, M1)
+    beginClassDeclaration(class, null, null, M1)
       handleNoType(M1)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
index ec3e1aa..86fc4d7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, B)
+        listener: beginClassDeclaration(class, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -57,14 +57,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(M1, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, M1)
+        listener: beginClassDeclaration(class, null, null, M1)
         parseClass(M1, class, class, M1)
           parseClassHeaderOpt(M1, class, class)
             parseClassExtendsOpt(M1)
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
index cf2bd6f..3f37bf0 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
index f67f847..39d1b6c 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,7 +34,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extension_type.dart.expect b/pkg/front_end/parser_testcases/extension_type.dart.expect
index 69cafad..2eb3be8 100644
--- a/pkg/front_end/parser_testcases/extension_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_type.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
index 200f4ca..e59e494 100644
--- a/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,7 +34,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
index 2d5e28f..01e24a9 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
index 8dac2d3..1394b80 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -65,7 +65,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
index a66993b..9f907a0 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -19,7 +19,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
index 8b610fd..fa98447 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -65,7 +65,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.expect b/pkg/front_end/parser_testcases/extensions/static.dart.expect
index 0a73b25..cb69c93 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -19,7 +19,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
index 9efff07..ac55bc5 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -65,7 +65,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
index 6e3a17c..8efa048 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
index c7ba3ab..ef95892 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -34,14 +34,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -65,7 +65,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, extension, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
index ea7558e..c8d6b3b 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, WrapperClass)
+    beginClassDeclaration(class, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
index 4196505..1ec01c0 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
index be1cef5..b89c4ab 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, WrapperClass)
+    beginClassDeclaration(class, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
index 7196e63..375106c 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
diff --git a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
index ef579de..1615902 100644
--- a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -37,7 +37,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -72,7 +72,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -113,7 +113,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -158,7 +158,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -203,7 +203,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -248,7 +248,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -279,7 +279,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -314,7 +314,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -355,7 +355,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -400,7 +400,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -445,7 +445,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -490,7 +490,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -533,7 +533,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -580,7 +580,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -643,7 +643,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -710,7 +710,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -767,7 +767,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -824,7 +824,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -871,7 +871,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -922,7 +922,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -979,7 +979,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1040,7 +1040,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1101,7 +1101,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
index 31e37e0..9132fd3 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
@@ -46,7 +46,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(ConfigurationService, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, ConfigurationService)
+    beginClassDeclaration(class, null, null, ConfigurationService)
       handleNoType(ConfigurationService)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -275,7 +275,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Configuration, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Configuration)
+    beginClassDeclaration(class, null, null, Configuration)
       handleNoType(Configuration)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
index ee486f9..d392486 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(ConfigurationService, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, ConfigurationService)
+        listener: beginClassDeclaration(class, null, null, ConfigurationService)
         parseClass(ConfigurationService, class, class, ConfigurationService)
           parseClassHeaderOpt(ConfigurationService, class, class)
             parseClassExtendsOpt(ConfigurationService)
@@ -511,14 +511,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Configuration, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Configuration)
+        listener: beginClassDeclaration(class, null, null, Configuration)
         parseClass(Configuration, class, class, Configuration)
           parseClassHeaderOpt(Configuration, class, class)
             parseClassExtendsOpt(Configuration)
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
index 1d825dd..94b8325 100644
--- a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
@@ -28,7 +28,7 @@
               listener: endArguments(1, (, ))
         listener: endMetadata(@, null, typedef)
       listener: endMetadataStar(1)
-    parseTopLevelKeywordDeclaration(), typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(), typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(), typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.expect b/pkg/front_end/parser_testcases/general/metadata.dart.expect
index 591d9e1..b86186a 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.expect
@@ -107,7 +107,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, X)
+    beginClassDeclaration(class, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -939,7 +939,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Y)
+    beginClassDeclaration(class, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
index 676c00f..3432673 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
@@ -228,14 +228,14 @@
               listener: endArguments(1, (, ))
         listener: endMetadata(@, ., class)
       listener: endMetadataStar(10)
-    parseTopLevelKeywordDeclaration(), class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(), class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(), class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, X)
+        listener: beginClassDeclaration(class, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -256,7 +256,7 @@
     parseMetadataStar(})
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(}, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -343,7 +343,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -442,7 +442,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -547,7 +547,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -664,7 +664,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -796,7 +796,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -934,7 +934,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1063,7 +1063,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1201,7 +1201,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1342,7 +1342,7 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
@@ -1713,14 +1713,14 @@
               listener: endArguments(1, (, ))
         listener: endMetadata(@, ., class)
       listener: endMetadataStar(9)
-    parseTopLevelKeywordDeclaration(), class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(), class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(), class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Y)
+        listener: beginClassDeclaration(class, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
index 988d84a..419693a 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
@@ -46,7 +46,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -147,7 +147,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(D, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, D)
+    beginClassDeclaration(class, null, null, D)
       handleNoType(D)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
index a0d0817..5976ef9 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -233,14 +233,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(D, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, D)
+        listener: beginClassDeclaration(class, null, null, D)
         parseClass(D, class, class, D)
           parseClassHeaderOpt(D, class, class)
             parseClassExtendsOpt(D)
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
index 7a98e55..5c996b6 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
index 150a67f..21ad05a 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
index 220fb22..52352ee 100644
--- a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
@@ -11,7 +11,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, operator)
+    beginClassDeclaration(class, null, null, operator)
       handleNoType(operator)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
index ae300e1..710f8db 100644
--- a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
@@ -6,16 +6,16 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, operator)
+        listener: beginClassDeclaration(class, null, null, operator)
         parseClass(operator, class, class, operator)
           parseClassHeaderOpt(operator, class, class)
             parseClassExtendsOpt(operator)
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart b/pkg/front_end/parser_testcases/macros/macro_class.dart
new file mode 100644
index 0000000..02bfe1f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart
@@ -0,0 +1,4 @@
+macro class Class {}
+abstract macro class Class {}
+macro class Class = Object with Mixin;
+abstract macro class Class = Object with Mixin;
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart.expect b/pkg/front_end/parser_testcases/macros/macro_class.dart.expect
new file mode 100644
index 0000000..3198253
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart.expect
@@ -0,0 +1,66 @@
+beginCompilationUnit(macro)
+  beginMetadataStar(macro)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, macro, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(abstract, abstract, macro, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(abstract, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(abstract, })
+  endTopLevelDeclaration(macro)
+  beginMetadataStar(macro)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, macro, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(abstract, abstract, macro, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(abstract, class, =, null, ;)
+  endTopLevelDeclaration()
+endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect b/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect
new file mode 100644
index 0000000..08e38d8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect
@@ -0,0 +1,118 @@
+parseUnit(macro)
+  skipErrorTokens(macro)
+  listener: beginCompilationUnit(macro)
+  syntheticPreviousToken(macro)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(macro)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, macro, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(, macro)
+      parseClassOrNamedMixinApplication(null, macro, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, macro, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, macro, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, macro)
+        parseTopLevelKeywordModifiers(abstract, macro)
+      parseClassOrNamedMixinApplication(abstract, macro, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(abstract, abstract, macro, Class)
+        parseClass(Class, abstract, class, Class)
+          parseClassHeaderOpt(Class, abstract, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(abstract, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(abstract, })
+  listener: endTopLevelDeclaration(macro)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(macro)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, macro, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(}, macro)
+      parseClassOrNamedMixinApplication(null, macro, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, macro, Class)
+        parseNamedMixinApplication(Class, class, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, macro, Instance of 'DirectiveContext')
+      parseClassDeclarationModifiers(;, macro)
+        parseTopLevelKeywordModifiers(abstract, macro)
+      parseClassOrNamedMixinApplication(abstract, macro, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(abstract, abstract, macro, Class)
+        parseNamedMixinApplication(Class, abstract, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(abstract, class, =, null, ;)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(macro)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart.parser.expect b/pkg/front_end/parser_testcases/macros/macro_class.dart.parser.expect
new file mode 100644
index 0000000..cdcf2eb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart.parser.expect
@@ -0,0 +1,9 @@
+macro class Class {}
+abstract macro class Class {}
+macro class Class = Object with Mixin;
+abstract macro class Class = Object with Mixin;
+
+macro[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+abstract[KeywordToken] macro[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+macro[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+abstract[KeywordToken] macro[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart.scanner.expect b/pkg/front_end/parser_testcases/macros/macro_class.dart.scanner.expect
new file mode 100644
index 0000000..cdcf2eb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart.scanner.expect
@@ -0,0 +1,9 @@
+macro class Class {}
+abstract macro class Class {}
+macro class Class = Object with Mixin;
+abstract macro class Class = Object with Mixin;
+
+macro[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+abstract[KeywordToken] macro[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+macro[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+abstract[KeywordToken] macro[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
index 431b3ea..048ba71 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
@@ -58,7 +58,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, C)
+    beginClassDeclaration(abstract, abstract, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -170,7 +170,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Bar, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, Bar)
+    beginClassDeclaration(abstract, abstract, null, Bar)
       handleNoType(Bar)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
index 0dad422..525c27c 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
@@ -6,15 +6,15 @@
     parseMetadataStar()
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, class)
+      parseClassOrNamedMixinApplication(abstract, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, C)
+        listener: beginClassDeclaration(abstract, abstract, null, C)
         parseClass(C, abstract, class, C)
           parseClassHeaderOpt(C, abstract, class)
             parseClassExtendsOpt(C)
@@ -199,15 +199,15 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, class)
+      parseClassOrNamedMixinApplication(abstract, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Bar, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, Bar)
+        listener: beginClassDeclaration(abstract, abstract, null, Bar)
         parseClass(Bar, abstract, class, Bar)
           parseClassHeaderOpt(Bar, abstract, class)
             parseClassExtendsOpt(Bar)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
index 0f039f2..1542fd5 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
@@ -64,7 +64,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
index b6e296e..23beab2 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
@@ -42,14 +42,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
index ff7df27..d9f84e6 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
@@ -60,7 +60,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
index b3d9581..c5b6907 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
@@ -73,14 +73,14 @@
     parseMetadataStar(;)
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
index e8f8cc3..9d5ae52 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
index 48f91db..4271b3d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
index 0917000..c583b3c 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
index fb8706d..4124e8f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
index 3928968..174b591 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, X)
+    beginClassDeclaration(class, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
index dbb38a1..281f0c0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, X)
+        listener: beginClassDeclaration(class, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
index 000e5f1..33dcf4a 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, X)
+    beginClassDeclaration(class, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
index 390d560..167db06 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, X)
+        listener: beginClassDeclaration(class, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
index c8d1dbb..507ba0a 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
index d9d2694..2c7dd9e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
index 5ee07df..dc9c09c 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
index 6458925..b8addec 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
index a29e8f2..b3f7815 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
index da73524..884d7c4 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
index 1d39a3c..483e3af 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
index 6a80fc4..1b44701 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
index a8f4c2d..a5a1d9f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
index b03cb1b..a2fe16d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
index d9b3888..151beb8 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
index 7ac308d..ea077fe 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
index 627e902..3a0663e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
@@ -72,7 +72,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
index fd8e6dc..6ade11d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
@@ -186,14 +186,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
index a4fad4a..c107cbf 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
@@ -308,7 +308,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Order, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Order)
+    beginClassDeclaration(class, null, null, Order)
       handleNoType(Order)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
index 319ea20..263bcd9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
@@ -634,14 +634,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Order, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Order)
+        listener: beginClassDeclaration(class, null, null, Order)
         parseClass(Order, class, class, Order)
           parseClassHeaderOpt(Order, class, class)
             parseClassExtendsOpt(Order)
diff --git a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
index 00eb347..ec45784 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
@@ -123,7 +123,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, X)
+    beginClassDeclaration(class, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -161,7 +161,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Y)
+    beginClassDeclaration(class, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
index 362c55c..8fb9358 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
@@ -325,14 +325,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, X)
+        listener: beginClassDeclaration(class, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -417,14 +417,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Y)
+        listener: beginClassDeclaration(class, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
index e528774..7d1c8bd 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
@@ -141,7 +141,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, X)
+    beginClassDeclaration(class, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -179,7 +179,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Y)
+    beginClassDeclaration(class, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
index a61b867..7c01aa3 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
@@ -374,14 +374,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, X)
+        listener: beginClassDeclaration(class, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -466,14 +466,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Y)
+        listener: beginClassDeclaration(class, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
index 45f4ec7..92ef663 100644
--- a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Class1, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Class1)
+    beginClassDeclaration(class, null, null, Class1)
       handleNoType(Class1)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
index fa8e973..d9b1e75 100644
--- a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class1, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Class1)
+        listener: beginClassDeclaration(class, null, null, Class1)
         parseClass(Class1, class, class, Class1)
           parseClassHeaderOpt(Class1, class, class)
             parseClassExtendsOpt(Class1)
diff --git a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
index b2d3c4d..8f3bab8 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
@@ -123,7 +123,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, X)
+    beginClassDeclaration(class, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -161,7 +161,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Y)
+    beginClassDeclaration(class, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
index 84da6c5..8506b7e 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
@@ -325,14 +325,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, X)
+        listener: beginClassDeclaration(class, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -417,14 +417,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Y)
+        listener: beginClassDeclaration(class, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
index 8af1629..9bd3e32 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
@@ -134,7 +134,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, X)
+    beginClassDeclaration(class, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -172,7 +172,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Y)
+    beginClassDeclaration(class, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
index a184fd5..7523c1c 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
@@ -341,14 +341,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, X)
+        listener: beginClassDeclaration(class, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -433,14 +433,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Y)
+        listener: beginClassDeclaration(class, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
index e5eb201..ded8c58 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
index 823d3fc..e396b6a 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
index df508f2..5f001f3 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
index 30851c1..6f0f152 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
index c29258b..80b04fe 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
@@ -94,7 +94,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(abstract, abstract, Foo)
+    beginClassDeclaration(abstract, abstract, null, Foo)
       handleIdentifier(List, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
index 1917d68..3a379e4 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
@@ -6,7 +6,7 @@
     parseMetadataStar()
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, extension, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, extension, null, Instance of 'DirectiveContext')
       parseTopLevelKeywordModifiers(, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
@@ -206,15 +206,15 @@
     parseMetadataStar(})
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
         parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, class)
+      parseClassOrNamedMixinApplication(abstract, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(abstract, abstract, Foo)
+        listener: beginClassDeclaration(abstract, abstract, null, Foo)
         parseClass(Foo, abstract, class, Foo)
           parseClassHeaderOpt(Foo, abstract, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
index bf983c2..667962a 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, late)
+    beginClassDeclaration(class, null, null, late)
       handleNoType(late)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, required)
+    beginClassDeclaration(class, null, null, required)
       handleNoType(required)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
index 2a31e5e..c89a6b0 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, late)
+        listener: beginClassDeclaration(class, null, null, late)
         parseClass(late, class, class, late)
           parseClassHeaderOpt(late, class, class)
             parseClassExtendsOpt(late)
@@ -71,14 +71,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, required)
+        listener: beginClassDeclaration(class, null, null, required)
         parseClass(required, class, class, required)
           parseClassHeaderOpt(required, class, class)
             parseClassExtendsOpt(required)
@@ -136,14 +136,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
index 73ec228..d54d704 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Xlate, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Xlate)
+    beginClassDeclaration(class, null, null, Xlate)
       handleNoType(Xlate)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Xrequired, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Xrequired)
+    beginClassDeclaration(class, null, null, Xrequired)
       handleNoType(Xrequired)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, C)
+    beginClassDeclaration(class, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
index 06103bb..b03a234 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
@@ -6,14 +6,14 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Xlate, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Xlate)
+        listener: beginClassDeclaration(class, null, null, Xlate)
         parseClass(Xlate, class, class, Xlate)
           parseClassHeaderOpt(Xlate, class, class)
             parseClassExtendsOpt(Xlate)
@@ -71,14 +71,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Xrequired, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Xrequired)
+        listener: beginClassDeclaration(class, null, null, Xrequired)
         parseClass(Xrequired, class, class, Xrequired)
           parseClassHeaderOpt(Xrequired, class, class)
             parseClassExtendsOpt(Xrequired)
@@ -136,14 +136,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, C)
+        listener: beginClassDeclaration(class, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
index 6489670..5c1d956 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
@@ -12,7 +12,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, A)
+    beginClassDeclaration(class, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -27,7 +27,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables(implements)
-    beginClassDeclaration(class, null, B)
+    beginClassDeclaration(class, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
index 574de45..16f17a7 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
@@ -6,9 +6,9 @@
     parseMetadataStar()
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -21,7 +21,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, A)
+        listener: beginClassDeclaration(class, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -42,14 +42,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables(implements)
-        listener: beginClassDeclaration(class, null, B)
+        listener: beginClassDeclaration(class, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
index 025b95b..285a104 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
@@ -246,7 +246,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
index 4029ed4..3841fa7 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
@@ -335,14 +335,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
index 9835fbf..fb681d6 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
@@ -125,7 +125,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, Foo)
+    beginClassDeclaration(class, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
index 8a6632f..f214652 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
@@ -253,14 +253,14 @@
     parseMetadataStar(})
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
       parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, class)
+      parseClassOrNamedMixinApplication(null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, Foo)
+        listener: beginClassDeclaration(class, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index b72f70d..65979d9 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -199,11 +199,17 @@
   }
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     seen(begin);
     seen(abstractToken);
+    seen(macroToken);
     seen(name);
-    doPrint('beginClassDeclaration(' '$begin, ' '$abstractToken, ' '$name)');
+    doPrint('beginClassDeclaration('
+        '$begin, '
+        '$abstractToken, '
+        '$macroToken, '
+        '$name)');
     indent++;
   }
 
@@ -1017,12 +1023,16 @@
 
   @override
   void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token name) {
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     seen(begin);
     seen(abstractToken);
+    seen(macroToken);
     seen(name);
-    doPrint(
-        'beginNamedMixinApplication(' '$begin, ' '$abstractToken, ' '$name)');
+    doPrint('beginNamedMixinApplication('
+        '$begin, '
+        '$abstractToken, '
+        '$macroToken, '
+        '$name)');
     indent++;
   }
 
diff --git a/pkg/front_end/test/parser_test_listener_creator.dart b/pkg/front_end/test/parser_test_listener_creator.dart
index fab26f9..61ba320 100644
--- a/pkg/front_end/test/parser_test_listener_creator.dart
+++ b/pkg/front_end/test/parser_test_listener_creator.dart
@@ -126,7 +126,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index 38d64e8..9a545e4 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -189,15 +189,16 @@
   }
 
   @override
-  Token parseTopLevelKeywordDeclaration(
-      Token start, Token keyword, DirectiveContext? directiveState) {
+  Token parseTopLevelKeywordDeclaration(Token start, Token keyword,
+      Token? macroToken, DirectiveContext? directiveState) {
     doPrint('parseTopLevelKeywordDeclaration('
         '$start, '
         '$keyword, '
+        '$macroToken, '
         '$directiveState)');
     indent++;
-    var result =
-        super.parseTopLevelKeywordDeclaration(start, keyword, directiveState);
+    var result = super.parseTopLevelKeywordDeclaration(
+        start, keyword, macroToken, directiveState);
     indent--;
     return result;
   }
@@ -583,13 +584,14 @@
 
   @override
   Token parseClassOrNamedMixinApplication(
-      Token? abstractToken, Token classKeyword) {
+      Token? abstractToken, Token? macroToken, Token classKeyword) {
     doPrint('parseClassOrNamedMixinApplication('
         '$abstractToken, '
+        '$macroToken, '
         '$classKeyword)');
     indent++;
-    var result =
-        super.parseClassOrNamedMixinApplication(abstractToken, classKeyword);
+    var result = super.parseClassOrNamedMixinApplication(
+        abstractToken, macroToken, classKeyword);
     indent--;
     return result;
   }
diff --git a/pkg/front_end/test/parser_test_parser_creator.dart b/pkg/front_end/test/parser_test_parser_creator.dart
index 32cb010..37c6c0c 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -111,7 +111,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     if (name.lexeme == "Parser") insideParserClass = true;
   }
 
diff --git a/pkg/front_end/testcases/general/macro_class.dart b/pkg/front_end/testcases/general/macro_class.dart
new file mode 100644
index 0000000..36ad13f
--- /dev/null
+++ b/pkg/front_end/testcases/general/macro_class.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Super {}
+mixin Mixin {}
+
+macro class Class1 {}
+abstract macro class Class2 {}
+macro class Class3 = Super with Mixin;
+abstract macro class Class4 = Super with Mixin;
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/macro_class.dart.textual_outline.expect b/pkg/front_end/testcases/general/macro_class.dart.textual_outline.expect
new file mode 100644
index 0000000..d33df1d
--- /dev/null
+++ b/pkg/front_end/testcases/general/macro_class.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+class Super {}
+mixin Mixin {}
+macro
+class Class1 {}
+abstract macro class Class2 {}
+macro
+class Class3 = Super with Mixin;
+abstract macro class Class4 = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.expect
new file mode 100644
index 0000000..5a61151
--- /dev/null
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// macro class Class1 {}
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// abstract macro class Class2 {}
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// macro class Class3 = Super with Mixin;
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// abstract macro class Class4 = Super with Mixin;
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
new file mode 100644
index 0000000..5a61151
--- /dev/null
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// macro class Class1 {}
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// abstract macro class Class2 {}
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// macro class Class3 = Super with Mixin;
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// abstract macro class Class4 = Super with Mixin;
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
new file mode 100644
index 0000000..13e7bcc
--- /dev/null
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// macro class Class1 {}
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// abstract macro class Class2 {}
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// macro class Class3 = Super with Mixin;
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// abstract macro class Class4 = Super with Mixin;
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
new file mode 100644
index 0000000..506e808
--- /dev/null
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// macro class Class1 {}
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// abstract macro class Class2 {}
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// macro class Class3 = Super with Mixin;
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// abstract macro class Class4 = Super with Mixin;
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/folder.options b/pkg/front_end/testcases/macros/folder.options
new file mode 100644
index 0000000..05bef8b
--- /dev/null
+++ b/pkg/front_end/testcases/macros/folder.options
@@ -0,0 +1 @@
+--enable-experiment=macros
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/macro_class.dart b/pkg/front_end/testcases/macros/macro_class.dart
new file mode 100644
index 0000000..36ad13f
--- /dev/null
+++ b/pkg/front_end/testcases/macros/macro_class.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Super {}
+mixin Mixin {}
+
+macro class Class1 {}
+abstract macro class Class2 {}
+macro class Class3 = Super with Mixin;
+abstract macro class Class4 = Super with Mixin;
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/macro_class.dart.strong.expect b/pkg/front_end/testcases/macros/macro_class.dart.strong.expect
new file mode 100644
index 0000000..31fac3d
--- /dev/null
+++ b/pkg/front_end/testcases/macros/macro_class.dart.strong.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/macro_class.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/macro_class.dart.strong.transformed.expect
new file mode 100644
index 0000000..1213172
--- /dev/null
+++ b/pkg/front_end/testcases/macros/macro_class.dart.strong.transformed.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/macro_class.dart.textual_outline.expect b/pkg/front_end/testcases/macros/macro_class.dart.textual_outline.expect
new file mode 100644
index 0000000..d33df1d
--- /dev/null
+++ b/pkg/front_end/testcases/macros/macro_class.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+class Super {}
+mixin Mixin {}
+macro
+class Class1 {}
+abstract macro class Class2 {}
+macro
+class Class3 = Super with Mixin;
+abstract macro class Class4 = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/macros/macro_class.dart.weak.expect b/pkg/front_end/testcases/macros/macro_class.dart.weak.expect
new file mode 100644
index 0000000..31fac3d
--- /dev/null
+++ b/pkg/front_end/testcases/macros/macro_class.dart.weak.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/macro_class.dart.weak.modular.expect b/pkg/front_end/testcases/macros/macro_class.dart.weak.modular.expect
new file mode 100644
index 0000000..31fac3d
--- /dev/null
+++ b/pkg/front_end/testcases/macros/macro_class.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/macro_class.dart.weak.outline.expect b/pkg/front_end/testcases/macros/macro_class.dart.weak.outline.expect
new file mode 100644
index 0000000..982b26e
--- /dev/null
+++ b/pkg/front_end/testcases/macros/macro_class.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/macros/macro_class.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/macro_class.dart.weak.transformed.expect
new file mode 100644
index 0000000..1213172
--- /dev/null
+++ b/pkg/front_end/testcases/macros/macro_class.dart.weak.transformed.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+abstract class Class4 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 5df5fee..5ebd7e2 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -92,6 +92,7 @@
 general/issue47495: FormatterCrash
 general/issue47728_2: FormatterCrash
 general/issue47728_3: FormatterCrash
+general/macro_class: FormatterCrash
 general/many_errors: FormatterCrash
 general/missing_prefix_name: FormatterCrash
 general/new_as_selector: FormatterCrash
@@ -138,6 +139,7 @@
 late_lowering/override_getter_setter: FormatterCrash
 late_lowering/skip_late_final_uninitialized_instance_fields/main: FormatterCrash
 late_lowering/uninitialized_non_nullable_late_fields: FormatterCrash
+macros/macro_class: FormatterCrash
 named_arguments_anywhere/redirecting_constructor_initializers: FormatterCrash
 nnbd/abstract_field_errors: FormatterCrash
 nnbd/covariant_late_field: FormatterCrash
diff --git a/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart b/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
index b9999d6..ff1f22e 100644
--- a/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
+++ b/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
@@ -103,7 +103,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(Token begin, Token? abstractToken, Token name) {
+  void beginClassDeclaration(
+      Token begin, Token? abstractToken, Token? macroToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
diff --git a/pkg/test_runner/analysis_options.yaml b/pkg/test_runner/analysis_options.yaml
index 406b0a1..e6a5912 100644
--- a/pkg/test_runner/analysis_options.yaml
+++ b/pkg/test_runner/analysis_options.yaml
@@ -1,6 +1,6 @@
 analyzer:
-  strong-mode:
-    implicit-casts: false
+  language:
+    strict-casts: true
 linter:
   rules:
     # TODO: Enable these once the existing violations have been fixed.
diff --git a/pkg/test_runner/lib/src/command_output.dart b/pkg/test_runner/lib/src/command_output.dart
index 994427b..cc65097 100644
--- a/pkg/test_runner/lib/src/command_output.dart
+++ b/pkg/test_runner/lib/src/command_output.dart
@@ -174,10 +174,12 @@
       var events = jsonDecode(content);
       if (events != null) {
         validate("Message must be a List", events is List);
+        // TODO(srawlins): This will promote `events` in null safety.
+        var eventList = events as List<dynamic>;
 
         var messagesByType = {for (var type in _allowedTypes) type: <String>[]};
 
-        for (var entry in events) {
+        for (var entry in eventList) {
           validate("Entry must be a Map", entry is Map);
 
           var type = entry['type'];
@@ -207,7 +209,7 @@
         }
 
         return BrowserTestJsonResult(
-            _getOutcome(messagesByType), dom, events as List<dynamic>);
+            _getOutcome(messagesByType), dom, eventList);
       }
     } catch (error) {
       // If something goes wrong, we know the content was not in the correct
diff --git a/pkg/test_runner/lib/src/options.dart b/pkg/test_runner/lib/src/options.dart
index bfe16f6..dccb5f4 100644
--- a/pkg/test_runner/lib/src/options.dart
+++ b/pkg/test_runner/lib/src/options.dart
@@ -896,7 +896,7 @@
       }
 
       var excludeSuites = configuration['exclude_suite'] != null
-          ? configuration['exclude_suite'].split(',')
+          ? (configuration['exclude_suite'] as String).split(',')
           : [];
       for (var exclude in excludeSuites) {
         if ((selectors as List).contains(exclude)) {
diff --git a/pkg/vm_service/pubspec.yaml b/pkg/vm_service/pubspec.yaml
index d613713..a01b273 100644
--- a/pkg/vm_service/pubspec.yaml
+++ b/pkg/vm_service/pubspec.yaml
@@ -3,7 +3,7 @@
   A library to communicate with a service implementing the Dart VM
   service protocol.
 
-version: 8.0.0
+version: 8.1.0
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/vm_service
 
diff --git a/tools/VERSION b/tools/VERSION
index 041000b..53d046d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 16
 PATCH 0
-PRERELEASE 124
+PRERELEASE 125
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 9aa634d..3ca32be 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -131,6 +131,9 @@
   super-parameters:
     help: "Super-Initializer Parameters"
 
+  macros:
+    help: "Static meta-programming"
+
 # Experiment flag only used for testing.
   test-experiment:
     help: >-