Augment. Parse enum constant augmentations, allow just ';' before methods.

I was unable to update the parser to avoid requirement for ';' at all.
Ideally we should be able to parse:
```
enum E {
  void foo()
}
```

Change-Id: I7edba99454b965407c3fb402642933b3d8d6bb7c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/363106
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
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 9c4faeb..43fd533 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -769,8 +769,8 @@
   }
 
   @override
-  void handleEnumElement(Token beginToken) {
-    listener?.handleEnumElement(beginToken);
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
+    listener?.handleEnumElement(beginToken, augmentToken);
   }
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index 77ca3ab..4259ec0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -403,7 +403,7 @@
   /// Handle the enum element. Substructures:
   /// - Metadata
   /// - Enum value (identifier)
-  void handleEnumElement(Token beginToken) {
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
     logEvent("EnumElement");
   }
 
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 a16bddb..e37bd9d 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -338,9 +338,15 @@
   /// [parsePrimaryPattern] and [parsePattern].
   bool isLastPatternAllowedInsideUnaryPattern = false;
 
-  Parser(this.listener,
-      {this.useImplicitCreationExpression = true, this.allowPatterns = false})
-      : assert(listener != null); // ignore:unnecessary_null_comparison
+  /// Indicates whether the macros feature is enabled.
+  final bool enableFeatureMacros;
+
+  Parser(
+    this.listener, {
+    this.useImplicitCreationExpression = true,
+    this.allowPatterns = false,
+    this.enableFeatureMacros = false,
+  }) : assert(listener != null); // ignore:unnecessary_null_comparison
 
   /// Executes [callback]; however if `this` is the `TestParser` (from
   /// `pkg/front_end/test/parser_test_parser.dart`) then no output is printed
@@ -2368,7 +2374,7 @@
         Token next = token.next!;
         if (optional('}', next) || optional(';', next)) {
           token = next;
-          if (elementCount == 0) {
+          if (elementCount == 0 && !enableFeatureMacros) {
             reportRecoverableError(token, codes.messageEnumDeclarationEmpty);
           }
           break;
@@ -2566,6 +2572,13 @@
   Token parseEnumElement(Token token) {
     Token beginToken = token;
     token = parseMetadataStar(token);
+
+    Token? augmentToken;
+    if (optional('augment', token.next!)) {
+      augmentToken = token.next!;
+      token = token.next!;
+    }
+
     token = ensureIdentifier(token, IdentifierContext.enumValueDeclaration);
     bool hasTypeArgumentsOrDot = false;
     {
@@ -2600,7 +2613,7 @@
     } else {
       listener.handleNoArguments(token);
     }
-    listener.handleEnumElement(beginToken);
+    listener.handleEnumElement(beginToken, augmentToken);
     return token;
   }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_enum_constant_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_enum_constant_test.dart
index ea3ee0b..7971cb5 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_enum_constant_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_enum_constant_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -174,10 +173,7 @@
 void f() {
   E.ONE;
 }
-''',
-        errorFilter: (e) =>
-            e.errorCode == CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT,
-        matchFixMessage: "Add enum constant 'ONE'");
+''');
   }
 
   Future<void> test_unnamed() async {
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index f913d7c..8e29491 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -5509,6 +5509,10 @@
   /// doesn't provide any explicit arguments.
   EnumConstantArguments? get arguments;
 
+  /// The `augment` keyword, or `null` if the keyword was absent.
+  @experimental
+  Token? get augmentKeyword;
+
   /// The constructor that is invoked by this enum constant, or `null` if the
   /// AST structure hasn't been resolved, or if the constructor couldn't be
   /// resolved.
@@ -5524,6 +5528,9 @@
 final class EnumConstantDeclarationImpl extends DeclarationImpl
     implements EnumConstantDeclaration {
   @override
+  final Token? augmentKeyword;
+
+  @override
   final Token name;
 
   @override
@@ -5542,6 +5549,7 @@
   EnumConstantDeclarationImpl({
     required super.comment,
     required super.metadata,
+    required this.augmentKeyword,
     required this.name,
     required this.arguments,
   }) {
@@ -5552,10 +5560,11 @@
   Token get endToken => arguments?.endToken ?? name;
 
   @override
-  Token get firstTokenAfterCommentAndMetadata => name;
+  Token get firstTokenAfterCommentAndMetadata => augmentKeyword ?? name;
 
   @override
   ChildEntities get _childEntities => super._childEntities
+    ..addToken('augmentKeyword', augmentKeyword)
     ..addToken('name', name)
     ..addNode('arguments', arguments);
 
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index ccf32fd..32bc385 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -4062,7 +4062,7 @@
   }
 
   @override
-  void handleEnumElement(Token beginToken) {
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
     debugEvent("EnumElement");
     var tmpArguments = pop() as MethodInvocationImpl?;
     var tmpConstructor = pop() as ConstructorNameImpl?;
@@ -4103,6 +4103,7 @@
       constant = EnumConstantDeclarationImpl(
         comment: constant.documentationComment,
         metadata: constant.metadata,
+        augmentKeyword: augmentToken,
         name: constant.name,
         arguments: EnumConstantArgumentsImpl(
           typeArguments: typeArguments,
@@ -4449,6 +4450,7 @@
         EnumConstantDeclarationImpl(
           comment: comment,
           metadata: metadata,
+          augmentKeyword: null,
           name: token,
           arguments: null,
         ),
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 0ac49ee..3c47906 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -38,8 +38,11 @@
           featureSet,
           lineInfo,
         ) {
-    fastaParser = fasta.Parser(astBuilder,
-        allowPatterns: featureSet.isEnabled(Feature.patterns));
+    fastaParser = fasta.Parser(
+      astBuilder,
+      allowPatterns: featureSet.isEnabled(Feature.patterns),
+      enableFeatureMacros: featureSet.isEnabled(Feature.macros),
+    );
     astBuilder.parser = fastaParser;
     astBuilder.allowNativeClause = allowNativeClause;
   }
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index 632226b..c2deb49 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -1399,9 +1399,9 @@
   }
 
   @override
-  void handleEnumElement(Token beginToken) {
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
     expectIn('Enum');
-    super.handleEnumElement(beginToken);
+    super.handleEnumElement(beginToken, augmentToken);
   }
 
   @override
diff --git a/pkg/analyzer/test/generated/parser_test_base.dart b/pkg/analyzer/test/generated/parser_test_base.dart
index 823b703..f8c8e4c 100644
--- a/pkg/analyzer/test/generated/parser_test_base.dart
+++ b/pkg/analyzer/test/generated/parser_test_base.dart
@@ -395,8 +395,11 @@
     ErrorReporter errorReporter = ErrorReporter(listener, source);
     AstBuilder astBuilder = AstBuilder(errorReporter, source.uri, true,
         featureSet!, LineInfo.fromContent(content));
-    fasta.Parser parser = fasta.Parser(astBuilder,
-        allowPatterns: featureSet!.isEnabled(Feature.patterns));
+    fasta.Parser parser = fasta.Parser(
+      astBuilder,
+      allowPatterns: featureSet!.isEnabled(Feature.patterns),
+      enableFeatureMacros: featureSet!.isEnabled(Feature.macros),
+    );
     astBuilder.parser = parser;
     astBuilder.allowNativeClause = allowNativeClause;
     parser.parseUnit(_fastaTokens);
diff --git a/pkg/analyzer/test/src/dart/parser/enum_test.dart b/pkg/analyzer/test/src/dart/parser/enum_test.dart
index 131f857..06f8434 100644
--- a/pkg/analyzer/test/src/dart/parser/enum_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/enum_test.dart
@@ -14,11 +14,13 @@
 
 @reflectiveTest
 class EnumDeclarationParserTest extends ParserDiagnosticsTest {
-  test_augment() {
+  test_augment_constant_add() {
     var parseResult = parseStringWithErrors(r'''
 augment library 'a.dart';
 
-augment enum E {bar}
+augment enum E {
+  v
+}
 ''');
     parseResult.assertNoErrors();
 
@@ -31,7 +33,138 @@
   leftBracket: {
   constants
     EnumConstantDeclaration
-      name: bar
+      name: v
+  rightBracket: }
+''');
+  }
+
+  test_augment_constant_augment_withConstructor() {
+    var parseResult = parseStringWithErrors(r'''
+augment library 'a.dart';
+
+augment enum E {
+  augment v.foo()
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleEnumDeclaration;
+    assertParsedNodeText(node, r'''
+EnumDeclaration
+  augmentKeyword: augment
+  enumKeyword: enum
+  name: E
+  leftBracket: {
+  constants
+    EnumConstantDeclaration
+      augmentKeyword: augment
+      name: v
+      arguments: EnumConstantArguments
+        constructorSelector: ConstructorSelector
+          period: .
+          name: SimpleIdentifier
+            token: foo
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+  rightBracket: }
+''');
+  }
+
+  test_augment_noConstants_semicolon_method() {
+    var parseResult = parseStringWithErrors(r'''
+augment library 'a.dart';
+
+augment enum E {;
+  void foo() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleEnumDeclaration;
+    assertParsedNodeText(node, r'''
+EnumDeclaration
+  augmentKeyword: augment
+  enumKeyword: enum
+  name: E
+  leftBracket: {
+  semicolon: ;
+  members
+    MethodDeclaration
+      returnType: NamedType
+        name: void
+      name: foo
+      parameters: FormalParameterList
+        leftParenthesis: (
+        rightParenthesis: )
+      body: BlockFunctionBody
+        block: Block
+          leftBracket: {
+          rightBracket: }
+  rightBracket: }
+''');
+  }
+
+  test_declaration_empty() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleEnumDeclaration;
+    assertParsedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  name: E
+  leftBracket: {
+  rightBracket: }
+''');
+  }
+
+  test_declaration_noConstants_semicolon() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {;}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleEnumDeclaration;
+    assertParsedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  name: E
+  leftBracket: {
+  semicolon: ;
+  rightBracket: }
+''');
+  }
+
+  test_declaration_noConstants_semicolon_method() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {;
+  void foo() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleEnumDeclaration;
+    assertParsedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  name: E
+  leftBracket: {
+  semicolon: ;
+  members
+    MethodDeclaration
+      returnType: NamedType
+        name: void
+      name: foo
+      parameters: FormalParameterList
+        leftParenthesis: (
+        rightParenthesis: )
+      body: BlockFunctionBody
+        block: Block
+          leftBracket: {
+          rightBracket: }
   rightBracket: }
 ''');
   }
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index e445d5a..21b41c0 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -417,7 +417,7 @@
   }
 
   @override
-  void handleEnumElement(Token beginToken) {
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
     debugEvent("EnumElement");
     pop(); // Arguments.
     pop(); // Type arguments.
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
index d600e71..3c5ff68 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
@@ -1758,7 +1758,7 @@
   }
 
   @override
-  void handleEnumElement(Token beginToken) {
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
     _unexpected();
   }
 
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 90c2289..e428090 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -1132,7 +1132,7 @@
   }
 
   @override
-  void handleEnumElement(Token beginKeyword) {
+  void handleEnumElement(Token beginKeyword, Token? augmentToken) {
     debugEvent("EnumElement");
   }
 
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 582c606..ee61116 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -2929,7 +2929,7 @@
   }
 
   @override
-  void handleEnumElement(Token beginToken) {
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
     debugEvent("handleEnumElement");
     assert(checkState(beginToken, [
       /* argumentsBeginToken */ ValueKinds.ArgumentsTokenOrNull,
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 b48ac31..8b92e3d 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
@@ -523,9 +523,9 @@
   }
 
   @override
-  void handleEnumElement(Token beginToken) {
-    EnumElementHandle data =
-        new EnumElementHandle(ParserAstType.HANDLE, beginToken: beginToken);
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
+    EnumElementHandle data = new EnumElementHandle(ParserAstType.HANDLE,
+        beginToken: beginToken, augmentToken: augmentToken);
     seen(data);
   }
 
@@ -3994,13 +3994,16 @@
 
 class EnumElementHandle extends ParserAstNode {
   final Token beginToken;
+  final Token? augmentToken;
 
-  EnumElementHandle(ParserAstType type, {required this.beginToken})
+  EnumElementHandle(ParserAstType type,
+      {required this.beginToken, this.augmentToken})
       : super("EnumElement", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
         "beginToken": beginToken,
+        "augmentToken": augmentToken,
       };
 }
 
diff --git a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.expect b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.expect
index 166a964..759b57b 100644
--- a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.expect
+++ b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.expect
@@ -39,7 +39,7 @@
       endConstructorReference(one, null, (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       beginMetadataStar(two)
       endMetadataStar(0)
       handleIdentifier(two, enumValueDeclaration)
@@ -57,7 +57,7 @@
       endConstructorReference(two, null, (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement(,)
+      handleEnumElement(,, null)
       beginMetadataStar(three)
       endMetadataStar(0)
       handleIdentifier(three, enumValueDeclaration)
@@ -76,7 +76,7 @@
       beginArguments(()
         handleLiteralInt(42)
       endArguments(1, (, ))
-      handleEnumElement(,)
+      handleEnumElement(,, null)
       handleEnumElements(;, 3)
       beginMetadataStar(const)
       endMetadataStar(0)
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 e034de0..b60373f 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
@@ -59,7 +59,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         parseEnumElement(,)
           parseMetadataStar(,)
             listener: beginMetadataStar(two)
@@ -82,7 +82,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement(,)
+          listener: handleEnumElement(,, null)
         parseEnumElement(,)
           parseMetadataStar(,)
             listener: beginMetadataStar(three)
@@ -112,7 +112,7 @@
                       parseLiteralInt(()
                         listener: handleLiteralInt(42)
               listener: endArguments(1, (, ))
-          listener: handleEnumElement(,)
+          listener: handleEnumElement(,, null)
         listener: handleEnumElements(;, 3)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/invalid_enum_modifiers.dart.expect b/pkg/front_end/parser_testcases/error_recovery/invalid_enum_modifiers.dart.expect
index 2f394fa..4960492 100644
--- a/pkg/front_end/parser_testcases/error_recovery/invalid_enum_modifiers.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/invalid_enum_modifiers.dart.expect
@@ -36,7 +36,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(base, enum, {, 0, })
   endTopLevelDeclaration(final)
@@ -59,7 +59,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(final, enum, {, 0, })
   endTopLevelDeclaration(interface)
@@ -82,7 +82,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(interface, enum, {, 0, })
   endTopLevelDeclaration(sealed)
@@ -105,7 +105,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(sealed, enum, {, 0, })
   endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/invalid_enum_modifiers.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/invalid_enum_modifiers.dart.intertwined.expect
index 16caecb..829e9db 100644
--- a/pkg/front_end/parser_testcases/error_recovery/invalid_enum_modifiers.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/invalid_enum_modifiers.dart.intertwined.expect
@@ -33,7 +33,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(base, enum, {, 0, })
   listener: endTopLevelDeclaration(final)
@@ -68,7 +68,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(final, enum, {, 0, })
   listener: endTopLevelDeclaration(interface)
@@ -103,7 +103,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(interface, enum, {, 0, })
   listener: endTopLevelDeclaration(sealed)
@@ -138,7 +138,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(sealed, enum, {, 0, })
   listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.expect
index 01393cc..5415b9c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.expect
@@ -120,7 +120,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -146,7 +146,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -172,7 +172,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -199,7 +199,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -222,7 +222,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -245,7 +245,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -271,7 +271,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -299,7 +299,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -325,7 +325,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -355,7 +355,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -381,7 +381,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -413,7 +413,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -441,7 +441,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -475,7 +475,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration(enum)
@@ -505,7 +505,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(})
       endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
       handleNoArguments(v)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(}, 1)
     endEnum(enum, enum, {, 0, })
   endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect
index e872dfa..0474037 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect
@@ -34,7 +34,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -73,7 +73,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -114,7 +114,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -160,7 +160,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -196,7 +196,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -232,7 +232,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -273,7 +273,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -315,7 +315,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -354,7 +354,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -396,7 +396,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -437,7 +437,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -486,7 +486,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -535,7 +535,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -597,7 +597,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration(enum)
@@ -658,7 +658,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
           listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(}, 1)
         listener: endEnum(enum, enum, {, 0, })
   listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect
index 92a2c53..8f0facc 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect
@@ -42,7 +42,7 @@
       handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ;, ;)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(;, 1)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect
index 148a24c..ad9a141 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect
@@ -54,7 +54,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(;, 1)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect
index 797ab29..32ccffb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect
@@ -42,7 +42,7 @@
       handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ,, ,)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       beginMetadataStar(v2)
       endMetadataStar(0)
       handleIdentifier(v2, enumValueDeclaration)
@@ -57,7 +57,7 @@
       endConstructorReference(v2, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement(,)
+      handleEnumElement(,, null)
       handleEnumElements(;, 2)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect
index fcbdc40..97aedfa 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect
@@ -54,7 +54,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         parseEnumElement(,)
           parseMetadataStar(,)
             listener: beginMetadataStar(v2)
@@ -75,7 +75,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement(,)
+          listener: handleEnumElement(,, null)
         listener: handleEnumElements(;, 2)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect
index 45de7ff..52421be 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect
@@ -30,7 +30,7 @@
       endConstructorReference(v1, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       beginMetadataStar(v2)
       endMetadataStar(0)
       handleIdentifier(v2, enumValueDeclaration)
@@ -45,7 +45,7 @@
       endConstructorReference(v2, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement(,)
+      handleEnumElement(,, null)
       handleEnumElements(;, 2)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect
index 622b7b7..398eab7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect
@@ -47,7 +47,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         parseEnumElement(,)
           parseMetadataStar(,)
             listener: beginMetadataStar(v2)
@@ -68,7 +68,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement(,)
+          listener: handleEnumElement(,, null)
         listener: handleEnumElements(;, 2)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect
index 793111a..ee09abe1b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect
@@ -30,7 +30,7 @@
       endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(;, 1)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect
index 0fb56b3..5e98c18 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect
@@ -47,7 +47,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(;, 1)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect
index 5707e49..39229b000 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect
@@ -37,7 +37,7 @@
       handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], >, >)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(;, 1)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect
index 29d1f97..ac8110d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect
@@ -49,7 +49,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(;, 1)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect
index dee48c0..30f8a41 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect
@@ -37,7 +37,7 @@
       handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], >, >)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       beginMetadataStar(v)
       endMetadataStar(0)
       handleIdentifier(v, enumValueDeclaration)
@@ -52,7 +52,7 @@
       endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement(,)
+      handleEnumElement(,, null)
       handleEnumElements(;, 2)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect
index 48adb88..5a57db8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect
@@ -49,7 +49,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         parseEnumElement(,)
           parseMetadataStar(,)
             listener: beginMetadataStar(v)
@@ -70,7 +70,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement(,)
+          listener: handleEnumElement(,, null)
         listener: handleEnumElements(;, 2)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect
index 982eb8b..7dfdf49 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect
@@ -30,7 +30,7 @@
       endConstructorReference(v, null, (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       beginMetadataStar(v)
       endMetadataStar(0)
       handleIdentifier(v, enumValueDeclaration)
@@ -45,7 +45,7 @@
       endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement(,)
+      handleEnumElement(,, null)
       handleEnumElements(;, 2)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect
index a9664ff..77722aa 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect
@@ -46,7 +46,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         parseEnumElement(,)
           parseMetadataStar(,)
             listener: beginMetadataStar(v)
@@ -67,7 +67,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement(,)
+          listener: handleEnumElement(,, null)
         listener: handleEnumElements(;, 2)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect
index 3283ddc..38ef2b8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect
@@ -30,7 +30,7 @@
       endConstructorReference(v, null, (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(;, 1)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect
index 49e52de..68a00c8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect
@@ -46,7 +46,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(;, 1)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect
index 9d4bf5d..0e7a062 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect
@@ -30,7 +30,7 @@
       handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ;, ;)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(;, 1)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect
index fc010a2..f39636a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect
@@ -42,7 +42,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(;, 1)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect
index 6030d7a..c2f339c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect
@@ -30,7 +30,7 @@
       handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ,, ,)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       beginMetadataStar(v)
       endMetadataStar(0)
       handleIdentifier(v, enumValueDeclaration)
@@ -41,7 +41,7 @@
       endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement(,)
+      handleEnumElement(,, null)
       handleEnumElements(;, 2)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect
index 10441a4..8f8feb8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect
@@ -42,7 +42,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         parseEnumElement(,)
           parseMetadataStar(,)
             listener: beginMetadataStar(v)
@@ -59,7 +59,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement(,)
+          listener: handleEnumElement(,, null)
         listener: handleEnumElements(;, 2)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect
index 22802d6..0072d68 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect
@@ -18,7 +18,7 @@
       endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       beginMetadataStar(v)
       endMetadataStar(0)
       handleIdentifier(v, enumValueDeclaration)
@@ -29,7 +29,7 @@
       endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement(,)
+      handleEnumElement(,, null)
       handleEnumElements(;, 2)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect
index 54fe9bc..2d988dc 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect
@@ -35,7 +35,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         parseEnumElement(,)
           parseMetadataStar(,)
             listener: beginMetadataStar(v)
@@ -52,7 +52,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement(,)
+          listener: handleEnumElement(,, null)
         listener: handleEnumElements(;, 2)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect
index 7728c0cf..8ade4fa 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect
@@ -18,7 +18,7 @@
       endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
       beginArguments(()
       endArguments(0, (, ))
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(;, 1)
       beginMetadataStar(const)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect
index 2d5d205..c12dfce 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect
@@ -35,7 +35,7 @@
             parseArgumentsRest(()
               listener: beginArguments(()
               listener: endArguments(0, (, ))
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(;, 1)
         notEofOrValue(}, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect
index cdfc777..1bc6132 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect
@@ -17,7 +17,7 @@
         handleNoConstructorReferenceContinuationAfterTypeArguments(;)
       endConstructorReference(x, null, ;, ConstructorReferenceContext.Const)
       handleNoArguments(x)
-      handleEnumElement({)
+      handleEnumElement({, null)
       handleEnumElements(;, 1)
       beginMetadataStar(String)
       endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect
index c6c340c..6d98d04 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect
@@ -31,7 +31,7 @@
           listener: handleNoConstructorReferenceContinuationAfterTypeArguments(;)
           listener: endConstructorReference(x, null, ;, ConstructorReferenceContext.Const)
           listener: handleNoArguments(x)
-          listener: handleEnumElement({)
+          listener: handleEnumElement({, null)
         listener: handleEnumElements(;, 1)
         notEofOrValue(}, String)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 2745d5e..981e1b6 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -590,9 +590,10 @@
   }
 
   @override
-  void handleEnumElement(Token beginToken) {
+  void handleEnumElement(Token beginToken, Token? augmentToken) {
     seen(beginToken);
-    doPrint('handleEnumElement(' '$beginToken)');
+    seen(augmentToken);
+    doPrint('handleEnumElement(' '$beginToken, ' '$augmentToken)');
   }
 
   @override