diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2020-11-08 18:19:54 +0100 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2020-11-09 18:21:37 +0000 |
commit | 21ff28bd5a0e0f3d16a09885df45e045a515b450 (patch) | |
tree | a87e72f15510f5709128b83d6e4146d49eae5d44 /src | |
parent | bf272e348b0b45dd2b1af11d56819047dce3c85a (diff) |
qt6: do not use QTextStream::setCodec method
...it is gone now
Change-Id: Ie636dd6812fda4df0c149de240662d39ac63b86a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/app/config/configcommandexecutor.cpp | 4 | ||||
-rw-r--r-- | src/app/qbs-create-project/createproject.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/jsextensions/process.cpp | 42 | ||||
-rw-r--r-- | src/lib/corelib/jsextensions/textfile.cpp | 41 | ||||
-rw-r--r-- | src/lib/corelib/language/itemreadervisitorstate.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/scriptengine.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/parser/qmlerror.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/tools/qttools.h | 9 |
9 files changed, 64 insertions, 46 deletions
diff --git a/src/app/config/configcommandexecutor.cpp b/src/app/config/configcommandexecutor.cpp index f2d9fc59e..0a6883aa7 100644 --- a/src/app/config/configcommandexecutor.cpp +++ b/src/app/config/configcommandexecutor.cpp @@ -128,7 +128,7 @@ void ConfigCommandExecutor::exportSettings(const QString &filename) .arg(QDir::toNativeSeparators(filename), file.errorString())); } QTextStream stream(&file); - stream.setCodec("UTF-8"); + setupDefaultCodec(stream); const auto keys = m_settings->allKeys(m_scope); for (const QString &key : keys) stream << key << ": " << qbs::settingsValueToRepresentation(m_settings->value(key, m_scope)) @@ -148,7 +148,7 @@ void ConfigCommandExecutor::importSettings(const QString &filename) m_settings->remove(key); QTextStream stream(&file); - stream.setCodec("UTF-8"); + setupDefaultCodec(stream); while (!stream.atEnd()) { QString line = stream.readLine(); int colon = line.indexOf(QLatin1Char(':')); diff --git a/src/app/qbs-create-project/createproject.cpp b/src/app/qbs-create-project/createproject.cpp index 20338be98..cb6229ce3 100644 --- a/src/app/qbs-create-project/createproject.cpp +++ b/src/app/qbs-create-project/createproject.cpp @@ -103,7 +103,7 @@ void ProjectCreator::serializeProject(const ProjectCreator::Project &project) .arg(projectFile.fileName(), projectFile.errorString())); } QTextStream fileContents(&projectFile); - fileContents.setCodec("UTF-8"); + qbs::setupDefaultCodec(fileContents); fileContents << "import qbs\n\n"; if (!project.fileNames.empty() || m_projectStructure == ProjectStructure::Flat) { fileContents << "Product {\n"; diff --git a/src/lib/corelib/jsextensions/process.cpp b/src/lib/corelib/jsextensions/process.cpp index a91084b4a..8ddb48acd 100644 --- a/src/lib/corelib/jsextensions/process.cpp +++ b/src/lib/corelib/jsextensions/process.cpp @@ -46,10 +46,13 @@ #include <QtCore/qobject.h> #include <QtCore/qprocess.h> -#include <QtCore/qtextcodec.h> #include <QtCore/qtextstream.h> #include <QtCore/qvariant.h> - +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) +#include <QtCore5Compat/qtextcodec.h> +#else +#include <QtCore/qtextcodec.h> +#endif #include <QtScript/qscriptable.h> #include <QtScript/qscriptengine.h> #include <QtScript/qscriptvalue.h> @@ -100,10 +103,10 @@ private: // ResourceAcquiringScriptObject implementation void releaseResources() override; - QProcess *m_qProcess; + QProcess *m_qProcess = nullptr; QProcessEnvironment m_environment; QString m_workingDirectory; - QTextStream *m_textStream; + QTextCodec *m_codec = nullptr; }; QScriptValue Process::ctor(QScriptContext *context, QScriptEngine *engine) @@ -143,7 +146,6 @@ QScriptValue Process::ctor(QScriptContext *context, QScriptEngine *engine) Process::~Process() { - delete m_textStream; delete m_qProcess; } @@ -153,7 +155,7 @@ Process::Process(QScriptContext *context) Q_ASSERT(thisObject().engine() == engine()); m_qProcess = new QProcess; - m_textStream = new QTextStream(m_qProcess); + m_codec = QTextCodec::codecForName("UTF-8"); } QString Process::getEnv(const QString &name) @@ -188,7 +190,7 @@ bool Process::start(const QString &program, const QStringList &arguments) m_qProcess->setWorkingDirectory(m_workingDirectory); m_qProcess->setProcessEnvironment(m_environment); - m_qProcess->start(findExecutable(program), arguments); + m_qProcess->start(findExecutable(program), arguments, QIODevice::ReadWrite | QIODevice::Text); return m_qProcess->waitForStarted(); } @@ -234,8 +236,6 @@ void Process::close() if (!m_qProcess) return; Q_ASSERT(thisObject().engine() == engine()); - delete m_textStream; - m_textStream = nullptr; delete m_qProcess; m_qProcess = nullptr; } @@ -262,32 +262,36 @@ void Process::kill() void Process::setCodec(const QString &codec) { Q_ASSERT(thisObject().engine() == engine()); - m_textStream->setCodec(qPrintable(codec)); + const auto newCodec = QTextCodec::codecForName(qPrintable(codec)); + if (newCodec) + m_codec = newCodec; } QString Process::readLine() { - return m_textStream->readLine(); + auto result = m_codec->toUnicode(m_qProcess->readLine()); + if (!result.isEmpty() && result.back() == QLatin1Char('\n')) + result.chop(1); + return result; } bool Process::atEnd() const { - return m_textStream->atEnd(); + return m_qProcess->atEnd(); } QString Process::readStdOut() { - return m_textStream->readAll(); + return m_codec->toUnicode(m_qProcess->readAllStandardOutput()); } QString Process::readStdErr() { - return m_textStream->codec()->toUnicode(m_qProcess->readAllStandardError()); + return m_codec->toUnicode(m_qProcess->readAllStandardError()); } void Process::closeWriteChannel() { - m_textStream->flush(); m_qProcess->closeWriteChannel(); } @@ -310,15 +314,13 @@ void Process::releaseResources() void Process::write(const QString &str) { - (*m_textStream) << str; + m_qProcess->write(m_codec->fromUnicode(str)); } void Process::writeLine(const QString &str) { - (*m_textStream) << str; - if (HostOsInfo::isWindowsHost()) - (*m_textStream) << '\r'; - (*m_textStream) << '\n'; + m_qProcess->write(m_codec->fromUnicode(str)); + m_qProcess->putChar('\n'); } QScriptValue Process::js_shellQuote(QScriptContext *context, QScriptEngine *engine) diff --git a/src/lib/corelib/jsextensions/textfile.cpp b/src/lib/corelib/jsextensions/textfile.cpp index 7c67f9019..3c7f2d316 100644 --- a/src/lib/corelib/jsextensions/textfile.cpp +++ b/src/lib/corelib/jsextensions/textfile.cpp @@ -47,6 +47,12 @@ #include <QtCore/qtextstream.h> #include <QtCore/qvariant.h> +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) +#include <QtCore5Compat/qtextcodec.h> +#else +#include <QtCore/qtextcodec.h> +#endif + #include <QtScript/qscriptable.h> #include <QtScript/qscriptengine.h> #include <QtScript/qscriptvalue.h> @@ -82,15 +88,15 @@ public: private: TextFile(QScriptContext *context, const QString &filePath, OpenMode mode = ReadOnly, - const QString &codec = QLatin1String("UTF8")); + const QString &codec = QLatin1String("UTF-8")); bool checkForClosed() const; // ResourceAcquiringScriptObject implementation void releaseResources() override; - QFile *m_file; - QTextStream *m_stream; + QFile *m_file = nullptr; + QTextCodec *m_codec = nullptr; }; QScriptValue TextFile::ctor(QScriptContext *context, QScriptEngine *engine) @@ -132,7 +138,6 @@ QScriptValue TextFile::ctor(QScriptContext *context, QScriptEngine *engine) TextFile::~TextFile() { - delete m_stream; delete m_file; } @@ -143,7 +148,8 @@ TextFile::TextFile(QScriptContext *context, const QString &filePath, OpenMode mo Q_ASSERT(thisObject().engine() == engine()); m_file = new QFile(filePath); - m_stream = new QTextStream(m_file); + const auto newCodec = QTextCodec::codecForName(qPrintable(codec)); + m_codec = newCodec ? newCodec : QTextCodec::codecForName("UTF-8"); QIODevice::OpenMode m = QIODevice::NotOpen; if (mode & ReadOnly) m |= QIODevice::ReadOnly; @@ -151,6 +157,7 @@ TextFile::TextFile(QScriptContext *context, const QString &filePath, OpenMode mo m |= QIODevice::WriteOnly; if (mode & Append) m |= QIODevice::Append; + m |= QIODevice::Text; if (Q_UNLIKELY(!m_file->open(m))) { context->throwError(Tr::tr("Unable to open file '%1': %2") .arg(filePath, m_file->errorString())); @@ -163,8 +170,6 @@ void TextFile::close() { if (checkForClosed()) return; - delete m_stream; - m_stream = nullptr; m_file->close(); delete m_file; m_file = nullptr; @@ -181,28 +186,33 @@ void TextFile::setCodec(const QString &codec) { if (checkForClosed()) return; - m_stream->setCodec(qPrintable(codec)); + const auto newCodec = QTextCodec::codecForName(qPrintable(codec)); + if (newCodec) + m_codec = newCodec; } QString TextFile::readLine() { if (checkForClosed()) return {}; - return m_stream->readLine(); + auto result = m_codec->toUnicode(m_file->readLine()); + if (!result.isEmpty() && result.back() == QLatin1Char('\n')) + result.chop(1); + return result; } QString TextFile::readAll() { if (checkForClosed()) return {}; - return m_stream->readAll(); + return m_codec->toUnicode(m_file->readAll()); } bool TextFile::atEof() const { if (checkForClosed()) return true; - return m_stream->atEnd(); + return m_file->atEnd(); } void TextFile::truncate() @@ -210,24 +220,21 @@ void TextFile::truncate() if (checkForClosed()) return; m_file->resize(0); - m_stream->reset(); } void TextFile::write(const QString &str) { if (checkForClosed()) return; - (*m_stream) << str; + m_file->write(m_codec->fromUnicode(str)); } void TextFile::writeLine(const QString &str) { if (checkForClosed()) return; - (*m_stream) << str; - if (HostOsInfo::isWindowsHost()) - (*m_stream) << '\r'; - (*m_stream) << '\n'; + m_file->write(m_codec->fromUnicode(str)); + m_file->putChar('\n'); } bool TextFile::checkForClosed() const diff --git a/src/lib/corelib/language/itemreadervisitorstate.cpp b/src/lib/corelib/language/itemreadervisitorstate.cpp index 1946715b8..380d70c58 100644 --- a/src/lib/corelib/language/itemreadervisitorstate.cpp +++ b/src/lib/corelib/language/itemreadervisitorstate.cpp @@ -125,7 +125,7 @@ Item *ItemReaderVisitorState::readFile(const QString &filePath, const QStringLis m_filesRead.insert(filePath); QTextStream stream(&file); - stream.setCodec("UTF-8"); + setupDefaultCodec(stream); const QString &code = stream.readAll(); QbsQmlJS::Lexer lexer(cacheValue.engine()); lexer.setCode(code, 1); diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index 6e92943f9..e5e6f3a14 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -3887,7 +3887,7 @@ ModuleLoader::ModuleProviderResult ModuleLoader::findModuleProvider(const Qualif const QVariant moduleConfig = moduleProviderConfig(product).value(name.toString()); QTextStream stream(&dummyItemFile); using Qt::endl; - stream.setCodec("UTF-8"); + setupDefaultCodec(stream); stream << "import qbs.FileInfo" << endl; stream << "import qbs.Utilities" << endl; stream << "import '" << providerFile << "' as Provider" << endl; diff --git a/src/lib/corelib/language/scriptengine.cpp b/src/lib/corelib/language/scriptengine.cpp index e79ec54d7..8b3d6fa76 100644 --- a/src/lib/corelib/language/scriptengine.cpp +++ b/src/lib/corelib/language/scriptengine.cpp @@ -381,7 +381,7 @@ void ScriptEngine::importFile(const QString &filePath, QScriptValue &targetObjec if (Q_UNLIKELY(!file.open(QFile::ReadOnly))) throw ErrorInfo(tr("Cannot open '%1'.").arg(filePath)); QTextStream stream(&file); - stream.setCodec("UTF-8"); + setupDefaultCodec(stream); const QString sourceCode = stream.readAll(); file.close(); m_currentDirPathStack.push(FileInfo::path(filePath)); diff --git a/src/lib/corelib/parser/qmlerror.cpp b/src/lib/corelib/parser/qmlerror.cpp index d638b7202..8a8118290 100644 --- a/src/lib/corelib/parser/qmlerror.cpp +++ b/src/lib/corelib/parser/qmlerror.cpp @@ -39,6 +39,8 @@ #include "qmlerror.h" +#include <tools/qttools.h> + #include <QtCore/qdebug.h> #include <QtCore/qfile.h> #include <QtCore/qstringlist.h> @@ -259,9 +261,7 @@ QDebug operator<<(QDebug debug, const QmlError &error) if (f.open(QIODevice::ReadOnly)) { QByteArray data = f.readAll(); QTextStream stream(data, QIODevice::ReadOnly); -#ifndef QT_NO_TEXTCODEC - stream.setCodec("UTF-8"); -#endif + qbs::setupDefaultCodec(stream); const QString code = stream.readAll(); const QStringList lines = code.split(QLatin1Char('\n')); diff --git a/src/lib/corelib/tools/qttools.h b/src/lib/corelib/tools/qttools.h index 2d4a38544..ccc9a5552 100644 --- a/src/lib/corelib/tools/qttools.h +++ b/src/lib/corelib/tools/qttools.h @@ -118,6 +118,15 @@ QHash<K, V> &unite(QHash<K, V> &h, const QHash<K, V> &other) #endif } +inline void setupDefaultCodec(QTextStream &stream) +{ +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) + stream.setCodec("UTF-8"); +#else + Q_UNUSED(stream); +#endif +} + } // namespace qbs #endif // QBSQTTOOLS_H |