Problems reported:

parser/error_recovery/issue_45251_set_new:3:31: A set literal can't be prefixed by 'new Set'.
  final Set<Undefined> foo1 = new Set<List<int>>{};
                              ^^^^^^^

parser/error_recovery/issue_45251_set_new:6:31: A literal can't be prefixed by 'new'.
  final Set<Undefined> foo2 = new <List<int>>{};
                              ^^^

parser/error_recovery/issue_45251_set_new:9:31: A set literal can't be prefixed by 'new Set'.
  final Set<Undefined> foo3 = new Set{};
                              ^^^^^^^

parser/error_recovery/issue_45251_set_new:18:31: A set literal can't be prefixed by 'new Set'.
  final Set<Undefined> foo6 = new Set<List<int>>{null};
                              ^^^^^^^

parser/error_recovery/issue_45251_set_new:21:31: A set literal can't be prefixed by 'new Set'.
  final Set<Undefined> foo7 = new Set{null};
                              ^^^^^^^

parser/error_recovery/issue_45251_set_new:24:31: A literal can't be prefixed by 'new'.
  final Set<Undefined> foo8 = new <List<int>>{null};
                              ^^^

parser/error_recovery/issue_45251_set_new:27:31: A literal can't be prefixed by 'new'.
  final Set<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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo1, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClassAndNew, A set literal can't be prefixed by 'new Set'., Try removing 'new' and 'Set', {string: set, lexeme: Set}], new, Set)
              beginTypeArguments(<)
                handleIdentifier(List, typeReference)
                beginTypeArguments(<)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(>)
                  handleType(int, null)
                endTypeArguments(1, <, >)
                handleType(List, null)
              endTypeArguments(1, <, >)
              handleLiteralSetOrMap(0, {, null, }, false)
            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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, 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, <, >)
              handleLiteralSetOrMap(0, {, null, }, false)
            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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo3, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClassAndNew, A set literal can't be prefixed by 'new Set'., Try removing 'new' and 'Set', {string: set, lexeme: Set}], new, Set)
              handleNoTypeArguments({)
              handleLiteralSetOrMap(0, {, null, }, false)
            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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo4, fieldDeclaration)
            beginFieldInitializer(=)
              beginNewExpression(new)
                handleIdentifier(Set, constructorReference)
                beginConstructorReference(Set)
                  beginTypeArguments(<)
                    handleIdentifier(List, typeReference)
                    beginTypeArguments(<)
                      handleIdentifier(int, typeReference)
                      handleNoTypeArguments(>)
                      handleType(int, null)
                    endTypeArguments(1, <, >)
                    handleType(List, null)
                  endTypeArguments(1, <, >)
                  handleNoConstructorReferenceContinuationAfterTypeArguments(()
                endConstructorReference(Set, 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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo5, fieldDeclaration)
            beginFieldInitializer(=)
              beginNewExpression(new)
                handleIdentifier(Set, constructorReference)
                beginConstructorReference(Set)
                  handleNoTypeArguments(()
                  handleNoConstructorReferenceContinuationAfterTypeArguments(()
                endConstructorReference(Set, 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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo6, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClassAndNew, A set literal can't be prefixed by 'new Set'., Try removing 'new' and 'Set', {string: set, lexeme: Set}], new, Set)
              beginTypeArguments(<)
                handleIdentifier(List, typeReference)
                beginTypeArguments(<)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(>)
                  handleType(int, null)
                endTypeArguments(1, <, >)
                handleType(List, null)
              endTypeArguments(1, <, >)
              handleLiteralNull(null)
              handleLiteralSetOrMap(1, {, null, }, true)
            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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo7, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClassAndNew, A set literal can't be prefixed by 'new Set'., Try removing 'new' and 'Set', {string: set, lexeme: Set}], new, Set)
              handleNoTypeArguments({)
              handleLiteralNull(null)
              handleLiteralSetOrMap(1, {, null, }, true)
            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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, 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)
              handleLiteralSetOrMap(1, {, null, }, true)
            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(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo9, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(LiteralWithNew, new, new)
              handleNoTypeArguments({)
              handleLiteralNull(null)
              handleLiteralSetOrMap(1, {, null, }, true)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
