aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2023-10-17 16:15:59 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2023-10-18 07:48:37 +0000
commitb239b3a104e9ca249dec16eab29649ffe8c5b5a7 (patch)
tree7c953db49c88f92a169ff1e2569f8156bdbb7cf8
parentcb0e12ac3a7538aeb865103788429f18fdd84100 (diff)
Loader: Emit a proper error when binding to module properties
... in Project items. This can only happen for the pseudo-qbs module that we load for Project items. Fixes: QBS-1752 Change-Id: I34fae59e14bcd2d3c06aedcf43d5c93583a3a5de Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r--src/lib/corelib/loader/modulepropertymerger.cpp5
-rw-r--r--tests/auto/language/testdata/erroneous/module-property-binding-in-project.qbs3
-rw-r--r--tests/auto/language/tst_language.cpp2
3 files changed, 10 insertions, 0 deletions
diff --git a/src/lib/corelib/loader/modulepropertymerger.cpp b/src/lib/corelib/loader/modulepropertymerger.cpp
index a789d1adc..c9dd56ccf 100644
--- a/src/lib/corelib/loader/modulepropertymerger.cpp
+++ b/src/lib/corelib/loader/modulepropertymerger.cpp
@@ -176,6 +176,11 @@ void ModulePropertyMerger::mergePropertyFromLocalInstance(
Item *loadingItem, const QString &loadingName, Item *globalInstance,
const QString &name, const ValuePtr &value)
{
+ if (loadingItem->type() == ItemType::Project) {
+ throw ErrorInfo(Tr::tr("Module properties cannot be set in Project items."),
+ value->location());
+ }
+
const PropertyDeclaration decl = globalInstance->propertyDeclaration(name);
if (!decl.isValid()) {
if (value->type() == Value::ItemValueType || value->createdByPropertiesBlock())
diff --git a/tests/auto/language/testdata/erroneous/module-property-binding-in-project.qbs b/tests/auto/language/testdata/erroneous/module-property-binding-in-project.qbs
new file mode 100644
index 000000000..667088c17
--- /dev/null
+++ b/tests/auto/language/testdata/erroneous/module-property-binding-in-project.qbs
@@ -0,0 +1,3 @@
+Project {
+ qbs.sysroot: "/"
+}
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp
index 0310205a7..6a29876dc 100644
--- a/tests/auto/language/tst_language.cpp
+++ b/tests/auto/language/tst_language.cpp
@@ -1019,6 +1019,8 @@ void TestLanguage::erroneousFiles_data()
<< "missing-js-file-module.qbs.*Cannot open '.*javascriptfile.js'";
QTest::newRow("frozen-object") << "'key' is read-only";
QTest::newRow("frozen-object-list") << "object is not extensible";
+ QTest::newRow("module-property-binding-in-project")
+ << "Module properties cannot be set in Project items";
}
void TestLanguage::erroneousFiles()