Problems reported:

parser/error_recovery/issue_45251_list_new:3:32: A list literal can't be prefixed by 'new List'.
  final List<Undefined> foo1 = new List<List<int>>[];
                               ^^^^^^^^

parser/error_recovery/issue_45251_list_new:6:32: A literal can't be prefixed by 'new'.
  final List<Undefined> foo2 = new <List<int>>[];
                               ^^^

parser/error_recovery/issue_45251_list_new:9:32: A list literal can't be prefixed by 'new List'.
  final List<Undefined> foo3 = new List[];
                               ^^^^^^^^

parser/error_recovery/issue_45251_list_new:18:32: A list literal can't be prefixed by 'new List'.
  final List<Undefined> foo6 = new List<List<int>>[null];
                               ^^^^^^^^

parser/error_recovery/issue_45251_list_new:22:32: A list literal can't be prefixed by 'new List'.
  final List<Undefined> foo7 = new List[null];
                               ^^^^^^^^

parser/error_recovery/issue_45251_list_new:25:32: A literal can't be prefixed by 'new'.
  final List<Undefined> foo8 = new <List<int>>[null];
                               ^^^

parser/error_recovery/issue_45251_list_new:28:32: A literal can't be prefixed by 'new'.
  final List<Undefined> foo9 = new [null];
                               ^^^

beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(F, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, F)
      handleNoType(F)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo1, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClassAndNew, A list literal can't be prefixed by 'new List'., Try removing 'new' and 'List', {string: list, lexeme: List}], new, List)
              beginTypeArguments(<)
                handleIdentifier(List, typeReference)
                beginTypeArguments(<)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(>)
                  handleType(int, null)
                endTypeArguments(1, <, >)
                handleType(List, null)
              endTypeArguments(1, <, >)
              handleLiteralList(0, [, null, ])
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo2, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(LiteralWithNew, new, new)
              beginTypeArguments(<)
                handleIdentifier(List, typeReference)
                beginTypeArguments(<)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(>)
                  handleType(int, null)
                endTypeArguments(1, <, >)
                handleType(List, null)
              endTypeArguments(1, <, >)
              handleLiteralList(0, [, null, ])
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo3, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClassAndNew, A list literal can't be prefixed by 'new List'., Try removing 'new' and 'List', {string: list, lexeme: List}], new, List)
              handleNoTypeArguments([])
              handleLiteralList(0, [, null, ])
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo4, fieldDeclaration)
            beginFieldInitializer(=)
              beginNewExpression(new)
                handleIdentifier(List, constructorReference)
                beginConstructorReference(List)
                  beginTypeArguments(<)
                    handleIdentifier(List, typeReference)
                    beginTypeArguments(<)
                      handleIdentifier(int, typeReference)
                      handleNoTypeArguments(>)
                      handleType(int, null)
                    endTypeArguments(1, <, >)
                    handleType(List, null)
                  endTypeArguments(1, <, >)
                  handleNoConstructorReferenceContinuationAfterTypeArguments(()
                endConstructorReference(List, null, (, ConstructorReferenceContext.New)
                beginArguments(()
                endArguments(0, (, ))
              endNewExpression(new)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo5, fieldDeclaration)
            beginFieldInitializer(=)
              beginNewExpression(new)
                handleIdentifier(List, constructorReference)
                beginConstructorReference(List)
                  handleNoTypeArguments(()
                  handleNoConstructorReferenceContinuationAfterTypeArguments(()
                endConstructorReference(List, null, (, ConstructorReferenceContext.New)
                beginArguments(()
                endArguments(0, (, ))
              endNewExpression(new)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo6, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClassAndNew, A list literal can't be prefixed by 'new List'., Try removing 'new' and 'List', {string: list, lexeme: List}], new, List)
              beginTypeArguments(<)
                handleIdentifier(List, typeReference)
                beginTypeArguments(<)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(>)
                  handleType(int, null)
                endTypeArguments(1, <, >)
                handleType(List, null)
              endTypeArguments(1, <, >)
              handleLiteralNull(null)
              handleLiteralList(1, [, null, ])
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo7, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClassAndNew, A list literal can't be prefixed by 'new List'., Try removing 'new' and 'List', {string: list, lexeme: List}], new, List)
              handleNoTypeArguments([)
              handleLiteralNull(null)
              handleLiteralList(1, [, null, ])
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo8, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(LiteralWithNew, new, new)
              beginTypeArguments(<)
                handleIdentifier(List, typeReference)
                beginTypeArguments(<)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(>)
                  handleType(int, null)
                endTypeArguments(1, <, >)
                handleType(List, null)
              endTypeArguments(1, <, >)
              handleLiteralNull(null)
              handleLiteralList(1, [, null, ])
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(foo9, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(LiteralWithNew, new, new)
              handleNoTypeArguments([)
              handleLiteralNull(null)
              handleLiteralList(1, [, null, ])
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
