From cacad5f881b7621eeffe9eeb11ad31f741c5d6c4 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 17 Aug 2016 15:32:35 +0200 Subject: Fix scoping issue for list properties In the original fix for this issue (e34d268ba9), we forgot to take the "next" values into account. Task-number: QBS-955 Change-Id: Ie955af1b09250d6a3460aeb3ad45bc8b3292c90c Reviewed-by: Jake Petroules --- src/lib/corelib/language/modulemerger.cpp | 12 ++++++++---- .../blackbox/testdata/probe-in-exported-module/dependee.qbs | 1 + .../probe-in-exported-module/modules/depmodule/depmodule.qbs | 2 ++ .../probe-in-exported-module/modules/mymodule/mymodule.qbs | 1 + .../modules/myothermodule/myothermodule.qbs | 6 ++++++ tests/auto/blackbox/tst_blackbox.cpp | 1 + 6 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 tests/auto/blackbox/testdata/probe-in-exported-module/modules/myothermodule/myothermodule.qbs diff --git a/src/lib/corelib/language/modulemerger.cpp b/src/lib/corelib/language/modulemerger.cpp index 3ac498dd9..b468e0970 100644 --- a/src/lib/corelib/language/modulemerger.cpp +++ b/src/lib/corelib/language/modulemerger.cpp @@ -80,10 +80,14 @@ void ModuleMerger::replaceItemInScopes(Item *toReplace) // instance scope, namely our merged module instead of some other instance. foreach (const Item::Module &module, toReplace->modules()) { foreach (const ValuePtr &property, module.item->properties()) { - if (property->definingItem() && property->definingItem()->scope() - && property->definingItem()->scope()->scope() == toReplace) { - property->definingItem()->scope()->setScope(m_mergedModule.item); - } + ValuePtr v = property; + do { + if (v->definingItem() && v->definingItem()->scope() + && v->definingItem()->scope()->scope() == toReplace) { + v->definingItem()->scope()->setScope(m_mergedModule.item); + } + v = v->next(); + } while (v); } } } diff --git a/tests/auto/blackbox/testdata/probe-in-exported-module/dependee.qbs b/tests/auto/blackbox/testdata/probe-in-exported-module/dependee.qbs index 94e266499..121ec6c39 100644 --- a/tests/auto/blackbox/testdata/probe-in-exported-module/dependee.qbs +++ b/tests/auto/blackbox/testdata/probe-in-exported-module/dependee.qbs @@ -2,6 +2,7 @@ import qbs Product { name: "dependee" + Depends { name: "myothermodule" } Depends { name: "dependency" } type: ["out", "dep-out"] Group { diff --git a/tests/auto/blackbox/testdata/probe-in-exported-module/modules/depmodule/depmodule.qbs b/tests/auto/blackbox/testdata/probe-in-exported-module/modules/depmodule/depmodule.qbs index b477e2bf7..f2d7e8dce 100644 --- a/tests/auto/blackbox/testdata/probe-in-exported-module/modules/depmodule/depmodule.qbs +++ b/tests/auto/blackbox/testdata/probe-in-exported-module/modules/depmodule/depmodule.qbs @@ -2,6 +2,7 @@ import qbs Module { property string prop + property stringList listProp: [] Rule { inputs: ["dep-in"] @@ -14,6 +15,7 @@ Module { cmd.description = "Creating dep-out artifact"; cmd.sourceCode = function() { console.info("prop: " + product.moduleProperty("depmodule", "prop")); + console.info("listProp: " + product.moduleProperty("depmodule", "listProp")); }; return [cmd]; } diff --git a/tests/auto/blackbox/testdata/probe-in-exported-module/modules/mymodule/mymodule.qbs b/tests/auto/blackbox/testdata/probe-in-exported-module/modules/mymodule/mymodule.qbs index af1c33049..e68899ae2 100644 --- a/tests/auto/blackbox/testdata/probe-in-exported-module/modules/mymodule/mymodule.qbs +++ b/tests/auto/blackbox/testdata/probe-in-exported-module/modules/mymodule/mymodule.qbs @@ -8,6 +8,7 @@ Module { } property bool found: theProbe.found depmodule.prop: found ? "yes" : "no" + depmodule.listProp: theProbe.found ? ["my"] : [] Rule { inputs: ["in"] diff --git a/tests/auto/blackbox/testdata/probe-in-exported-module/modules/myothermodule/myothermodule.qbs b/tests/auto/blackbox/testdata/probe-in-exported-module/modules/myothermodule/myothermodule.qbs new file mode 100644 index 000000000..d3009f532 --- /dev/null +++ b/tests/auto/blackbox/testdata/probe-in-exported-module/modules/myothermodule/myothermodule.qbs @@ -0,0 +1,6 @@ +import qbs + +Module { + Depends { name: "depmodule" } + depmodule.listProp: ["myother"] +} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 3619cf319..a6581a5d9 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -2075,6 +2075,7 @@ void TestBlackbox::probeInExportedModule() << QLatin1String("probe-in-exported-module.qbs"))), 0); QVERIFY2(m_qbsStdout.contains("found: true"), m_qbsStdout.constData()); QVERIFY2(m_qbsStdout.contains("prop: yes"), m_qbsStdout.constData()); + QVERIFY2(m_qbsStdout.contains("listProp: my,myother"), m_qbsStdout.constData()); } void TestBlackbox::probesAndArrayProperties() -- cgit v1.2.3