Problems reported:

parser/error_recovery/issue_48380_2_comma:2:8: Expected '(' after this.
  v<int>/*about to write () or .foo()*/,
       ^

beginCompilationUnit(enum)
  beginMetadataStar(enum)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(enum)
    handleIdentifier(E, enumDeclaration)
    beginEnum(enum)
      beginTypeVariables(<)
        beginMetadataStar(F)
        endMetadataStar(0)
        handleIdentifier(F, typeVariableDeclaration)
        beginTypeVariable(F)
          handleTypeVariablesDefined(F, 1)
          handleNoType(F)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      handleEnumNoWithClause()
      handleImplements(null, 0)
      handleEnumHeader(enum, {)
      beginMetadataStar(v)
      endMetadataStar(0)
      handleIdentifier(v, enumValueDeclaration)
      handleNoTypeNameInConstructorReference(<)
      beginConstructorReference(v)
        beginTypeArguments(<)
          handleIdentifier(int, typeReference)
          handleNoTypeArguments(>)
          handleType(int, null)
        endTypeArguments(1, <, >)
        handleNoConstructorReferenceContinuationAfterTypeArguments(,)
      endConstructorReference(v, null, ,, ConstructorReferenceContext.Const)
      handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], >, >)
      beginArguments(()
      endArguments(0, (, ))
      handleEnumElement({)
      beginMetadataStar(v)
      endMetadataStar(0)
      handleIdentifier(v, enumValueDeclaration)
      handleNoTypeNameInConstructorReference(<)
      beginConstructorReference(v)
        beginTypeArguments(<)
          handleIdentifier(int, typeReference)
          handleNoTypeArguments(>)
          handleType(int, null)
        endTypeArguments(1, <, >)
        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
      endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
      beginArguments(()
      endArguments(0, (, ))
      handleEnumElement(,)
      handleEnumElements(;, 2)
      beginMetadataStar(const)
      endMetadataStar(0)
      beginMember()
        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
          handleNoType(const)
          handleIdentifier(E, methodDeclaration)
          handleNoTypeVariables(()
          beginFormalParameters((, MemberKind.NonStaticMethod)
          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          handleEmptyFunctionBody(;)
        endEnumConstructor(null, const, (, null, ;)
      endMember()
      beginMetadataStar(const)
      endMetadataStar(0)
      beginMember()
        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
          handleNoType(const)
          handleIdentifier(E, methodDeclaration)
          handleIdentifier(foo, methodDeclarationContinuation)
          handleQualified(.)
          handleNoTypeVariables(()
          beginFormalParameters((, MemberKind.NonStaticMethod)
          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          handleEmptyFunctionBody(;)
        endEnumConstructor(null, const, (, null, ;)
      endMember()
    endEnum(enum, {, 2)
  endTopLevelDeclaration()
endCompilationUnit(1, )
