From b239b3a104e9ca249dec16eab29649ffe8c5b5a7 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 17 Oct 2023 16:15:59 +0200 Subject: [PATCH] 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 --- src/lib/corelib/loader/modulepropertymerger.cpp | 5 +++++ .../erroneous/module-property-binding-in-project.qbs | 3 +++ tests/auto/language/tst_language.cpp | 2 ++ 3 files changed, 10 insertions(+) create mode 100644 tests/auto/language/testdata/erroneous/module-property-binding-in-project.qbs diff --git a/src/lib/corelib/loader/modulepropertymerger.cpp b/src/lib/corelib/loader/modulepropertymerger.cpp index a789d1adcb..c9dd56ccf2 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 0000000000..667088c171 --- /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 0310205a73..6a29876dc9 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()