parseUnit(int)
  skipErrorTokens(int)
  listener: beginCompilationUnit(int)
  syntheticPreviousToken(int)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(int)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(int)
      parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', x1, DeclarationKind.TopLevel, null, false)
        listener: beginFields()
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(x1)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
          listener: handleIdentifier(x1, topLevelVariableDeclaration)
        parseFieldInitializerOpt(x1, x1, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, int, ;)
  listener: endTopLevelDeclaration(late)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(late)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(late)
      indicatesMethodOrField(;)
      reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
      parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleType', x2, DeclarationKind.TopLevel, null, false)
        listener: beginFields(late)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(x2)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
          listener: handleIdentifier(x2, topLevelVariableDeclaration)
        parseFieldInitializerOpt(x2, x2, late, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, late, null, 1, int, ;)
  listener: endTopLevelDeclaration(late)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(late)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(late)
      indicatesMethodOrField(;)
      reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
      parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleTypeWith1Argument', x3, DeclarationKind.TopLevel, null, false)
        listener: beginFields(late)
        listener: handleIdentifier(List, typeReference)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        listener: handleType(List, null)
        ensureIdentifierPotentiallyRecovered(>, topLevelVariableDeclaration, false)
          listener: handleIdentifier(x3, topLevelVariableDeclaration)
        parseFieldInitializerOpt(x3, x3, late, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, late, null, 1, List, ;)
  listener: endTopLevelDeclaration(late)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(late)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(late)
      indicatesMethodOrField(;)
      reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
      parseFields(late, null, null, null, null, late, final, final, Instance of 'SimpleType', x4, DeclarationKind.TopLevel, null, false)
        listener: beginFields(late)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(x4)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
          listener: handleIdentifier(x4, topLevelVariableDeclaration)
        parseFieldInitializerOpt(x4, x4, late, null, null, final, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, late, final, 1, final, ;)
  listener: endTopLevelDeclaration(late)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(late)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(late)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', x5, DeclarationKind.TopLevel, null, false)
        listener: beginFields(;)
        listener: handleIdentifier(late, typeReference)
        listener: handleNoTypeArguments(x5)
        listener: handleType(late, null)
        ensureIdentifierPotentiallyRecovered(late, topLevelVariableDeclaration, false)
          listener: handleIdentifier(x5, topLevelVariableDeclaration)
        parseFieldInitializerOpt(x5, x5, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, late, ;)
  listener: endTopLevelDeclaration(;)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(;)
      listener: endMetadataStar(0)
    listener: beginTopLevelMember(;)
    parseInvalidTopLevelDeclaration(;)
      reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ;, ;)
      listener: handleInvalidTopLevelDeclaration(;)
  listener: endTopLevelDeclaration(late)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(late)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(late)
      isReservedKeyword(;)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', late, DeclarationKind.TopLevel, null, false)
        listener: beginFields(;)
        reportRecoverableError(late, MissingConstFinalVarOrType)
          listener: handleRecoverableError(MissingConstFinalVarOrType, late, late)
        listener: handleNoType(;)
        ensureIdentifierPotentiallyRecovered(;, topLevelVariableDeclaration, false)
          listener: handleIdentifier(late, topLevelVariableDeclaration)
        parseFieldInitializerOpt(late, late, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, late, ;)
  listener: endTopLevelDeclaration(;)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(;)
      listener: endMetadataStar(0)
    listener: beginTopLevelMember(;)
    parseInvalidTopLevelDeclaration(;)
      reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ;, ;)
      listener: handleInvalidTopLevelDeclaration(;)
  listener: endTopLevelDeclaration(main)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(main)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(main)
      isReservedKeyword(()
      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, main, false)
        listener: beginTopLevelMethod(;, null)
        listener: handleNoType(;)
        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(main, topLevelFunctionDeclaration)
        parseMethodTypeVar(main)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
          parseFormalParameters(main, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(List)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(String, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifier(>, formalParameterDeclaration)
                  listener: handleIdentifier(args, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, args, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, int)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                looksLikeLocalFunction(y1)
                listener: beginMetadataStar(int)
                listener: endMetadataStar(0)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(y1)
                listener: handleType(int, null)
                listener: beginVariablesDeclaration(y1, null, null)
                parseVariablesDeclarationRest(int, true)
                  parseOptionallyInitializedIdentifier(int)
                    ensureIdentifier(int, localVariableDeclaration)
                      listener: handleIdentifier(y1, localVariableDeclaration)
                    listener: beginInitializedIdentifier(y1)
                    parseVariableInitializerOpt(y1)
                      listener: handleNoVariableInitializer(y1)
                    listener: endInitializedIdentifier(y1)
                  ensureSemicolon(y1)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, late)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
                indicatesMethodOrField(;)
                reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                  listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
                looksLikeLocalFunction(y2)
                listener: beginMetadataStar(int)
                listener: endMetadataStar(0)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(y2)
                listener: handleType(int, null)
                listener: beginVariablesDeclaration(y2, late, null)
                parseVariablesDeclarationRest(int, true)
                  parseOptionallyInitializedIdentifier(int)
                    ensureIdentifier(int, localVariableDeclaration)
                      listener: handleIdentifier(y2, localVariableDeclaration)
                    listener: beginInitializedIdentifier(y2)
                    parseVariableInitializerOpt(y2)
                      listener: handleNoVariableInitializer(y2)
                    listener: endInitializedIdentifier(y2)
                  ensureSemicolon(y2)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, late)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
                indicatesMethodOrField(;)
                reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                  listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
                looksLikeLocalFunction(y3)
                listener: beginMetadataStar(List)
                listener: endMetadataStar(0)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(int, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                listener: beginVariablesDeclaration(y3, late, null)
                parseVariablesDeclarationRest(>, true)
                  parseOptionallyInitializedIdentifier(>)
                    ensureIdentifier(>, localVariableDeclaration)
                      listener: handleIdentifier(y3, localVariableDeclaration)
                    listener: beginInitializedIdentifier(y3)
                    parseVariableInitializerOpt(y3)
                      listener: handleNoVariableInitializer(y3)
                    listener: endInitializedIdentifier(y3)
                  ensureSemicolon(y3)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, late)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
                indicatesMethodOrField(;)
                reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                  listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
                looksLikeLocalFunction(y4)
                listener: beginMetadataStar(int)
                listener: endMetadataStar(0)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(y4)
                listener: handleType(int, null)
                listener: beginVariablesDeclaration(y4, late, final)
                parseVariablesDeclarationRest(int, true)
                  parseOptionallyInitializedIdentifier(int)
                    ensureIdentifier(int, localVariableDeclaration)
                      listener: handleIdentifier(y4, localVariableDeclaration)
                    listener: beginInitializedIdentifier(y4)
                    parseVariableInitializerOpt(y4)
                      listener: handleNoVariableInitializer(y4)
                    listener: endInitializedIdentifier(y4)
                  ensureSemicolon(y4)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, late)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
                looksLikeLocalFunction(y5)
                listener: beginMetadataStar(late)
                listener: endMetadataStar(0)
                listener: handleIdentifier(late, typeReference)
                listener: handleNoTypeArguments(y5)
                listener: handleType(late, null)
                listener: beginVariablesDeclaration(y5, null, null)
                parseVariablesDeclarationRest(late, true)
                  parseOptionallyInitializedIdentifier(late)
                    ensureIdentifier(late, localVariableDeclaration)
                      listener: handleIdentifier(y5, localVariableDeclaration)
                    listener: beginInitializedIdentifier(y5)
                    parseVariableInitializerOpt(y5)
                      listener: handleNoVariableInitializer(y5)
                    listener: endInitializedIdentifier(y5)
                  ensureSemicolon(y5)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, ;)
          parseStatement(;)
            parseStatementX(;)
              parseEmptyStatement(;)
                listener: handleEmptyStatement(;)
          notEofOrValue(}, late)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
                looksLikeLocalFunction(late)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true)
                      parseUnaryExpression(;, true)
                        parsePrimary(;, expression)
                          parseSendOrFunctionLiteral(;, expression)
                            parseSend(;, expression)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(late, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(late)
                                listener: handleNoArguments(;)
                              listener: handleSend(late, ;)
                  ensureSemicolon(late)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, ;)
          parseStatement(;)
            parseStatementX(;)
              parseEmptyStatement(;)
                listener: handleEmptyStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(8, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration(class)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(class)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
      parseClassDeclarationModifiers(}, class)
      parseClassOrNamedMixinApplication(null, class)
        listener: beginClassOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Foo, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, Foo)
        parseClass(Foo, class, class, Foo)
          parseClassHeaderOpt(Foo, class, class)
            parseClassExtendsOpt(Foo)
              listener: handleNoType(Foo)
              listener: handleClassExtends(null, 1)
            parseWithClauseOpt(Foo)
              listener: handleClassNoWithClause()
            parseClassOrMixinImplementsOpt(Foo)
              listener: handleClassOrMixinImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
            notEofOrValue(}, int)
            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
              parseMetadataStar({)
                listener: beginMetadataStar(int)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', z1, DeclarationKind.Class, Foo, false)
                listener: beginFields({)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(z1)
                listener: handleType(int, null)
                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                  listener: handleIdentifier(z1, fieldDeclaration)
                parseFieldInitializerOpt(z1, z1, null, null, null, null, DeclarationKind.Class, Foo)
                  listener: handleNoFieldInitializer(;)
                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
              listener: endMember()
            notEofOrValue(}, late)
            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, Foo)
              parseMetadataStar(;)
                listener: beginMetadataStar(late)
                listener: endMetadataStar(0)
              indicatesMethodOrField(;)
              reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
              listener: beginMember()
              parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleType', z2, DeclarationKind.Class, Foo, false)
                listener: beginFields(late)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(z2)
                listener: handleType(int, null)
                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                  listener: handleIdentifier(z2, fieldDeclaration)
                parseFieldInitializerOpt(z2, z2, late, null, null, null, DeclarationKind.Class, Foo)
                  listener: handleNoFieldInitializer(;)
                listener: endClassFields(null, null, null, null, late, null, 1, int, ;)
              listener: endMember()
            notEofOrValue(}, late)
            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, Foo)
              parseMetadataStar(;)
                listener: beginMetadataStar(late)
                listener: endMetadataStar(0)
              indicatesMethodOrField(;)
              reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
              listener: beginMember()
              parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleTypeWith1Argument', x3, DeclarationKind.Class, Foo, false)
                listener: beginFields(late)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(int, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(x3, fieldDeclaration)
                parseFieldInitializerOpt(x3, x3, late, null, null, null, DeclarationKind.Class, Foo)
                  listener: handleNoFieldInitializer(;)
                listener: endClassFields(null, null, null, null, late, null, 1, List, ;)
              listener: endMember()
            notEofOrValue(}, late)
            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, Foo)
              parseMetadataStar(;)
                listener: beginMetadataStar(late)
                listener: endMetadataStar(0)
              indicatesMethodOrField(;)
              reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
              listener: beginMember()
              parseFields(late, null, null, null, null, late, final, final, Instance of 'SimpleType', z4, DeclarationKind.Class, Foo, false)
                listener: beginFields(late)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(z4)
                listener: handleType(int, null)
                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                  listener: handleIdentifier(z4, fieldDeclaration)
                parseFieldInitializerOpt(z4, z4, late, null, null, final, DeclarationKind.Class, Foo)
                  listener: handleNoFieldInitializer(;)
                listener: endClassFields(null, null, null, null, late, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, late)
            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, Foo)
              parseMetadataStar(;)
                listener: beginMetadataStar(late)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', z5, DeclarationKind.Class, Foo, false)
                listener: beginFields(;)
                listener: handleIdentifier(late, typeReference)
                listener: handleNoTypeArguments(z5)
                listener: handleType(late, null)
                ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                  listener: handleIdentifier(z5, fieldDeclaration)
                parseFieldInitializerOpt(z5, z5, null, null, null, null, DeclarationKind.Class, Foo)
                  listener: handleNoFieldInitializer(;)
                listener: endClassFields(null, null, null, null, null, null, 1, late, ;)
              listener: endMember()
            notEofOrValue(}, ;)
            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, Foo)
              parseMetadataStar(;)
                listener: beginMetadataStar(;)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                listener: handleInvalidMember(;)
                listener: endMember()
            notEofOrValue(}, late)
            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, Foo)
              parseMetadataStar(;)
                listener: beginMetadataStar(late)
                listener: endMetadataStar(0)
              listener: beginMember()
              isReservedKeyword(;)
              parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', late, DeclarationKind.Class, Foo, false)
                listener: beginFields(;)
                reportRecoverableError(late, MissingConstFinalVarOrType)
                  listener: handleRecoverableError(MissingConstFinalVarOrType, late, late)
                listener: handleNoType(;)
                ensureIdentifierPotentiallyRecovered(;, fieldDeclaration, false)
                  listener: handleIdentifier(late, fieldDeclaration)
                parseFieldInitializerOpt(late, late, null, null, null, null, DeclarationKind.Class, Foo)
                  listener: handleNoFieldInitializer(;)
                listener: endClassFields(null, null, null, null, null, null, 1, late, ;)
              listener: endMember()
            notEofOrValue(}, ;)
            parseClassOrMixinOrExtensionMemberImpl(;, DeclarationKind.Class, Foo)
              parseMetadataStar(;)
                listener: beginMetadataStar(;)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                listener: handleInvalidMember(;)
                listener: endMember()
            notEofOrValue(}, })
            listener: endClassOrMixinBody(DeclarationKind.Class, 8, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(int)
  listener: endCompilationUnit(10, )
