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(F, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, null, null, F)
        parseClass(F, class, class, F)
          parseClassHeaderOpt(F, class, class)
            parseClassExtendsOpt(F)
              listener: handleNoType(F)
              listener: handleClassExtends(null, 1)
            parseClassWithClauseOpt(F)
              listener: handleClassNoWithClause()
            parseClassOrMixinOrEnumImplementsOpt(F)
              listener: handleImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(F, DeclarationKind.Class, F)
            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, F)
              parseMetadataStar({)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo1, fieldDeclaration)
                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            reportRecoverableError(List, Message[LiteralWithClass, A list literal can't be prefixed by 'List'., Try removing 'List', {string: list, lexeme: List}])
                              listener: handleRecoverableError(Message[LiteralWithClass, A list literal can't be prefixed by 'List'., Try removing 'List', {string: list, lexeme: List}], List, List)
                            listener: beginConstLiteral(<)
                            parseLiteralListSetMapOrFunction(List, const)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(List, typeReference)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(int, typeReference)
                              listener: handleNoTypeArguments(>)
                              listener: handleType(int, null)
                              listener: endTypeArguments(1, <, >)
                              listener: handleType(List, null)
                              listener: endTypeArguments(1, <, >)
                              parseLiteralListSuffix(>, const)
                                rewriteSquareBrackets(>)
                                  link([, ])
                                  rewriter()
                                listener: handleLiteralList(0, [, const, ])
                            listener: endConstLiteral(;)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
              parseMetadataStar(;)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo2, fieldDeclaration)
                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            listener: beginConstLiteral(<)
                            parseLiteralListSetMapOrFunction(const, const)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(List, typeReference)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(int, typeReference)
                              listener: handleNoTypeArguments(>)
                              listener: handleType(int, null)
                              listener: endTypeArguments(1, <, >)
                              listener: handleType(List, null)
                              listener: endTypeArguments(1, <, >)
                              parseLiteralListSuffix(>, const)
                                rewriteSquareBrackets(>)
                                  link([, ])
                                  rewriter()
                                listener: handleLiteralList(0, [, const, ])
                            listener: endConstLiteral(;)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
              parseMetadataStar(;)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo3, fieldDeclaration)
                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            reportRecoverableError(List, Message[LiteralWithClass, A list literal can't be prefixed by 'List'., Try removing 'List', {string: list, lexeme: List}])
                              listener: handleRecoverableError(Message[LiteralWithClass, A list literal can't be prefixed by 'List'., Try removing 'List', {string: list, lexeme: List}], List, List)
                            listener: beginConstLiteral([])
                            listener: handleNoTypeArguments([])
                            parseLiteralListSuffix(List, const)
                              rewriteSquareBrackets(List)
                                link([, ])
                                rewriter()
                              listener: handleLiteralList(0, [, const, ])
                            listener: endConstLiteral(;)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
              parseMetadataStar(;)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo4, fieldDeclaration)
                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            listener: beginConstExpression(const)
                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo', false)
                              ensureIdentifier(const, constructorReference)
                                listener: handleIdentifier(List, constructorReference)
                              listener: beginConstructorReference(List)
                              parseQualifiedRestOpt(List, constructorReferenceContinuation)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(List, typeReference)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(int, typeReference)
                              listener: handleNoTypeArguments(>)
                              listener: handleType(int, null)
                              listener: endTypeArguments(1, <, >)
                              listener: handleType(List, null)
                              listener: endTypeArguments(1, <, >)
                              listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
                              listener: endConstructorReference(List, null, (, ConstructorReferenceContext.Const)
                            parseConstructorInvocationArguments(>)
                              parseArgumentsRest(()
                                listener: beginArguments(()
                                listener: endArguments(0, (, ))
                            listener: endConstExpression(const)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
              parseMetadataStar(;)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo5, fieldDeclaration)
                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            listener: beginConstExpression(const)
                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg', false)
                              ensureIdentifier(const, constructorReference)
                                listener: handleIdentifier(List, constructorReference)
                              listener: beginConstructorReference(List)
                              parseQualifiedRestOpt(List, constructorReferenceContinuation)
                              listener: handleNoTypeArguments(()
                              listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
                              listener: endConstructorReference(List, null, (, ConstructorReferenceContext.Const)
                            parseConstructorInvocationArguments(List)
                              parseArgumentsRest(()
                                listener: beginArguments(()
                                listener: endArguments(0, (, ))
                            listener: endConstExpression(const)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
              parseMetadataStar(;)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo6, fieldDeclaration)
                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            reportRecoverableError(List, Message[LiteralWithClass, A list literal can't be prefixed by 'List'., Try removing 'List', {string: list, lexeme: List}])
                              listener: handleRecoverableError(Message[LiteralWithClass, A list literal can't be prefixed by 'List'., Try removing 'List', {string: list, lexeme: List}], List, List)
                            listener: beginConstLiteral(<)
                            parseLiteralListSetMapOrFunction(List, const)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(List, typeReference)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(int, typeReference)
                              listener: handleNoTypeArguments(>)
                              listener: handleType(int, null)
                              listener: endTypeArguments(1, <, >)
                              listener: handleType(List, null)
                              listener: endTypeArguments(1, <, >)
                              parseLiteralListSuffix(>, const)
                                parseExpression([)
                                  parsePrecedenceExpression([, 1, true)
                                    parseUnaryExpression([, true)
                                      parsePrimary([, expression)
                                        parseLiteralNull([)
                                          listener: handleLiteralNull(null)
                                listener: handleLiteralList(1, [, const, ])
                            listener: endConstLiteral(;)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
              parseMetadataStar(;)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo7, fieldDeclaration)
                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            reportRecoverableError(List, Message[LiteralWithClass, A list literal can't be prefixed by 'List'., Try removing 'List', {string: list, lexeme: List}])
                              listener: handleRecoverableError(Message[LiteralWithClass, A list literal can't be prefixed by 'List'., Try removing 'List', {string: list, lexeme: List}], List, List)
                            listener: beginConstLiteral([)
                            listener: handleNoTypeArguments([)
                            parseLiteralListSuffix(List, const)
                              parseExpression([)
                                parsePrecedenceExpression([, 1, true)
                                  parseUnaryExpression([, true)
                                    parsePrimary([, expression)
                                      parseLiteralNull([)
                                        listener: handleLiteralNull(null)
                              listener: handleLiteralList(1, [, const, ])
                            listener: endConstLiteral(;)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
              parseMetadataStar(;)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo8, fieldDeclaration)
                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            listener: beginConstLiteral(<)
                            parseLiteralListSetMapOrFunction(const, const)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(List, typeReference)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(int, typeReference)
                              listener: handleNoTypeArguments(>)
                              listener: handleType(int, null)
                              listener: endTypeArguments(1, <, >)
                              listener: handleType(List, null)
                              listener: endTypeArguments(1, <, >)
                              parseLiteralListSuffix(>, const)
                                parseExpression([)
                                  parsePrecedenceExpression([, 1, true)
                                    parseUnaryExpression([, true)
                                      parsePrimary([, expression)
                                        parseLiteralNull([)
                                          listener: handleLiteralNull(null)
                                listener: handleLiteralList(1, [, const, ])
                            listener: endConstLiteral(;)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, final)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
              parseMetadataStar(;)
                listener: beginMetadataStar(final)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                  listener: handleIdentifier(foo9, fieldDeclaration)
                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                  listener: beginFieldInitializer(=)
                  parseExpression(=)
                    parsePrecedenceExpression(=, 1, true)
                      parseUnaryExpression(=, true)
                        parsePrimary(=, expression)
                          parseConstExpression(=)
                            listener: beginConstLiteral([)
                            listener: handleNoTypeArguments([)
                            parseLiteralListSuffix(const, const)
                              parseExpression([)
                                parsePrecedenceExpression([, 1, true)
                                  parseUnaryExpression([, true)
                                    parsePrimary([, expression)
                                      parseLiteralNull([)
                                        listener: handleLiteralNull(null)
                              listener: handleLiteralList(1, [, const, ])
                            listener: endConstLiteral(;)
                  listener: endFieldInitializer(=, ;)
                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
              listener: endMember()
            notEofOrValue(}, })
            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(class)
  listener: endCompilationUnit(1, )
