Problems reported:

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

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

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

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

beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(F, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, F)
      handleNoType(F)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields({)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo1, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClass, A set literal can't be prefixed by 'Set'., Try removing 'Set', {string: set, lexeme: Set}], Set, Set)
              beginConstLiteral(<)
                beginTypeArguments(<)
                  handleIdentifier(List, typeReference)
                  beginTypeArguments(<)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(>)
                    handleType(int, null)
                  endTypeArguments(1, <, >)
                  handleType(List, null)
                endTypeArguments(1, <, >)
                handleLiteralSetOrMap(0, {, const, }, false)
              endConstLiteral(;)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(;)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo2, fieldDeclaration)
            beginFieldInitializer(=)
              beginConstLiteral(<)
                beginTypeArguments(<)
                  handleIdentifier(List, typeReference)
                  beginTypeArguments(<)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(>)
                    handleType(int, null)
                  endTypeArguments(1, <, >)
                  handleType(List, null)
                endTypeArguments(1, <, >)
                handleLiteralSetOrMap(0, {, const, }, false)
              endConstLiteral(;)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(;)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo3, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClass, A set literal can't be prefixed by 'Set'., Try removing 'Set', {string: set, lexeme: Set}], Set, Set)
              beginConstLiteral({)
                handleNoTypeArguments({)
                handleLiteralSetOrMap(0, {, const, }, false)
              endConstLiteral(;)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(;)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo4, fieldDeclaration)
            beginFieldInitializer(=)
              beginConstExpression(const)
                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, ()
                beginArguments(()
                endArguments(0, (, ))
              endConstExpression(const)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(;)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo5, fieldDeclaration)
            beginFieldInitializer(=)
              beginConstExpression(const)
                handleIdentifier(Set, constructorReference)
                beginConstructorReference(Set)
                  handleNoTypeArguments(()
                  handleNoConstructorReferenceContinuationAfterTypeArguments(()
                endConstructorReference(Set, null, ()
                beginArguments(()
                endArguments(0, (, ))
              endConstExpression(const)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(;)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo6, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClass, A set literal can't be prefixed by 'Set'., Try removing 'Set', {string: set, lexeme: Set}], Set, Set)
              beginConstLiteral(<)
                beginTypeArguments(<)
                  handleIdentifier(List, typeReference)
                  beginTypeArguments(<)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(>)
                    handleType(int, null)
                  endTypeArguments(1, <, >)
                  handleType(List, null)
                endTypeArguments(1, <, >)
                handleLiteralNull(null)
                handleLiteralSetOrMap(1, {, const, }, true)
              endConstLiteral(;)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(;)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo7, fieldDeclaration)
            beginFieldInitializer(=)
              handleRecoverableError(Message[LiteralWithClass, A set literal can't be prefixed by 'Set'., Try removing 'Set', {string: set, lexeme: Set}], Set, Set)
              beginConstLiteral({)
                handleNoTypeArguments({)
                handleLiteralNull(null)
                handleLiteralSetOrMap(1, {, const, }, true)
              endConstLiteral(;)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(;)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo8, fieldDeclaration)
            beginFieldInitializer(=)
              beginConstLiteral(<)
                beginTypeArguments(<)
                  handleIdentifier(List, typeReference)
                  beginTypeArguments(<)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(>)
                    handleType(int, null)
                  endTypeArguments(1, <, >)
                  handleType(List, null)
                endTypeArguments(1, <, >)
                handleLiteralNull(null)
                handleLiteralSetOrMap(1, {, const, }, true)
              endConstLiteral(;)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
        beginMetadataStar(final)
        endMetadataStar(0)
        beginMember()
          beginFields(;)
            handleIdentifier(Set, typeReference)
            beginTypeArguments(<)
              handleIdentifier(Undefined, typeReference)
              handleNoTypeArguments(>)
              handleType(Undefined, null)
            endTypeArguments(1, <, >)
            handleType(Set, null)
            handleIdentifier(foo9, fieldDeclaration)
            beginFieldInitializer(=)
              beginConstLiteral({)
                handleNoTypeArguments({)
                handleLiteralNull(null)
                handleLiteralSetOrMap(1, {, const, }, true)
              endConstLiteral(;)
            endFieldInitializer(=, ;)
          endClassFields(null, null, null, null, null, final, 1, final, ;)
        endMember()
      endClassOrMixinBody(DeclarationKind.Class, 9, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
