parseUnit(class)
  skipErrorTokens(class)
  listener: beginCompilationUnit(class)
  syntheticPreviousToken(class)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(class)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
      parseClassOrNamedMixinApplication(null, null, null, class)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Foo, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, null, null, Foo)
        parseClass(Foo, class, class, Foo)
          parseClassHeaderOpt(Foo, class, class)
            parseClassExtendsOpt(Foo)
              listener: handleNoType(Foo)
              listener: handleClassExtends(null, 1)
            parseClassWithClauseOpt(Foo)
              listener: handleClassNoWithClause()
            parseClassOrMixinOrEnumImplementsOpt(Foo)
              listener: handleImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
            notEofOrValue(}, get)
            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Foo)
              parseMetadataStar({)
                listener: beginMetadataStar(get)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                listener: handleNoType({)
                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                  listener: handleIdentifier(Foo, methodDeclaration)
                parseQualifiedRestOpt(Foo, methodDeclarationContinuation)
                listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(Foo, Foo, true, MemberKind.NonStaticMethod)
                  reportRecoverableError((, GetterWithFormals)
                    listener: handleRecoverableError(GetterWithFormals, (, ()
                  parseFormalParameters(Foo, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(0, {, })
                reportRecoverableError(Foo, MemberWithSameNameAsClass)
                  listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
                listener: endClassMethod(get, get, (, null, })
              listener: endMember()
            notEofOrValue(}, get)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(get)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                  listener: handleIdentifier(Foo, methodDeclaration)
                parseQualifiedRestOpt(Foo, methodDeclarationContinuation)
                listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(Foo, Foo, true, MemberKind.NonStaticMethod)
                  reportRecoverableError((, GetterWithFormals)
                    listener: handleRecoverableError(GetterWithFormals, (, ()
                  parseFormalParameters(Foo, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  parseInitializers(:)
                    listener: beginInitializers(:)
                    parseInitializer(:)
                      listener: beginInitializer(initializer)
                      parseInitializerExpressionRest(:)
                        parseExpression(:)
                          parsePrecedenceExpression(:, 1, true)
                            parseUnaryExpression(:, true)
                              parsePrimary(:, expression)
                                parseSendOrFunctionLiteral(:, expression)
                                  parseSend(:, expression)
                                    isNextIdentifier(:)
                                    ensureIdentifier(:, expression)
                                      listener: handleIdentifier(initializer, expression)
                                    listener: handleNoTypeArguments(=)
                                    parseArgumentsOpt(initializer)
                                      listener: handleNoArguments(=)
                                    listener: handleSend(initializer, =)
                            parsePrecedenceExpression(=, 1, true)
                              parseUnaryExpression(=, true)
                                parsePrimary(=, expression)
                                  parseLiteralBool(=)
                                    listener: handleLiteralBool(true)
                            listener: handleAssignmentExpression(=)
                        listener: endInitializer({)
                    listener: endInitializers(1, :, {)
                parseAsyncModifierOpt(true)
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                inPlainSync()
                parseFunctionBody(true, false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(0, {, })
                reportRecoverableError(get, GetterConstructor)
                  listener: handleRecoverableError(GetterConstructor, get, get)
                listener: endClassConstructor(get, get, (, :, })
              listener: endMember()
            notEofOrValue(}, get)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(get)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                  listener: handleIdentifier(Foo, methodDeclaration)
                parseQualifiedRestOpt(Foo, methodDeclarationContinuation)
                  parseQualifiedRest(Foo, methodDeclarationContinuation)
                    ensureIdentifier(., methodDeclarationContinuation)
                      listener: handleIdentifier(x, methodDeclarationContinuation)
                    listener: handleQualified(.)
                listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(x, Foo, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(x, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(0, {, })
                reportRecoverableError(get, GetterConstructor)
                  listener: handleRecoverableError(GetterConstructor, get, get)
                listener: endClassConstructor(get, get, (, null, })
              listener: endMember()
            notEofOrValue(}, get)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(get)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                  listener: handleIdentifier(Foo, methodDeclaration)
                parseQualifiedRestOpt(Foo, methodDeclarationContinuation)
                  parseQualifiedRest(Foo, methodDeclarationContinuation)
                    ensureIdentifier(., methodDeclarationContinuation)
                      listener: handleIdentifier(x, methodDeclarationContinuation)
                    listener: handleQualified(.)
                listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(x, Foo, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(x, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  parseInitializers(:)
                    listener: beginInitializers(:)
                    parseInitializer(:)
                      listener: beginInitializer(initializer)
                      parseInitializerExpressionRest(:)
                        parseExpression(:)
                          parsePrecedenceExpression(:, 1, true)
                            parseUnaryExpression(:, true)
                              parsePrimary(:, expression)
                                parseSendOrFunctionLiteral(:, expression)
                                  parseSend(:, expression)
                                    isNextIdentifier(:)
                                    ensureIdentifier(:, expression)
                                      listener: handleIdentifier(initializer, expression)
                                    listener: handleNoTypeArguments(=)
                                    parseArgumentsOpt(initializer)
                                      listener: handleNoArguments(=)
                                    listener: handleSend(initializer, =)
                            parsePrecedenceExpression(=, 1, true)
                              parseUnaryExpression(=, true)
                                parsePrimary(=, expression)
                                  parseLiteralBool(=)
                                    listener: handleLiteralBool(true)
                            listener: handleAssignmentExpression(=)
                        listener: endInitializer({)
                    listener: endInitializers(1, :, {)
                parseAsyncModifierOpt(true)
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                inPlainSync()
                parseFunctionBody(true, false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(0, {, })
                reportRecoverableError(get, GetterConstructor)
                  listener: handleRecoverableError(GetterConstructor, get, get)
                listener: endClassConstructor(get, get, (, :, })
              listener: endMember()
            notEofOrValue(}, })
            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(class)
  listener: endCompilationUnit(1, )
