Problems reported:

parser/error_recovery/issue_48371_prime3:3:1: Expected an identifier, but got 'class'.
class A {
^^^^^

parser/error_recovery/issue_48371_prime3:3:1: Expected a enum body, but got 'class'.
class A {
^^^^^

parser/error_recovery/issue_48371_prime3:11:1: Expected a enum body, but got 'int'.
int f() {}
^^^

beginCompilationUnit(enum)
  beginMetadataStar(enum)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(enum)
    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., Try inserting an identifier before 'class'., {lexeme: class}], class, class)
    handleIdentifier(, enumDeclaration)
    beginEnum(enum)
      handleNoTypeVariables(class)
      handleEnumNoWithClause()
      handleImplements(null, 0)
      handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'class'., An enum definition must have a body with at least one constant name., {lexeme: class}], class, class)
      handleEnumHeader(enum, {)
      handleEnumElements(, 0)
    endEnum(enum, {, 0)
  endTopLevelDeclaration(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(A, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, A)
      handleNoType(A)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(void)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
            handleVoidKeyword(void)
            handleIdentifier(foo, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(int)
              endMetadataStar(0)
              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(x)
                handleType(int, null)
                handleIdentifier(x, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
              handleIdentifier(print, expression)
              handleNoTypeArguments(()
              beginArguments(()
                handleIdentifier(x, expression)
                handleNoTypeArguments(*)
                handleNoArguments(*)
                handleSend(x, *)
                beginBinaryExpression(*)
                  handleLiteralInt(42)
                endBinaryExpression(*)
              endArguments(1, (, ))
              handleSend(print, ;)
              handleExpressionStatement(;)
            endBlockFunctionBody(1, {, })
          endClassMethod(null, void, (, null, })
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(enum)
  beginMetadataStar(enum)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(enum)
    handleIdentifier(E, enumDeclaration)
    beginEnum(enum)
      handleNoTypeVariables(int)
      handleEnumNoWithClause()
      handleImplements(null, 0)
      handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'int'., An enum definition must have a body with at least one constant name., {lexeme: int}], int, int)
      handleEnumHeader(enum, {)
      handleEnumElements(E, 0)
    endEnum(enum, {, 0)
  endTopLevelDeclaration(int)
  beginMetadataStar(int)
  endMetadataStar(0)
  beginTopLevelMember(int)
    beginTopLevelMethod(}, null, null)
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(f)
      handleType(int, null)
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
      endBlockFunctionBody(0, {, })
    endTopLevelMethod(int, null, })
  endTopLevelDeclaration()
endCompilationUnit(4, )
