QmlProjectManager: Even more FilePath use

Change-Id: I4990b9171598d7f277f8e8e5a2b3e0fb1a3375d0
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2022-12-13 12:58:35 +01:00
parent 5c7c102f3e
commit 6a4123a96f
5 changed files with 43 additions and 32 deletions

View File

@@ -2,15 +2,21 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
#include "qmlprojectfileformat.h" #include "qmlprojectfileformat.h"
#include "qmlprojectitem.h" #include "qmlprojectitem.h"
#include "filefilteritems.h" #include "filefilteritems.h"
#include <qmljs/qmljssimplereader.h> #include <qmljs/qmljssimplereader.h>
#include <utils/filepath.h>
#include <QDebug> #include <QDebug>
#include <QVariant> #include <QVariant>
#include <memory> #include <memory>
using namespace Utils;
enum { enum {
debug = false debug = false
}; };
@@ -108,7 +114,7 @@ std::unique_ptr<QmlProjectItem> QmlProjectFileFormat::parseProjectFile(const Uti
const auto targetDirectoryPropery = rootNode->property("targetDirectory"); const auto targetDirectoryPropery = rootNode->property("targetDirectory");
if (targetDirectoryPropery.isValid()) if (targetDirectoryPropery.isValid())
projectItem->setTargetDirectory(targetDirectoryPropery.value.toString()); projectItem->setTargetDirectory(FilePath::fromVariant(targetDirectoryPropery.value));
const auto qtForMCUProperty = rootNode->property("qtForMCUs"); const auto qtForMCUProperty = rootNode->property("qtForMCUs");
if (qtForMCUProperty.isValid() && qtForMCUProperty.value.toBool()) if (qtForMCUProperty.isValid() && qtForMCUProperty.value.toBool())

View File

@@ -8,10 +8,12 @@
#include <QDir> #include <QDir>
using namespace Utils;
namespace QmlProjectManager { namespace QmlProjectManager {
// kind of initialization // kind of initialization
void QmlProjectItem::setSourceDirectory(const QString &directoryPath) void QmlProjectItem::setSourceDirectory(const FilePath &directoryPath)
{ {
if (m_sourceDirectory == directoryPath) if (m_sourceDirectory == directoryPath)
return; return;
@@ -19,7 +21,7 @@ void QmlProjectItem::setSourceDirectory(const QString &directoryPath)
m_sourceDirectory = directoryPath; m_sourceDirectory = directoryPath;
for (auto &fileFilter : m_content) { for (auto &fileFilter : m_content) {
fileFilter->setDefaultDirectory(directoryPath); fileFilter->setDefaultDirectory(directoryPath.toFSPathString());
connect(fileFilter.get(), connect(fileFilter.get(),
&FileFilterBaseItem::filesChanged, &FileFilterBaseItem::filesChanged,
this, 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; m_targetDirectory = directoryPath;
} }

View File

@@ -6,6 +6,7 @@
#include "filefilteritems.h" #include "filefilteritems.h"
#include <utils/environment.h> #include <utils/environment.h>
#include <utils/filepath.h>
#include <QObject> #include <QObject>
#include <QSet> #include <QSet>
@@ -21,10 +22,10 @@ class QmlProjectItem : public QObject
Q_OBJECT Q_OBJECT
public: public:
QString sourceDirectory() const { return m_sourceDirectory; } const Utils::FilePath &sourceDirectory() const { return m_sourceDirectory; }
void setSourceDirectory(const QString &directoryPath); void setSourceDirectory(const Utils::FilePath &directoryPath);
QString targetDirectory() const { return m_targetDirectory; } const Utils::FilePath &targetDirectory() const { return m_targetDirectory; }
void setTargetDirectory(const QString &directoryPath); void setTargetDirectory(const Utils::FilePath &directoryPath);
bool qtForMCUs() const { return m_qtForMCUs; } bool qtForMCUs() const { return m_qtForMCUs; }
void setQtForMCUs(bool qtForMCUs); void setQtForMCUs(bool qtForMCUs);
@@ -80,8 +81,8 @@ signals:
void qmlFilesChanged(const QSet<QString> &, const QSet<QString> &); void qmlFilesChanged(const QSet<QString> &, const QSet<QString> &);
protected: protected:
QString m_sourceDirectory; Utils::FilePath m_sourceDirectory;
QString m_targetDirectory; Utils::FilePath m_targetDirectory;
QStringList m_importPaths; QStringList m_importPaths;
QStringList m_fileSelectors; QStringList m_fileSelectors;
bool m_multilanguageSupport; bool m_multilanguageSupport;

View File

@@ -214,9 +214,9 @@ void QmlBuildSystem::parseProject(RefreshOptions options)
} }
} }
if (m_projectItem) { if (m_projectItem) {
m_projectItem->setSourceDirectory(canonicalProjectDir().toString()); m_projectItem->setSourceDirectory(canonicalProjectDir());
if (m_projectItem->targetDirectory().isEmpty()) if (m_projectItem->targetDirectory().isEmpty())
m_projectItem->setTargetDirectory(canonicalProjectDir().toString()); m_projectItem->setTargetDirectory(canonicalProjectDir());
if (auto modelManager = QmlJS::ModelManagerInterface::instance()) { if (auto modelManager = QmlJS::ModelManagerInterface::instance()) {
QStringList files = m_projectItem->files(); QStringList files = m_projectItem->files();
@@ -415,23 +415,22 @@ void QmlBuildSystem::setMainFile(const QString &mainFilePath)
m_projectItem->setMainFile(mainFilePath); m_projectItem->setMainFile(mainFilePath);
} }
Utils::FilePath QmlBuildSystem::targetDirectory() const FilePath QmlBuildSystem::targetDirectory() const
{ {
if (DeviceTypeKitAspect::deviceTypeId(kit()) if (DeviceTypeKitAspect::deviceTypeId(kit())
== ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE)
return canonicalProjectDir(); return canonicalProjectDir();
return m_projectItem ? Utils::FilePath::fromString(m_projectItem->targetDirectory()) return m_projectItem ? m_projectItem->targetDirectory() : FilePath();
: Utils::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() const FilePath sourceDir = m_projectItem ? m_projectItem->sourceDirectory()
: canonicalProjectDir().toString()); : canonicalProjectDir();
const QDir targetDir(targetDirectory().toString()); const FilePath targetDir = targetDirectory();
const QString relative = sourceDir.relativeFilePath(sourceFile.toString()); const FilePath relative = sourceFile.relativePathFrom(sourceDir);
return Utils::FilePath::fromString(QDir::cleanPath(targetDir.absoluteFilePath(relative))); return targetDir.resolvePath(relative);
} }
Utils::EnvironmentItems QmlBuildSystem::environment() const Utils::EnvironmentItems QmlBuildSystem::environment() const

View File

@@ -12,6 +12,7 @@
//TESTED_COMPONENT=src/plugins/qmlprojectmanager/fileformat //TESTED_COMPONENT=src/plugins/qmlprojectmanager/fileformat
using namespace QmlProjectManager; using namespace QmlProjectManager;
using namespace Utils;
#define COMPARE_AS_SETS(actual, expected) \ #define COMPARE_AS_SETS(actual, expected) \
do {\ 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<QmlProjectItem> loadQmlProject(QString name, QString *error) static std::unique_ptr<QmlProjectItem> loadQmlProject(QString name, QString *error)
{ {
@@ -50,6 +52,7 @@ static std::unique_ptr<QmlProjectItem> loadQmlProject(QString name, QString *err
void tst_FileFormat::testFileFilter() void tst_FileFormat::testFileFilter()
{ {
QString error; QString error;
// //
// Search for qml files in directory + subdirectories // Search for qml files in directory + subdirectories
// //
@@ -58,7 +61,7 @@ void tst_FileFormat::testFileFilter()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
<< testDataDir + "/file2.qml" << testDataDir + "/file2.qml"
@@ -74,7 +77,7 @@ void tst_FileFormat::testFileFilter()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
<< testDataDir + "/file2.qml"); << testDataDir + "/file2.qml");
@@ -89,7 +92,7 @@ void tst_FileFormat::testFileFilter()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QStringList expectedFiles(QStringList() << testDataDir + "/subdir/file3.qml"); QStringList expectedFiles(QStringList() << testDataDir + "/subdir/file3.qml");
COMPARE_AS_SETS(project->files(), expectedFiles); COMPARE_AS_SETS(project->files(), expectedFiles);
@@ -103,7 +106,7 @@ void tst_FileFormat::testFileFilter()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
<< testDataDir + "/file2.qml" << testDataDir + "/file2.qml"
@@ -120,7 +123,7 @@ void tst_FileFormat::testFileFilter()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml"
<< testDataDir + "/file2.qml"); << testDataDir + "/file2.qml");
@@ -135,7 +138,7 @@ void tst_FileFormat::testFileFilter()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QStringList expectedFiles(QStringList() << testDataDir + "/image.gif"); QStringList expectedFiles(QStringList() << testDataDir + "/image.gif");
COMPARE_AS_SETS(project->files(), expectedFiles); COMPARE_AS_SETS(project->files(), expectedFiles);
@@ -149,7 +152,7 @@ void tst_FileFormat::testFileFilter()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QStringList expectedFiles(QStringList() << testDataDir + "/image.gif"); QStringList expectedFiles(QStringList() << testDataDir + "/image.gif");
COMPARE_AS_SETS(project->files(), expectedFiles); COMPARE_AS_SETS(project->files(), expectedFiles);
@@ -163,7 +166,7 @@ void tst_FileFormat::testFileFilter()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QStringList expectedFiles(QStringList() << testDataDir + "/image.gif"); QStringList expectedFiles(QStringList() << testDataDir + "/image.gif");
COMPARE_AS_SETS(project->files(), expectedFiles); COMPARE_AS_SETS(project->files(), expectedFiles);
@@ -180,7 +183,7 @@ void tst_FileFormat::testMatchesFile()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
QVERIFY(project->matchesFile(testDataDir + "/file1.qml")); QVERIFY(project->matchesFile(testDataDir + "/file1.qml"));
QVERIFY(project->matchesFile(testDataDir + "/notyetexistingfile.qml")); QVERIFY(project->matchesFile(testDataDir + "/notyetexistingfile.qml"));
@@ -199,7 +202,7 @@ void tst_FileFormat::testLibraryPaths()
QVERIFY(project); QVERIFY(project);
QVERIFY(error.isEmpty()); QVERIFY(error.isEmpty());
project->setSourceDirectory(testDataDir); project->setSourceDirectory(testDataDirPath);
const QDir base(testDataDir); const QDir base(testDataDir);
const QStringList expectedPaths({base.relativeFilePath(SRCDIR "/otherLibrary"), const QStringList expectedPaths({base.relativeFilePath(SRCDIR "/otherLibrary"),