From 6a4123a96ffddd950d94268b49c47923a63f29cc Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 13 Dec 2022 12:58:35 +0100 Subject: [PATCH] QmlProjectManager: Even more FilePath use Change-Id: I4990b9171598d7f277f8e8e5a2b3e0fb1a3375d0 Reviewed-by: Thomas Hartmann Reviewed-by: --- .../fileformat/qmlprojectfileformat.cpp | 8 +++++- .../fileformat/qmlprojectitem.cpp | 8 +++--- .../fileformat/qmlprojectitem.h | 13 +++++----- src/plugins/qmlprojectmanager/qmlproject.cpp | 21 ++++++++-------- .../fileformat/tst_fileformat.cpp | 25 +++++++++++-------- 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp index 5b850e91741..f52f9a36580 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp @@ -2,15 +2,21 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "qmlprojectfileformat.h" + #include "qmlprojectitem.h" #include "filefilteritems.h" + #include +#include + #include #include #include +using namespace Utils; + enum { debug = false }; @@ -108,7 +114,7 @@ std::unique_ptr QmlProjectFileFormat::parseProjectFile(const Uti const auto targetDirectoryPropery = rootNode->property("targetDirectory"); if (targetDirectoryPropery.isValid()) - projectItem->setTargetDirectory(targetDirectoryPropery.value.toString()); + projectItem->setTargetDirectory(FilePath::fromVariant(targetDirectoryPropery.value)); const auto qtForMCUProperty = rootNode->property("qtForMCUs"); if (qtForMCUProperty.isValid() && qtForMCUProperty.value.toBool()) diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp index 4f789211733..572394c6a63 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp @@ -8,10 +8,12 @@ #include +using namespace Utils; + namespace QmlProjectManager { // kind of initialization -void QmlProjectItem::setSourceDirectory(const QString &directoryPath) +void QmlProjectItem::setSourceDirectory(const FilePath &directoryPath) { if (m_sourceDirectory == directoryPath) return; @@ -19,7 +21,7 @@ void QmlProjectItem::setSourceDirectory(const QString &directoryPath) m_sourceDirectory = directoryPath; for (auto &fileFilter : m_content) { - fileFilter->setDefaultDirectory(directoryPath); + fileFilter->setDefaultDirectory(directoryPath.toFSPathString()); connect(fileFilter.get(), &FileFilterBaseItem::filesChanged, this, @@ -27,7 +29,7 @@ void QmlProjectItem::setSourceDirectory(const QString &directoryPath) } } -void QmlProjectItem::setTargetDirectory(const QString &directoryPath) +void QmlProjectItem::setTargetDirectory(const FilePath &directoryPath) { m_targetDirectory = directoryPath; } diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h index 71732ef65ec..83acd310e52 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h @@ -6,6 +6,7 @@ #include "filefilteritems.h" #include +#include #include #include @@ -21,10 +22,10 @@ class QmlProjectItem : public QObject Q_OBJECT public: - QString sourceDirectory() const { return m_sourceDirectory; } - void setSourceDirectory(const QString &directoryPath); - QString targetDirectory() const { return m_targetDirectory; } - void setTargetDirectory(const QString &directoryPath); + const Utils::FilePath &sourceDirectory() const { return m_sourceDirectory; } + void setSourceDirectory(const Utils::FilePath &directoryPath); + const Utils::FilePath &targetDirectory() const { return m_targetDirectory; } + void setTargetDirectory(const Utils::FilePath &directoryPath); bool qtForMCUs() const { return m_qtForMCUs; } void setQtForMCUs(bool qtForMCUs); @@ -80,8 +81,8 @@ signals: void qmlFilesChanged(const QSet &, const QSet &); protected: - QString m_sourceDirectory; - QString m_targetDirectory; + Utils::FilePath m_sourceDirectory; + Utils::FilePath m_targetDirectory; QStringList m_importPaths; QStringList m_fileSelectors; bool m_multilanguageSupport; diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index cbbb13af427..e3508fea806 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -214,9 +214,9 @@ void QmlBuildSystem::parseProject(RefreshOptions options) } } if (m_projectItem) { - m_projectItem->setSourceDirectory(canonicalProjectDir().toString()); + m_projectItem->setSourceDirectory(canonicalProjectDir()); if (m_projectItem->targetDirectory().isEmpty()) - m_projectItem->setTargetDirectory(canonicalProjectDir().toString()); + m_projectItem->setTargetDirectory(canonicalProjectDir()); if (auto modelManager = QmlJS::ModelManagerInterface::instance()) { QStringList files = m_projectItem->files(); @@ -415,23 +415,22 @@ void QmlBuildSystem::setMainFile(const QString &mainFilePath) m_projectItem->setMainFile(mainFilePath); } -Utils::FilePath QmlBuildSystem::targetDirectory() const +FilePath QmlBuildSystem::targetDirectory() const { if (DeviceTypeKitAspect::deviceTypeId(kit()) == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) return canonicalProjectDir(); - return m_projectItem ? Utils::FilePath::fromString(m_projectItem->targetDirectory()) - : Utils::FilePath(); + return m_projectItem ? m_projectItem->targetDirectory() : FilePath(); } -Utils::FilePath QmlBuildSystem::targetFile(const Utils::FilePath &sourceFile) const +FilePath QmlBuildSystem::targetFile(const FilePath &sourceFile) const { - const QDir sourceDir(m_projectItem ? m_projectItem->sourceDirectory() - : canonicalProjectDir().toString()); - const QDir targetDir(targetDirectory().toString()); - const QString relative = sourceDir.relativeFilePath(sourceFile.toString()); - return Utils::FilePath::fromString(QDir::cleanPath(targetDir.absoluteFilePath(relative))); + const FilePath sourceDir = m_projectItem ? m_projectItem->sourceDirectory() + : canonicalProjectDir(); + const FilePath targetDir = targetDirectory(); + const FilePath relative = sourceFile.relativePathFrom(sourceDir); + return targetDir.resolvePath(relative); } Utils::EnvironmentItems QmlBuildSystem::environment() const diff --git a/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp b/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp index 028a29b01a7..45624ab361a 100644 --- a/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp +++ b/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp @@ -12,6 +12,7 @@ //TESTED_COMPONENT=src/plugins/qmlprojectmanager/fileformat using namespace QmlProjectManager; +using namespace Utils; #define COMPARE_AS_SETS(actual, expected) \ do {\ @@ -39,7 +40,8 @@ tst_FileFormat::tst_FileFormat() { } -static QString testDataDir = QLatin1String(SRCDIR "/data"); +const QString testDataDir = QLatin1String(SRCDIR "/data"); +const FilePath testDataDirPath = FilePath::fromString(testDataDir); static std::unique_ptr loadQmlProject(QString name, QString *error) { @@ -50,6 +52,7 @@ static std::unique_ptr loadQmlProject(QString name, QString *err void tst_FileFormat::testFileFilter() { QString error; + // // Search for qml files in directory + subdirectories // @@ -58,7 +61,7 @@ void tst_FileFormat::testFileFilter() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" << testDataDir + "/file2.qml" @@ -74,7 +77,7 @@ void tst_FileFormat::testFileFilter() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" << testDataDir + "/file2.qml"); @@ -89,7 +92,7 @@ void tst_FileFormat::testFileFilter() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QStringList expectedFiles(QStringList() << testDataDir + "/subdir/file3.qml"); COMPARE_AS_SETS(project->files(), expectedFiles); @@ -103,7 +106,7 @@ void tst_FileFormat::testFileFilter() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" << testDataDir + "/file2.qml" @@ -120,7 +123,7 @@ void tst_FileFormat::testFileFilter() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" << testDataDir + "/file2.qml"); @@ -135,7 +138,7 @@ void tst_FileFormat::testFileFilter() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QStringList expectedFiles(QStringList() << testDataDir + "/image.gif"); COMPARE_AS_SETS(project->files(), expectedFiles); @@ -149,7 +152,7 @@ void tst_FileFormat::testFileFilter() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QStringList expectedFiles(QStringList() << testDataDir + "/image.gif"); COMPARE_AS_SETS(project->files(), expectedFiles); @@ -163,7 +166,7 @@ void tst_FileFormat::testFileFilter() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QStringList expectedFiles(QStringList() << testDataDir + "/image.gif"); COMPARE_AS_SETS(project->files(), expectedFiles); @@ -180,7 +183,7 @@ void tst_FileFormat::testMatchesFile() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); QVERIFY(project->matchesFile(testDataDir + "/file1.qml")); QVERIFY(project->matchesFile(testDataDir + "/notyetexistingfile.qml")); @@ -199,7 +202,7 @@ void tst_FileFormat::testLibraryPaths() QVERIFY(project); QVERIFY(error.isEmpty()); - project->setSourceDirectory(testDataDir); + project->setSourceDirectory(testDataDirPath); const QDir base(testDataDir); const QStringList expectedPaths({base.relativeFilePath(SRCDIR "/otherLibrary"),