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 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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(Map, Message[LiteralWithClass, A map literal can't be prefixed by 'Map'., Try removing 'Map', {string: map, lexeme: Map}])
                              listener: handleRecoverableError(Message[LiteralWithClass, A map literal can't be prefixed by 'Map'., Try removing 'Map', {string: map, lexeme: Map}], Map, Map)
                            listener: beginConstLiteral(<)
                            parseLiteralListSetMapOrFunction(Map, const)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(String, typeReference)
                              listener: handleNoTypeArguments(,)
                              listener: handleType(String, null)
                              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(2, <, >)
                              parseLiteralSetOrMapSuffix(>, const)
                                listener: handleLiteralSetOrMap(0, {, const, }, false)
                            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 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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(String, typeReference)
                              listener: handleNoTypeArguments(,)
                              listener: handleType(String, null)
                              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(2, <, >)
                              parseLiteralSetOrMapSuffix(>, const)
                                listener: handleLiteralSetOrMap(0, {, const, }, false)
                            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 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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(Map, Message[LiteralWithClass, A map literal can't be prefixed by 'Map'., Try removing 'Map', {string: map, lexeme: Map}])
                              listener: handleRecoverableError(Message[LiteralWithClass, A map literal can't be prefixed by 'Map'., Try removing 'Map', {string: map, lexeme: Map}], Map, Map)
                            listener: beginConstLiteral({)
                            listener: handleNoTypeArguments({)
                            parseLiteralSetOrMapSuffix(Map, const)
                              listener: handleLiteralSetOrMap(0, {, const, }, false)
                            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 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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(Map, constructorReference)
                              listener: beginConstructorReference(Map)
                              parseQualifiedRestOpt(Map, constructorReferenceContinuation)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(String, typeReference)
                              listener: handleNoTypeArguments(,)
                              listener: handleType(String, null)
                              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(2, <, >)
                              listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
                              listener: endConstructorReference(Map, 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 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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(Map, constructorReference)
                              listener: beginConstructorReference(Map)
                              parseQualifiedRestOpt(Map, constructorReferenceContinuation)
                              listener: handleNoTypeArguments(()
                              listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
                              listener: endConstructorReference(Map, null, (, ConstructorReferenceContext.Const)
                            parseConstructorInvocationArguments(Map)
                              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 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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(Map, Message[LiteralWithClass, A map literal can't be prefixed by 'Map'., Try removing 'Map', {string: map, lexeme: Map}])
                              listener: handleRecoverableError(Message[LiteralWithClass, A map literal can't be prefixed by 'Map'., Try removing 'Map', {string: map, lexeme: Map}], Map, Map)
                            listener: beginConstLiteral(<)
                            parseLiteralListSetMapOrFunction(Map, const)
                              listener: beginTypeArguments(<)
                              listener: handleIdentifier(String, typeReference)
                              listener: handleNoTypeArguments(,)
                              listener: handleType(String, null)
                              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(2, <, >)
                              parseLiteralSetOrMapSuffix(>, const)
                                parseExpression({)
                                  parsePrecedenceExpression({, 1, true)
                                    parseUnaryExpression({, true)
                                      parsePrimary({, expression)
                                        parseLiteralString({)
                                          parseSingleLiteralString({)
                                            listener: beginLiteralString("a")
                                            listener: endLiteralString(0, :)
                                parseExpression(:)
                                  parsePrecedenceExpression(:, 1, true)
                                    parseUnaryExpression(:, true)
                                      parsePrimary(:, expression)
                                        parseLiteralNull(:)
                                          listener: handleLiteralNull(null)
                                listener: handleLiteralMapEntry(:, })
                                listener: handleLiteralSetOrMap(1, {, const, }, false)
                            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 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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(Map, Message[LiteralWithClass, A map literal can't be prefixed by 'Map'., Try removing 'Map', {string: map, lexeme: Map}])
                              listener: handleRecoverableError(Message[LiteralWithClass, A map literal can't be prefixed by 'Map'., Try removing 'Map', {string: map, lexeme: Map}], Map, Map)
                            listener: beginConstLiteral({)
                            listener: handleNoTypeArguments({)
                            parseLiteralSetOrMapSuffix(Map, const)
                              parseExpression({)
                                parsePrecedenceExpression({, 1, true)
                                  parseUnaryExpression({, true)
                                    parsePrimary({, expression)
                                      parseLiteralString({)
                                        parseSingleLiteralString({)
                                          listener: beginLiteralString("a")
                                          listener: endLiteralString(0, :)
                              parseExpression(:)
                                parsePrecedenceExpression(:, 1, true)
                                  parseUnaryExpression(:, true)
                                    parsePrimary(:, expression)
                                      parseLiteralNull(:)
                                        listener: handleLiteralNull(null)
                              listener: handleLiteralMapEntry(:, })
                              listener: handleLiteralSetOrMap(1, {, const, }, false)
                            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 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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(String, typeReference)
                              listener: handleNoTypeArguments(,)
                              listener: handleType(String, null)
                              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(2, <, >)
                              parseLiteralSetOrMapSuffix(>, const)
                                parseExpression({)
                                  parsePrecedenceExpression({, 1, true)
                                    parseUnaryExpression({, true)
                                      parsePrimary({, expression)
                                        parseLiteralString({)
                                          parseSingleLiteralString({)
                                            listener: beginLiteralString("a")
                                            listener: endLiteralString(0, :)
                                parseExpression(:)
                                  parsePrecedenceExpression(:, 1, true)
                                    parseUnaryExpression(:, true)
                                      parsePrimary(:, expression)
                                        parseLiteralNull(:)
                                          listener: handleLiteralNull(null)
                                listener: handleLiteralMapEntry(:, })
                                listener: handleLiteralSetOrMap(1, {, const, }, false)
                            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 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                ensureIdentifier(final, typeReference)
                  listener: handleIdentifier(Map, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(String, typeReference)
                listener: handleNoTypeArguments(,)
                listener: handleType(String, null)
                listener: handleIdentifier(Undefined, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(Undefined, null)
                listener: endTypeArguments(2, <, >)
                listener: handleType(Map, 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({)
                            parseLiteralSetOrMapSuffix(const, const)
                              parseExpression({)
                                parsePrecedenceExpression({, 1, true)
                                  parseUnaryExpression({, true)
                                    parsePrimary({, expression)
                                      parseLiteralString({)
                                        parseSingleLiteralString({)
                                          listener: beginLiteralString("a")
                                          listener: endLiteralString(0, :)
                              parseExpression(:)
                                parsePrecedenceExpression(:, 1, true)
                                  parseUnaryExpression(:, true)
                                    parsePrimary(:, expression)
                                      parseLiteralNull(:)
                                        listener: handleLiteralNull(null)
                              listener: handleLiteralMapEntry(:, })
                              listener: handleLiteralSetOrMap(1, {, const, }, false)
                            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, )
