From cadca7212eeb367a2c1f2d3c50f976734d9a4dff Mon Sep 17 00:00:00 2001 From: Burak Hancerli Date: Tue, 25 Apr 2023 15:47:52 +0200 Subject: QmlDesigner: Fix project file getter/setter issues Task-number: QDS-9781 Change-Id: I2df8cca1c4e5cd10563621b849fb54b29c0d155d (cherry picked from commit d5847e9e115a1b4a0bf36cea652724fdaeda28c3) Reviewed-by: Tim Jenssen Reviewed-by: Thomas Hartmann --- .../buildsystem/projectitem/converters.cpp | 14 ++++++--- .../buildsystem/projectitem/qmlprojectitem.cpp | 35 ++++++++++++++++++++-- .../buildsystem/projectitem/qmlprojectitem.h | 11 ++++++- .../buildsystem/qmlbuildsystem.cpp | 17 ++++++++++- .../qmlprojectmanager/buildsystem/qmlbuildsystem.h | 4 +++ .../data/converter/test-set-1/testfile.qmltojson | 1 + .../data/converter/test-set-2/testfile.jsontoqml | 2 +- .../data/converter/test-set-2/testfile.qmltojson | 3 +- .../data/converter/test-set-3/testfile.jsontoqml | 2 +- .../data/converter/test-set-3/testfile.qmltojson | 3 +- .../data/converter/test-set-4/testfile.jsontoqml | 2 +- .../data/converter/test-set-4/testfile.qmltojson | 1 + .../data/converter/test-set-5/testfile.qmltojson | 1 + .../qmlprojectmanager/projectitem/test-getters.cpp | 18 +++++++++-- .../qmlprojectmanager/projectitem/test-setters.cpp | 25 +++++++++++----- 15 files changed, 116 insertions(+), 23 deletions(-) diff --git a/src/plugins/qmlprojectmanager/buildsystem/projectitem/converters.cpp b/src/plugins/qmlprojectmanager/buildsystem/projectitem/converters.cpp index 645335f8b9..aa0abf8ffe 100644 --- a/src/plugins/qmlprojectmanager/buildsystem/projectitem/converters.cpp +++ b/src/plugins/qmlprojectmanager/buildsystem/projectitem/converters.cpp @@ -135,7 +135,7 @@ QString jsonToQmlProject(const QJsonObject &rootObject) appendBreak(); appendString("qdsVersion", versionConfig["designStudio"].toString()); appendString("quickVersion", versionConfig["qtQuick"].toString()); - appendBool("qt6Project", versionConfig["qtQuick"].toString().startsWith("6.")); + appendBool("qt6Project", versionConfig["qt"].toString() == "6"); appendBool("qtForMCUs", rootObject["mcuConfig"].toObject().isEmpty()); appendBreak(); appendBool("multilanguageSupport", languageConfig["multiLanguageSupport"].toBool()); @@ -217,6 +217,7 @@ QJsonObject qmlProjectTojson(const Utils::FilePath &projectFile) for (const QString &propName : rootNode->propertyNames()) { QJsonObject *currentObj = &rootObject; QString objKey = propName; + QJsonValue value = rootNode->property(propName).value.toJsonValue(); if (propName.contains("language", Qt::CaseInsensitive)) { currentObj = &languageObject; @@ -240,11 +241,12 @@ QJsonObject qmlProjectTojson(const Utils::FilePath &projectFile) currentObj = &mcuObject; objKey = "mcuEnabled"; } else if (propName.contains("qt6project", Qt::CaseInsensitive)) { - // we are skipping these ones in the new json format - continue; + currentObj = &versionObject; + objKey = "qt"; + value = rootNode->property(propName).value.toBool() ? "6" : "5"; } - currentObj->insert(objKey, rootNode->property(propName).value.toJsonValue()); + currentObj->insert(objKey, value); } // add missing non-object props if any @@ -252,6 +254,10 @@ QJsonObject qmlProjectTojson(const Utils::FilePath &projectFile) runConfigObject.insert("fileSelectors", QJsonArray{}); } + if (!versionObject.contains("qt")) { + versionObject.insert("qt", "5"); + } + // convert the the object props for (const QmlJS::SimpleReaderNode::Ptr &childNode : rootNode->children()) { if (childNode->name().contains("files", Qt::CaseInsensitive)) { diff --git a/src/plugins/qmlprojectmanager/buildsystem/projectitem/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/buildsystem/projectitem/qmlprojectitem.cpp index 76ad2e8836..c216ee320b 100644 --- a/src/plugins/qmlprojectmanager/buildsystem/projectitem/qmlprojectitem.cpp +++ b/src/plugins/qmlprojectmanager/buildsystem/projectitem/qmlprojectitem.cpp @@ -131,9 +131,40 @@ QJsonObject QmlProjectItem::project() const return m_project; } -bool QmlProjectItem::isQt6Project() const +QString QmlProjectItem::versionQt() const { - return m_project["versions"].toObject()["qtQuick"].toString().startsWith("6."); + return m_project["versions"].toObject()["qt"].toString(); +} + +void QmlProjectItem::setVersionQt(const QString &version) +{ + QJsonObject targetObj = m_project["versions"].toObject(); + targetObj["qt"] = version; + insertAndUpdateProjectFile("versions", targetObj); +} + +QString QmlProjectItem::versionQtQuick() const +{ + return m_project["versions"].toObject()["qtQuick"].toString(); +} + +void QmlProjectItem::setVersionQtQuick(const QString &version) +{ + QJsonObject targetObj = m_project["versions"].toObject(); + targetObj["qtQuick"] = version; + insertAndUpdateProjectFile("versions", targetObj); +} + +QString QmlProjectItem::versionDesignStudio() const +{ + return m_project["versions"].toObject()["designStudio"].toString(); +} + +void QmlProjectItem::setVersionDesignStudio(const QString &version) +{ + QJsonObject targetObj = m_project["versions"].toObject(); + targetObj["designStudio"] = version; + insertAndUpdateProjectFile("versions", targetObj); } QStringList QmlProjectItem::importPaths() const diff --git a/src/plugins/qmlprojectmanager/buildsystem/projectitem/qmlprojectitem.h b/src/plugins/qmlprojectmanager/buildsystem/projectitem/qmlprojectitem.h index 48e389db08..30e85d53dc 100644 --- a/src/plugins/qmlprojectmanager/buildsystem/projectitem/qmlprojectitem.h +++ b/src/plugins/qmlprojectmanager/buildsystem/projectitem/qmlprojectitem.h @@ -29,7 +29,16 @@ public: explicit QmlProjectItem(const Utils::FilePath &filePath); bool isQt4McuProject() const; - bool isQt6Project() const; + + + QString versionQt() const; + void setVersionQt(const QString &version); + + QString versionQtQuick() const; + void setVersionQtQuick(const QString &version); + + QString versionDesignStudio() const; + void setVersionDesignStudio(const QString &version); Utils::FilePath sourceDirectory() const; QString targetDirectory() const; diff --git a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp index 0872f24ede..e06ac211df 100644 --- a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp +++ b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp @@ -484,7 +484,7 @@ bool QmlBuildSystem::qtForMCUs() const bool QmlBuildSystem::qt6Project() const { - return m_projectItem->isQt6Project(); + return m_projectItem->versionQt() == "6"; } Utils::EnvironmentItems QmlBuildSystem::environment() const @@ -547,4 +547,19 @@ Utils::FilePaths QmlBuildSystem::files() const return m_projectItem->files(); } +QString QmlBuildSystem::versionQt() const +{ + return m_projectItem->versionQt(); +} + +QString QmlBuildSystem::versionQtQuick() const +{ + return m_projectItem->versionQtQuick(); +} + +QString QmlBuildSystem::versionDesignStudio() const +{ + return m_projectItem->versionDesignStudio(); +} + } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h index d45658d98b..914b8d4c0f 100644 --- a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h +++ b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h @@ -81,6 +81,10 @@ public: QStringList importPaths() const; Utils::FilePaths files() const; + QString versionQt() const; + QString versionQtQuick() const; + QString versionDesignStudio() const; + bool addFiles(const QStringList &filePaths); void refreshProjectFile(); diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-1/testfile.qmltojson b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-1/testfile.qmltojson index 358a381a97..9abc7a76c3 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-1/testfile.qmltojson +++ b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-1/testfile.qmltojson @@ -171,6 +171,7 @@ }, "versions": { "designStudio": "4.0", + "qt": "6", "qtQuick": "6.2" } } diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-2/testfile.jsontoqml b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-2/testfile.jsontoqml index 47d4912c86..19276581aa 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-2/testfile.jsontoqml +++ b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-2/testfile.jsontoqml @@ -12,7 +12,7 @@ Project { qdsVersion: "3.9" quickVersion: "" - qt6Project: false + qt6Project: true qtForMCUs: true multilanguageSupport: true diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-2/testfile.qmltojson b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-2/testfile.qmltojson index f29227dea8..64aa062313 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-2/testfile.qmltojson +++ b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-2/testfile.qmltojson @@ -168,6 +168,7 @@ ] }, "versions": { - "designStudio": "3.9" + "designStudio": "3.9", + "qt": "6" } } diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-3/testfile.jsontoqml b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-3/testfile.jsontoqml index cb11fae9d3..1964ce018d 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-3/testfile.jsontoqml +++ b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-3/testfile.jsontoqml @@ -12,7 +12,7 @@ Project { qdsVersion: "3.0" quickVersion: "" - qt6Project: false + qt6Project: true qtForMCUs: true multilanguageSupport: true diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-3/testfile.qmltojson b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-3/testfile.qmltojson index 9bf016a7e2..1892b9f3f9 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-3/testfile.qmltojson +++ b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-3/testfile.qmltojson @@ -155,6 +155,7 @@ "shaderTool": { }, "versions": { - "designStudio": "3.0" + "designStudio": "3.0", + "qt": "6" } } diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-4/testfile.jsontoqml b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-4/testfile.jsontoqml index b0819a79a4..10a20bd991 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-4/testfile.jsontoqml +++ b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-4/testfile.jsontoqml @@ -12,7 +12,7 @@ Project { qdsVersion: "" quickVersion: "" - qt6Project: false + qt6Project: true qtForMCUs: true multilanguageSupport: false diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-4/testfile.qmltojson b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-4/testfile.qmltojson index 2f12130de3..3ccd15a839 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-4/testfile.qmltojson +++ b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-4/testfile.qmltojson @@ -109,5 +109,6 @@ "shaderTool": { }, "versions": { + "qt": "6" } } diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-5/testfile.qmltojson b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-5/testfile.qmltojson index b5e7f5f3b7..5635cf1f63 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-5/testfile.qmltojson +++ b/tests/auto/qml/qmlprojectmanager/projectitem/data/converter/test-set-5/testfile.qmltojson @@ -86,5 +86,6 @@ "shaderTool": { }, "versions": { + "qt": "5" } } diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/test-getters.cpp b/tests/auto/qml/qmlprojectmanager/projectitem/test-getters.cpp index 26be73b9ce..9a3367e3cc 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/test-getters.cpp +++ b/tests/auto/qml/qmlprojectmanager/projectitem/test-getters.cpp @@ -34,10 +34,22 @@ TEST(QmlProjectProjectItemGetterTests, GetMcuProject) ASSERT_EQ(dataSet.projectItem2.isQt4McuProject(), false); } -TEST(QmlProjectProjectItemGetterTests, GetQt6Project) +TEST(QmlProjectProjectItemGetterTests, GetQtVersion) { - ASSERT_EQ(dataSet.projectItem1.isQt6Project(), true); - ASSERT_EQ(dataSet.projectItem2.isQt6Project(), false); + ASSERT_EQ(dataSet.projectItem1.versionQt(), "6"); + ASSERT_EQ(dataSet.projectItem2.versionQt(), "5"); +} + +TEST(QmlProjectProjectItemGetterTests, GetQtQuickVersion) +{ + ASSERT_EQ(dataSet.projectItem1.versionQtQuick(), "6.2"); + ASSERT_EQ(dataSet.projectItem2.versionQtQuick(), QString()); +} + +TEST(QmlProjectProjectItemGetterTests, GetDesignStudioVersion) +{ + ASSERT_EQ(dataSet.projectItem1.versionDesignStudio(), "3.9"); + ASSERT_EQ(dataSet.projectItem2.versionDesignStudio(), QString()); } TEST(QmlProjectProjectItemGetterTests, GetSourceDirectory) diff --git a/tests/auto/qml/qmlprojectmanager/projectitem/test-setters.cpp b/tests/auto/qml/qmlprojectmanager/projectitem/test-setters.cpp index 82524aabd0..30a99d9e21 100644 --- a/tests/auto/qml/qmlprojectmanager/projectitem/test-setters.cpp +++ b/tests/auto/qml/qmlprojectmanager/projectitem/test-setters.cpp @@ -114,6 +114,24 @@ TEST(QmlProjectProjectItemSetterTests, SetForceFreeType) testerTemplate(&QmlProjectItem::setForceFreeType, &QmlProjectItem::forceFreeType, false); } +TEST(QmlProjectProjectItemSetterTests, SetQtVersion) +{ + testerTemplate(&QmlProjectItem::setVersionQt, &QmlProjectItem::versionQt, "6"); + testerTemplate(&QmlProjectItem::setVersionQt, &QmlProjectItem::versionQt, "5.3"); +} + +TEST(QmlProjectProjectItemSetterTests, SetQtQuickVersion) +{ + testerTemplate(&QmlProjectItem::setVersionQtQuick, &QmlProjectItem::versionQtQuick, "6"); + testerTemplate(&QmlProjectItem::setVersionQtQuick, &QmlProjectItem::versionQtQuick, "5.3"); +} + +TEST(QmlProjectProjectItemSetterTests, SetDesignStudio) +{ + testerTemplate(&QmlProjectItem::setVersionDesignStudio, &QmlProjectItem::versionDesignStudio, "6"); + testerTemplate(&QmlProjectItem::setVersionDesignStudio, &QmlProjectItem::versionDesignStudio, "5.3"); +} + /** TEST(QmlProjectProjectItemSetterTests, SetEnvironment) { @@ -129,13 +147,6 @@ TEST(QmlProjectProjectItemSetterTests, SetEnvironment) // ASSERT_EQ(dataSet.projectItem2.isQt4McuProject(), false); //} -// not available as of now -//TEST(QmlProjectProjectItemSetterTests, SetQt6Project) -//{ -// ASSERT_EQ(dataSet.projectItem1.isQt6Project(), true); -// ASSERT_EQ(dataSet.projectItem2.isQt6Project(), false); -//} - // not available as of now //TEST(QmlProjectProjectItemSetterTests, SetSourceDirectory) //{ -- cgit v1.2.3