parseUnit(@)
  skipErrorTokens(@)
  listener: beginCompilationUnit(@)
  syntheticPreviousToken(@)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(@)
      parseMetadata()
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
        listener: handleNoTypeArguments(@)
        parseArgumentsOpt(abstract)
          listener: handleNoArguments(@)
        listener: endMetadata(@, null, @)
      parseMetadata(abstract)
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
          parseQualifiedRest(foo, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuation)
            listener: handleQualified(.)
        listener: handleNoTypeArguments(@)
        parseArgumentsOpt(abstract)
          listener: handleNoArguments(@)
        listener: endMetadata(@, null, @)
      parseMetadata(abstract)
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
          parseQualifiedRest(foo, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              listener: handleIdentifier(bar, metadataContinuation)
            listener: handleQualified(.)
        listener: handleNoTypeArguments(.)
        ensureIdentifier(., metadataContinuationAfterTypeArguments)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
        parseArgumentsOpt(abstract)
          listener: handleNoArguments(@)
        listener: endMetadata(@, ., @)
      parseMetadata(abstract)
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
        listener: handleNoTypeArguments(()
        parseArgumentsOpt(foo)
          parseArguments(foo)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, null, @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
          parseQualifiedRest(foo, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuation)
            listener: handleQualified(.)
        listener: handleNoTypeArguments(()
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, null, @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
          parseQualifiedRest(foo, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              listener: handleIdentifier(bar, metadataContinuation)
            listener: handleQualified(.)
        listener: handleNoTypeArguments(.)
        ensureIdentifier(., metadataContinuationAfterTypeArguments)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, ., @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        parseArgumentsOpt(>)
          parseArguments(>)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, null, @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        ensureIdentifier(., metadataContinuationAfterTypeArguments)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, ., @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
          parseQualifiedRest(foo, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              listener: handleIdentifier(bar, metadataContinuation)
            listener: handleQualified(.)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        parseArgumentsOpt(>)
          parseArguments(>)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, null, @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          listener: handleIdentifier(foo, metadataReference)
        parseQualifiedRestOpt(foo, metadataContinuation)
          parseQualifiedRest(foo, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              listener: handleIdentifier(bar, metadataContinuation)
            listener: handleQualified(.)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        ensureIdentifier(., metadataContinuationAfterTypeArguments)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, ., class)
      listener: endMetadataStar(10)
    parseTopLevelKeywordDeclaration(), class, Instance of 'DirectiveContext')
      parseClassDeclarationModifiers(), class)
      parseClassOrNamedMixinApplication(null, class)
        listener: beginClassOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(X, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, X)
        parseClass(X, class, class, X)
          parseClassHeaderOpt(X, class, class)
            parseClassExtendsOpt(X)
              listener: handleNoType(X)
              listener: handleClassExtends(null, 1)
            parseWithClauseOpt(X)
              listener: handleClassNoWithClause()
            parseClassOrMixinImplementsOpt(X)
              listener: handleClassOrMixinImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
            notEofOrValue(}, })
            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(}, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(}, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataReference)
            parseQualifiedRestOpt(abstract, metadataContinuation)
            listener: handleNoTypeArguments(T)
            parseArgumentsOpt(abstract)
              listener: handleNoArguments(T)
            listener: endMetadata(@, null, T)
          listener: endMetadataStar(1)
        ensureIdentifier(abstract, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataReference)
            parseQualifiedRestOpt(abstract, metadataContinuation)
            listener: handleNoTypeArguments(X)
            parseArgumentsOpt(abstract)
              listener: handleNoArguments(X)
            listener: endMetadata(@, null, X)
          listener: endMetadataStar(1)
        ensureIdentifier(abstract, typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    inPlainSync()
                    listener: handleIdentifier(abstract, metadataReference)
                  parseQualifiedRestOpt(abstract, metadataContinuation)
                  listener: handleNoTypeArguments(int)
                  parseArgumentsOpt(abstract)
                    listener: handleNoArguments(int)
                  listener: endMetadata(@, null, int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  inPlainSync()
                  listener: handleIdentifier(abstract, metadataContinuation)
                listener: handleQualified(.)
            listener: handleNoTypeArguments(T)
            parseArgumentsOpt(abstract)
              listener: handleNoArguments(T)
            listener: endMetadata(@, null, T)
          listener: endMetadataStar(1)
        ensureIdentifier(abstract, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  inPlainSync()
                  listener: handleIdentifier(abstract, metadataContinuation)
                listener: handleQualified(.)
            listener: handleNoTypeArguments(X)
            parseArgumentsOpt(abstract)
              listener: handleNoArguments(X)
            listener: endMetadata(@, null, X)
          listener: endMetadataStar(1)
        ensureIdentifier(abstract, typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                    parseQualifiedRest(foo, metadataContinuation)
                      ensureIdentifier(., metadataContinuation)
                        inPlainSync()
                        listener: handleIdentifier(abstract, metadataContinuation)
                      listener: handleQualified(.)
                  listener: handleNoTypeArguments(int)
                  parseArgumentsOpt(abstract)
                    listener: handleNoArguments(int)
                  listener: endMetadata(@, null, int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  listener: handleIdentifier(bar, metadataContinuation)
                listener: handleQualified(.)
            listener: handleNoTypeArguments(.)
            ensureIdentifier(., metadataContinuationAfterTypeArguments)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            parseArgumentsOpt(abstract)
              listener: handleNoArguments(T)
            listener: endMetadata(@, ., T)
          listener: endMetadataStar(1)
        ensureIdentifier(abstract, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  listener: handleIdentifier(bar, metadataContinuation)
                listener: handleQualified(.)
            listener: handleNoTypeArguments(.)
            ensureIdentifier(., metadataContinuationAfterTypeArguments)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            parseArgumentsOpt(abstract)
              listener: handleNoArguments(X)
            listener: endMetadata(@, ., X)
          listener: endMetadataStar(1)
        ensureIdentifier(abstract, typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                    parseQualifiedRest(foo, metadataContinuation)
                      ensureIdentifier(., metadataContinuation)
                        listener: handleIdentifier(bar, metadataContinuation)
                      listener: handleQualified(.)
                  listener: handleNoTypeArguments(.)
                  ensureIdentifier(., metadataContinuationAfterTypeArguments)
                    inPlainSync()
                    listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
                  parseArgumentsOpt(abstract)
                    listener: handleNoArguments(int)
                  listener: endMetadata(@, ., int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
            listener: handleNoTypeArguments(()
            parseArgumentsOpt(foo)
              parseArguments(foo)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, null, T)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
            listener: handleNoTypeArguments(()
            parseArgumentsOpt(foo)
              parseArguments(foo)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, null, X)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                  listener: handleNoTypeArguments(()
                  parseArgumentsOpt(foo)
                    parseArguments(foo)
                      parseArgumentsRest(()
                        listener: beginArguments(()
                        parseExpression(()
                          parsePrecedenceExpression((, 1, true)
                            parseUnaryExpression((, true)
                              parsePrimary((, expression)
                                parseLiteralString(()
                                  parseSingleLiteralString(()
                                    listener: beginLiteralString("hello")
                                    listener: endLiteralString(0, ))
                        listener: endArguments(1, (, ))
                  listener: endMetadata(@, null, int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  inPlainSync()
                  listener: handleIdentifier(abstract, metadataContinuation)
                listener: handleQualified(.)
            listener: handleNoTypeArguments(()
            parseArgumentsOpt(abstract)
              parseArguments(abstract)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, null, T)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  inPlainSync()
                  listener: handleIdentifier(abstract, metadataContinuation)
                listener: handleQualified(.)
            listener: handleNoTypeArguments(()
            parseArgumentsOpt(abstract)
              parseArguments(abstract)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, null, X)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                    parseQualifiedRest(foo, metadataContinuation)
                      ensureIdentifier(., metadataContinuation)
                        inPlainSync()
                        listener: handleIdentifier(abstract, metadataContinuation)
                      listener: handleQualified(.)
                  listener: handleNoTypeArguments(()
                  parseArgumentsOpt(abstract)
                    parseArguments(abstract)
                      parseArgumentsRest(()
                        listener: beginArguments(()
                        parseExpression(()
                          parsePrecedenceExpression((, 1, true)
                            parseUnaryExpression((, true)
                              parsePrimary((, expression)
                                parseLiteralString(()
                                  parseSingleLiteralString(()
                                    listener: beginLiteralString("hello")
                                    listener: endLiteralString(0, ))
                        listener: endArguments(1, (, ))
                  listener: endMetadata(@, null, int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  listener: handleIdentifier(bar, metadataContinuation)
                listener: handleQualified(.)
            listener: handleNoTypeArguments(.)
            ensureIdentifier(., metadataContinuationAfterTypeArguments)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            parseArgumentsOpt(abstract)
              parseArguments(abstract)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, ., T)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  listener: handleIdentifier(bar, metadataContinuation)
                listener: handleQualified(.)
            listener: handleNoTypeArguments(.)
            ensureIdentifier(., metadataContinuationAfterTypeArguments)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            parseArgumentsOpt(abstract)
              parseArguments(abstract)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, ., X)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                    parseQualifiedRest(foo, metadataContinuation)
                      ensureIdentifier(., metadataContinuation)
                        listener: handleIdentifier(bar, metadataContinuation)
                      listener: handleQualified(.)
                  listener: handleNoTypeArguments(.)
                  ensureIdentifier(., metadataContinuationAfterTypeArguments)
                    inPlainSync()
                    listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
                  parseArgumentsOpt(abstract)
                    parseArguments(abstract)
                      parseArgumentsRest(()
                        listener: beginArguments(()
                        parseExpression(()
                          parsePrecedenceExpression((, 1, true)
                            parseUnaryExpression((, true)
                              parsePrimary((, expression)
                                parseLiteralString(()
                                  parseSingleLiteralString(()
                                    listener: beginLiteralString("hello")
                                    listener: endLiteralString(0, ))
                        listener: endArguments(1, (, ))
                  listener: endMetadata(@, ., int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
            listener: beginTypeArguments(<)
            listener: handleIdentifier(int, typeReference)
            listener: handleNoTypeArguments(>)
            listener: handleType(int, null)
            listener: endTypeArguments(1, <, >)
            parseArgumentsOpt(>)
              parseArguments(>)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, null, T)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
            listener: beginTypeArguments(<)
            listener: handleIdentifier(int, typeReference)
            listener: handleNoTypeArguments(>)
            listener: handleType(int, null)
            listener: endTypeArguments(1, <, >)
            parseArgumentsOpt(>)
              parseArguments(>)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, null, X)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                  listener: beginTypeArguments(<)
                  listener: handleIdentifier(int, typeReference)
                  listener: handleNoTypeArguments(>)
                  listener: handleType(int, null)
                  listener: endTypeArguments(1, <, >)
                  parseArgumentsOpt(>)
                    parseArguments(>)
                      parseArgumentsRest(()
                        listener: beginArguments(()
                        parseExpression(()
                          parsePrecedenceExpression((, 1, true)
                            parseUnaryExpression((, true)
                              parsePrimary((, expression)
                                parseLiteralString(()
                                  parseSingleLiteralString(()
                                    listener: beginLiteralString("hello")
                                    listener: endLiteralString(0, ))
                        listener: endArguments(1, (, ))
                  listener: endMetadata(@, null, int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
            listener: beginTypeArguments(<)
            listener: handleIdentifier(int, typeReference)
            listener: handleNoTypeArguments(>)
            listener: handleType(int, null)
            listener: endTypeArguments(1, <, >)
            ensureIdentifier(., metadataContinuationAfterTypeArguments)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            parseArgumentsOpt(abstract)
              parseArguments(abstract)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, ., T)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
            listener: beginTypeArguments(<)
            listener: handleIdentifier(int, typeReference)
            listener: handleNoTypeArguments(>)
            listener: handleType(int, null)
            listener: endTypeArguments(1, <, >)
            ensureIdentifier(., metadataContinuationAfterTypeArguments)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            parseArgumentsOpt(abstract)
              parseArguments(abstract)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, ., X)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                  listener: beginTypeArguments(<)
                  listener: handleIdentifier(int, typeReference)
                  listener: handleNoTypeArguments(>)
                  listener: handleType(int, null)
                  listener: endTypeArguments(1, <, >)
                  ensureIdentifier(., metadataContinuationAfterTypeArguments)
                    inPlainSync()
                    listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
                  parseArgumentsOpt(abstract)
                    parseArguments(abstract)
                      parseArgumentsRest(()
                        listener: beginArguments(()
                        parseExpression(()
                          parsePrecedenceExpression((, 1, true)
                            parseUnaryExpression((, true)
                              parsePrimary((, expression)
                                parseLiteralString(()
                                  parseSingleLiteralString(()
                                    listener: beginLiteralString("hello")
                                    listener: endLiteralString(0, ))
                        listener: endArguments(1, (, ))
                  listener: endMetadata(@, ., int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  listener: handleIdentifier(bar, metadataContinuation)
                listener: handleQualified(.)
            listener: beginTypeArguments(<)
            listener: handleIdentifier(int, typeReference)
            listener: handleNoTypeArguments(>)
            listener: handleType(int, null)
            listener: endTypeArguments(1, <, >)
            parseArgumentsOpt(>)
              parseArguments(>)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, null, T)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  listener: handleIdentifier(bar, metadataContinuation)
                listener: handleQualified(.)
            listener: beginTypeArguments(<)
            listener: handleIdentifier(int, typeReference)
            listener: handleNoTypeArguments(>)
            listener: handleType(int, null)
            listener: endTypeArguments(1, <, >)
            parseArgumentsOpt(>)
              parseArguments(>)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, null, X)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                    parseQualifiedRest(foo, metadataContinuation)
                      ensureIdentifier(., metadataContinuation)
                        listener: handleIdentifier(bar, metadataContinuation)
                      listener: handleQualified(.)
                  listener: beginTypeArguments(<)
                  listener: handleIdentifier(int, typeReference)
                  listener: handleNoTypeArguments(>)
                  listener: handleType(int, null)
                  listener: endTypeArguments(1, <, >)
                  parseArgumentsOpt(>)
                    parseArguments(>)
                      parseArgumentsRest(()
                        listener: beginArguments(()
                        parseExpression(()
                          parsePrecedenceExpression((, 1, true)
                            parseUnaryExpression((, true)
                              parsePrimary((, expression)
                                parseLiteralString(()
                                  parseSingleLiteralString(()
                                    listener: beginLiteralString("hello")
                                    listener: endLiteralString(0, ))
                        listener: endArguments(1, (, ))
                  listener: endMetadata(@, null, int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  listener: handleIdentifier(bar, metadataContinuation)
                listener: handleQualified(.)
            listener: beginTypeArguments(<)
            listener: handleIdentifier(int, typeReference)
            listener: handleNoTypeArguments(>)
            listener: handleType(int, null)
            listener: endTypeArguments(1, <, >)
            ensureIdentifier(., metadataContinuationAfterTypeArguments)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            parseArgumentsOpt(abstract)
              parseArguments(abstract)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, ., T)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(int)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(@)
          parseMetadata(<)
            listener: beginMetadata(@)
            ensureIdentifier(@, metadataReference)
              listener: handleIdentifier(foo, metadataReference)
            parseQualifiedRestOpt(foo, metadataContinuation)
              parseQualifiedRest(foo, metadataContinuation)
                ensureIdentifier(., metadataContinuation)
                  listener: handleIdentifier(bar, metadataContinuation)
                listener: handleQualified(.)
            listener: beginTypeArguments(<)
            listener: handleIdentifier(int, typeReference)
            listener: handleNoTypeArguments(>)
            listener: handleType(int, null)
            listener: endTypeArguments(1, <, >)
            ensureIdentifier(., metadataContinuationAfterTypeArguments)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            parseArgumentsOpt(abstract)
              parseArguments(abstract)
                parseArgumentsRest(()
                  listener: beginArguments(()
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseLiteralString(()
                            parseSingleLiteralString(()
                              listener: beginLiteralString("hello")
                              listener: endLiteralString(0, ))
                  listener: endArguments(1, (, ))
            listener: endMetadata(@, ., X)
          listener: endMetadataStar(1)
        ensureIdentifier(), typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        ensureIdentifier(=, typeReference)
          listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(Function)
        listener: handleType(int, null)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(@)
                parseMetadata(()
                  listener: beginMetadata(@)
                  ensureIdentifier(@, metadataReference)
                    listener: handleIdentifier(foo, metadataReference)
                  parseQualifiedRestOpt(foo, metadataContinuation)
                    parseQualifiedRest(foo, metadataContinuation)
                      ensureIdentifier(., metadataContinuation)
                        listener: handleIdentifier(bar, metadataContinuation)
                      listener: handleQualified(.)
                  listener: beginTypeArguments(<)
                  listener: handleIdentifier(int, typeReference)
                  listener: handleNoTypeArguments(>)
                  listener: handleType(int, null)
                  listener: endTypeArguments(1, <, >)
                  ensureIdentifier(., metadataContinuationAfterTypeArguments)
                    inPlainSync()
                    listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
                  parseArgumentsOpt(abstract)
                    parseArguments(abstract)
                      parseArgumentsRest(()
                        listener: beginArguments(()
                        parseExpression(()
                          parsePrecedenceExpression((, 1, true)
                            parseUnaryExpression((, true)
                              parsePrimary((, expression)
                                parseLiteralString(()
                                  parseSingleLiteralString(()
                                    listener: beginLiteralString("hello")
                                    listener: endLiteralString(0, ))
                        listener: endArguments(1, (, ))
                  listener: endMetadata(@, ., int)
                listener: endMetadataStar(1)
              listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: handleIdentifier(int, typeReference)
              listener: handleNoTypeArguments())
              listener: handleType(int, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(@)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(@)
      parseMetadata(;)
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
          parseQualifiedRest(abstract, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuation)
            listener: handleQualified(.)
        listener: handleNoTypeArguments(@)
        parseArgumentsOpt(abstract)
          listener: handleNoArguments(@)
        listener: endMetadata(@, null, @)
      parseMetadata(abstract)
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
          parseQualifiedRest(abstract, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              listener: handleIdentifier(bar, metadataContinuation)
            listener: handleQualified(.)
        listener: handleNoTypeArguments(.)
        ensureIdentifier(., metadataContinuationAfterTypeArguments)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
        parseArgumentsOpt(abstract)
          listener: handleNoArguments(@)
        listener: endMetadata(@, ., @)
      parseMetadata(abstract)
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
        listener: handleNoTypeArguments(()
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, null, @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
          parseQualifiedRest(abstract, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              inPlainSync()
              listener: handleIdentifier(abstract, metadataContinuation)
            listener: handleQualified(.)
        listener: handleNoTypeArguments(()
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, null, @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
          parseQualifiedRest(abstract, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              listener: handleIdentifier(bar, metadataContinuation)
            listener: handleQualified(.)
        listener: handleNoTypeArguments(.)
        ensureIdentifier(., metadataContinuationAfterTypeArguments)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, ., @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        parseArgumentsOpt(>)
          parseArguments(>)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, null, @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        ensureIdentifier(., metadataContinuationAfterTypeArguments)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, ., @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
          parseQualifiedRest(abstract, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              listener: handleIdentifier(bar, metadataContinuation)
            listener: handleQualified(.)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        parseArgumentsOpt(>)
          parseArguments(>)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, null, @)
      parseMetadata())
        listener: beginMetadata(@)
        ensureIdentifier(@, metadataReference)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataReference)
        parseQualifiedRestOpt(abstract, metadataContinuation)
          parseQualifiedRest(abstract, metadataContinuation)
            ensureIdentifier(., metadataContinuation)
              listener: handleIdentifier(bar, metadataContinuation)
            listener: handleQualified(.)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        ensureIdentifier(., metadataContinuationAfterTypeArguments)
          inPlainSync()
          listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
        parseArgumentsOpt(abstract)
          parseArguments(abstract)
            parseArgumentsRest(()
              listener: beginArguments(()
              parseExpression(()
                parsePrecedenceExpression((, 1, true)
                  parseUnaryExpression((, true)
                    parsePrimary((, expression)
                      parseLiteralString(()
                        parseSingleLiteralString(()
                          listener: beginLiteralString("hello")
                          listener: endLiteralString(0, ))
              listener: endArguments(1, (, ))
        listener: endMetadata(@, ., class)
      listener: endMetadataStar(9)
    parseTopLevelKeywordDeclaration(), class, Instance of 'DirectiveContext')
      parseClassDeclarationModifiers(), class)
      parseClassOrNamedMixinApplication(null, class)
        listener: beginClassOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Y, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, Y)
        parseClass(Y, class, class, Y)
          parseClassHeaderOpt(Y, class, class)
            parseClassExtendsOpt(Y)
              listener: handleNoType(Y)
              listener: handleClassExtends(null, 1)
            parseWithClauseOpt(Y)
              listener: handleClassNoWithClause()
            parseClassOrMixinImplementsOpt(Y)
              listener: handleClassOrMixinImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(Y, DeclarationKind.Class, Y)
            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
            notEofOrValue(}, })
            listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(@)
  listener: endCompilationUnit(12, )
