From a58dd22f2d445b27da5085390ada0559dac7321f Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 1 Jul 2021 09:58:48 +0200 Subject: [PATCH] Utils: Use FilePath in TemporaryDirectory API This helps to lower impedance in the using code. Even though TemporaryDirectory will very likely always stay on the local host, this is one of the entry points into path related string manipulation that we want to base on FilePath nowadays. Change-Id: I302016b8d65e54df94296659a54a93935d9e4627 Reviewed-by: David Schulz --- src/app/main.cpp | 2 +- src/libs/utils/temporarydirectory.cpp | 12 ++++++++++++ src/libs/utils/temporarydirectory.h | 5 +++++ src/plugins/android/javalanguageserver.cpp | 2 +- .../clangcodemodel/clanguiheaderondiskmanager.cpp | 3 ++- src/plugins/clangtools/clangtoolruncontrol.cpp | 2 +- src/plugins/clangtools/documentclangtoolrunner.cpp | 2 +- src/plugins/clangtools/virtualfilesystemoverlay.cpp | 5 ++--- .../cmakeprojectmanager/cmakeprojectimporter.cpp | 8 ++++---- src/plugins/coreplugin/plugininstallwizard.cpp | 6 +++--- src/plugins/cpptools/cpptoolstestcase.cpp | 4 ++-- src/plugins/cpptools/cpptoolstestcase.h | 2 +- .../designercore/instances/puppetcreator.cpp | 4 ++-- src/plugins/qtsupport/qscxmlcgenerator.cpp | 6 +++--- src/plugins/qtsupport/qtprojectimporter.cpp | 10 +++++----- 15 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index b10eea891c5..77c08cbd088 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -567,7 +567,7 @@ int main(int argc, char **argv) temporaryCleanSettingsDir.reset(new Utils::TemporaryDirectory("qtc-test-settings")); if (!temporaryCleanSettingsDir->isValid()) return 1; - options.settingsPath = temporaryCleanSettingsDir->path(); + options.settingsPath = temporaryCleanSettingsDir->path().path(); } if (!options.settingsPath.isEmpty()) QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, options.settingsPath); diff --git a/src/libs/utils/temporarydirectory.cpp b/src/libs/utils/temporarydirectory.cpp index da539919e42..2c30606e9b0 100644 --- a/src/libs/utils/temporarydirectory.cpp +++ b/src/libs/utils/temporarydirectory.cpp @@ -25,6 +25,8 @@ #include "temporarydirectory.h" +#include "fileutils.h" + #include #include "qtcassert.h" @@ -64,4 +66,14 @@ QString TemporaryDirectory::masterDirectoryPath() return m_masterTemporaryDir->path(); } +FilePath TemporaryDirectory::path() const +{ + return FilePath::fromString(QTemporaryDir::path()); +} + +FilePath TemporaryDirectory::filePath(const QString &fileName) const +{ + return FilePath::fromString(QTemporaryDir::filePath(fileName)); +} + } // namespace Utils diff --git a/src/libs/utils/temporarydirectory.h b/src/libs/utils/temporarydirectory.h index 853474c24bd..42390a9a0f2 100644 --- a/src/libs/utils/temporarydirectory.h +++ b/src/libs/utils/temporarydirectory.h @@ -31,6 +31,8 @@ namespace Utils { +class FilePath; + class QTCREATOR_UTILS_EXPORT TemporaryDirectory : public QTemporaryDir { public: @@ -39,6 +41,9 @@ public: static QTemporaryDir *masterTemporaryDirectory(); static void setMasterTemporaryDirectory(const QString &pattern); static QString masterDirectoryPath(); + + FilePath path() const; + FilePath filePath(const QString &fileName) const; }; } // namespace Utils diff --git a/src/plugins/android/javalanguageserver.cpp b/src/plugins/android/javalanguageserver.cpp index 73de7c0bac2..c7c093f53c3 100644 --- a/src/plugins/android/javalanguageserver.cpp +++ b/src/plugins/android/javalanguageserver.cpp @@ -183,7 +183,7 @@ class JLSInterface : public LanguageClient::StdIOClientInterface public: JLSInterface() = default; - QString workspaceDir() const { return m_workspaceDir.path(); } + QString workspaceDir() const { return m_workspaceDir.path().path(); } private: TemporaryDirectory m_workspaceDir = TemporaryDirectory("QtCreator-jls-XXXXXX"); diff --git a/src/plugins/clangcodemodel/clanguiheaderondiskmanager.cpp b/src/plugins/clangcodemodel/clanguiheaderondiskmanager.cpp index d17f69ed50a..696ced1c6f7 100644 --- a/src/plugins/clangcodemodel/clanguiheaderondiskmanager.cpp +++ b/src/plugins/clangcodemodel/clanguiheaderondiskmanager.cpp @@ -28,6 +28,7 @@ #include #include +#include #include namespace ClangCodeModel { @@ -62,7 +63,7 @@ QString UiHeaderOnDiskManager::remove(const QString &filePath) QString UiHeaderOnDiskManager::directoryPath() const { - return m_temporaryDir.path(); + return m_temporaryDir.path().path(); } QString UiHeaderOnDiskManager::mapPath(const QString &filePath) const diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index 4a8cbcfbf4b..31c2a37655a 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -445,7 +445,7 @@ template ClangToolRunner *ClangToolRunWorker::createRunner() { auto runner = new T(m_diagnosticConfig, this); - runner->init(m_temporaryDir.path(), m_environment); + runner->init(m_temporaryDir.path().path(), m_environment); connect(runner, &ClangToolRunner::finishedWithSuccess, this, &ClangToolRunWorker::onRunnerFinishedWithSuccess); connect(runner, &ClangToolRunner::finishedWithFailure, diff --git a/src/plugins/clangtools/documentclangtoolrunner.cpp b/src/plugins/clangtools/documentclangtoolrunner.cpp index 89d76e0f559..93bcaa7746e 100644 --- a/src/plugins/clangtools/documentclangtoolrunner.cpp +++ b/src/plugins/clangtools/documentclangtoolrunner.cpp @@ -391,7 +391,7 @@ ClangToolRunner *DocumentClangToolRunner::createRunner(const CppTools::ClangDiag const Utils::Environment &env) { auto runner = new T(config, this); - runner->init(m_temporaryDir.path(), env); + runner->init(m_temporaryDir.path().path(), env); connect(runner, &ClangToolRunner::finishedWithSuccess, this, &DocumentClangToolRunner::onSuccess); connect(runner, &ClangToolRunner::finishedWithFailure, diff --git a/src/plugins/clangtools/virtualfilesystemoverlay.cpp b/src/plugins/clangtools/virtualfilesystemoverlay.cpp index 357f8eec40e..0b066ff62f6 100644 --- a/src/plugins/clangtools/virtualfilesystemoverlay.cpp +++ b/src/plugins/clangtools/virtualfilesystemoverlay.cpp @@ -42,7 +42,7 @@ namespace Internal { VirtualFileSystemOverlay::VirtualFileSystemOverlay(const QString &rootPattern) : m_root(rootPattern) - , m_overlayFilePath(Utils::FilePath::fromString(m_root.filePath("vfso.yaml"))) + , m_overlayFilePath(m_root.filePath("vfso.yaml")) { } void VirtualFileSystemOverlay::update() @@ -64,8 +64,7 @@ void VirtualFileSystemOverlay::update() saved.path.removeRecursively(); saved.revision = document->document()->revision(); QString error; - saved.path = Utils::FilePath::fromString(m_root.path()) - .pathAppended(doc->filePath().fileName() + ".auto"); + saved.path = m_root.filePath(doc->filePath().fileName() + ".auto"); while (saved.path.exists()) saved.path = saved.path + ".1"; if (!doc->save(&error, saved.path, true)) { diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index 0b60ed75739..f60b224564f 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -162,7 +162,7 @@ static FilePath qmakeFromCMakeCache(const CMakeConfig &config) // Run a CMake project that would do qmake probing TemporaryDirectory qtcQMakeProbeDir("qtc-cmake-qmake-probe-XXXXXXXX"); - QFile cmakeListTxt(qtcQMakeProbeDir.path() + "/CMakeLists.txt"); + QFile cmakeListTxt(qtcQMakeProbeDir.filePath("CMakeLists.txt").toString()); if (!cmakeListTxt.open(QIODevice::WriteOnly)) { return FilePath(); } @@ -219,9 +219,9 @@ static FilePath qmakeFromCMakeCache(const CMakeConfig &config) QStringList args; args.push_back("-S"); - args.push_back(qtcQMakeProbeDir.path()); + args.push_back(qtcQMakeProbeDir.path().path()); args.push_back("-B"); - args.push_back(qtcQMakeProbeDir.path() + "/build"); + args.push_back(qtcQMakeProbeDir.filePath("build").path()); args.push_back("-G"); args.push_back(cmakeGenerator); @@ -242,7 +242,7 @@ static FilePath qmakeFromCMakeCache(const CMakeConfig &config) cmake.setCommand({cmakeExecutable, args}); cmake.runBlocking(); - QFile qmakeLocationTxt(qtcQMakeProbeDir.path() + "/qmake-location.txt"); + QFile qmakeLocationTxt(qtcQMakeProbeDir.filePath("qmake-location.txt").path()); if (!qmakeLocationTxt.open(QIODevice::ReadOnly)) { return FilePath(); } diff --git a/src/plugins/coreplugin/plugininstallwizard.cpp b/src/plugins/coreplugin/plugininstallwizard.cpp index fd6e3ddfe9d..a97f15ef341 100644 --- a/src/plugins/coreplugin/plugininstallwizard.cpp +++ b/src/plugins/coreplugin/plugininstallwizard.cpp @@ -200,14 +200,14 @@ public: m_canceled = false; m_tempDir = std::make_unique("plugininstall"); - m_data->extractedPath = FilePath::fromString(m_tempDir->path()); + m_data->extractedPath = m_tempDir->path(); m_label->setText(PluginInstallWizard::tr("Checking archive...")); m_label->setType(InfoLabel::None); m_cancelButton->setVisible(true); m_output->clear(); - m_archive = Archive::unarchive(m_data->sourcePath, FilePath::fromString(m_tempDir->path())); + m_archive = Archive::unarchive(m_data->sourcePath, m_tempDir->path()); if (!m_archive) { m_label->setType(InfoLabel::Error); @@ -271,7 +271,7 @@ public: PluginSpec *coreplugin = CorePlugin::instance()->pluginSpec(); // look for plugin - QDirIterator it(m_tempDir->path(), + QDirIterator it(m_tempDir->path().path(), libraryNameFilter(), QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); diff --git a/src/plugins/cpptools/cpptoolstestcase.cpp b/src/plugins/cpptools/cpptoolstestcase.cpp index c80a4a7cfff..e9a6e85d0d5 100644 --- a/src/plugins/cpptools/cpptoolstestcase.cpp +++ b/src/plugins/cpptools/cpptoolstestcase.cpp @@ -312,7 +312,7 @@ QString TemporaryDir::createFile(const QByteArray &relativePath, const QByteArra if (relativePathString.isEmpty() || QFileInfo(relativePathString).isAbsolute()) return QString(); - const QString filePath = m_temporaryDir.path() + QLatin1Char('/') + relativePathString; + const QString filePath = m_temporaryDir.filePath(relativePathString).path(); if (!TestCase::writeFile(filePath, contents)) return QString(); return filePath; @@ -368,7 +368,7 @@ TemporaryCopiedDir::TemporaryCopiedDir(const QString &sourceDirPath) QString TemporaryCopiedDir::absolutePath(const QByteArray &relativePath) const { - return m_temporaryDir.path() + QLatin1Char('/') + QString::fromUtf8(relativePath); + return m_temporaryDir.filePath(QString::fromUtf8(relativePath)).path(); } FileWriterAndRemover::FileWriterAndRemover(const QString &filePath, const QByteArray &contents) diff --git a/src/plugins/cpptools/cpptoolstestcase.h b/src/plugins/cpptools/cpptoolstestcase.h index 08ae5b7c701..d03a1b297c6 100644 --- a/src/plugins/cpptools/cpptoolstestcase.h +++ b/src/plugins/cpptools/cpptoolstestcase.h @@ -155,7 +155,7 @@ public: TemporaryDir(); bool isValid() const { return m_isValid; } - QString path() const { return m_temporaryDir.path(); } + QString path() const { return m_temporaryDir.path().path(); } QString createFile(const QByteArray &relativePath, const QByteArray &contents); diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index d9ab3ca32d7..9a40a6a8ced 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -321,7 +321,7 @@ bool PuppetCreator::build(const QString &qmlPuppetProjectFilePath) const qmakeArguments.append("CONFIG+=release"); #endif qmakeArguments.append(qmlPuppetProjectFilePath); - buildSucceeded = startBuildProcess(buildDirectory.path(), qmakeCommand(), qmakeArguments, &progressDialog); + buildSucceeded = startBuildProcess(buildDirectory.path().path(), qmakeCommand(), qmakeArguments, &progressDialog); if (buildSucceeded) { progressDialog.show(); QString buildingCommand = buildCommand(); @@ -330,7 +330,7 @@ bool PuppetCreator::build(const QString &qmlPuppetProjectFilePath) const buildArguments.append("-j"); buildArguments.append(idealProcessCount()); } - buildSucceeded = startBuildProcess(buildDirectory.path(), buildingCommand, buildArguments, &progressDialog); + buildSucceeded = startBuildProcess(buildDirectory.path().path(), buildingCommand, buildArguments, &progressDialog); } if (!buildSucceeded) { diff --git a/src/plugins/qtsupport/qscxmlcgenerator.cpp b/src/plugins/qtsupport/qscxmlcgenerator.cpp index 3c2f0ff7cf3..98be1fd99e8 100644 --- a/src/plugins/qtsupport/qscxmlcgenerator.cpp +++ b/src/plugins/qtsupport/qscxmlcgenerator.cpp @@ -48,8 +48,8 @@ QScxmlcGenerator::QScxmlcGenerator(const Project *project, m_tmpdir("qscxmlgenerator") { QTC_ASSERT(targets.count() == 2, return); - m_header = m_tmpdir.path() + QLatin1Char('/') + targets[0].fileName(); - m_impl = m_tmpdir.path() + QLatin1Char('/') + targets[1].fileName(); + m_header = m_tmpdir.filePath(targets[0].fileName()).toString(); + m_impl = m_tmpdir.filePath(targets[1].fileName()).toString(); } Tasks QScxmlcGenerator::parseIssues(const QByteArray &processStderr) @@ -97,7 +97,7 @@ QStringList QScxmlcGenerator::arguments() const Utils::FilePath QScxmlcGenerator::workingDirectory() const { - return Utils::FilePath::fromString(m_tmpdir.path()); + return m_tmpdir.path(); } bool QScxmlcGenerator::prepareToRun(const QByteArray &sourceContents) diff --git a/src/plugins/qtsupport/qtprojectimporter.cpp b/src/plugins/qtsupport/qtprojectimporter.cpp index 4749271091c..4ee36992938 100644 --- a/src/plugins/qtsupport/qtprojectimporter.cpp +++ b/src/plugins/qtsupport/qtprojectimporter.cpp @@ -380,8 +380,8 @@ void QtSupportPlugin::testQtProjectImporter_oneProject() SysRootKitAspect::setSysRoot(kitTemplates[2], Utils::FilePath::fromString("/some/other/path")); QVector qmakePaths = {defaultQt->qmakeCommand(), - setupQmake(defaultQt, tempDir1.path()), - setupQmake(defaultQt, tempDir2.path())}; + setupQmake(defaultQt, tempDir1.path().path()), + setupQmake(defaultQt, tempDir2.path().path())}; for (int i = 1; i < qmakePaths.count(); ++i) QVERIFY(!QtVersionManager::version(Utils::equal(&BaseQtVersion::qmakeCommand, qmakePaths.at(i)))); @@ -412,7 +412,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject() // Finally set up importer: // Copy the directoryData so that importer is free to delete it later. - TestQtProjectImporter importer(Utils::FilePath::fromString(tempDir1.path()), + TestQtProjectImporter importer(tempDir1.path(), Utils::transform(testData, [](DirectoryData *i) { return static_cast(new DirectoryData(*i)); })); @@ -425,7 +425,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject() const QList buildInfo = importer.import(Utils::FilePath::fromString(appDir), true); // VALIDATE: Basic TestImporter state: - QCOMPARE(importer.projectFilePath().toString(), tempDir1.path()); + QCOMPARE(importer.projectFilePath(), tempDir1.path()); QCOMPARE(importer.allDeleted(), true); // VALIDATE: Result looks reasonable: @@ -529,7 +529,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject() QCOMPARE(newKitId, newKitIdAfterImport); // VALIDATE: Importer state - QCOMPARE(importer.projectFilePath().toString(), tempDir1.path()); + QCOMPARE(importer.projectFilePath(), tempDir1.path()); QCOMPARE(importer.allDeleted(), true); if (kitIsPersistent) {