aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-02-09 14:36:03 +0100
committerJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-02-10 10:57:56 +0000
commit6cd2ec6266f29d08ed337357049faea7a93c1b7c (patch)
tree72432584e6ef7d8798303de9449abf348e75071b /src/lib/corelib/language
parentaec6c77bb8ce33b6535106c78eeb9cd755398953 (diff)
fix scalar property lookup some more
Let there be a product P that depends on module A. Module A depends on module B.A sets B.foo to 1. Default value of B.foo is 0. The value of product.moduleProperty("B", "foo") is 1. Now add the direct dependency B to P. P does not overwrite the default value of B.foo. The overwritten value of B.foo from A takes precedence. This semantics change is needed to make sure that adding/removing modules to a product does not change property values in surprising ways. Task-number: QBS-736 Change-Id: I73152a24649bc670a9075e82998ef2b0d8709a84 Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Diffstat (limited to 'src/lib/corelib/language')
-rw-r--r--src/lib/corelib/language/projectresolver.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index 0bf8b5ed3..3117edd80 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -1079,6 +1079,21 @@ QVariantMap ProjectResolver::evaluateModuleValues(Item *item, bool lookupPrototy
return result;
}
+static QStringList ownPropertiesSet(Item *item)
+{
+ QStringList names;
+ do {
+ names += item->properties().keys();
+ item = item->prototype();
+ } while (item && item->isModuleInstance());
+
+ std::sort(names.begin(), names.end());
+ QStringList::iterator lastIt = std::unique(names.begin(), names.end());
+ if (lastIt != names.end())
+ names.erase(lastIt);
+ return names;
+}
+
void ProjectResolver::evaluateModuleValues(Item *item, QVariantMap *modulesMap,
bool lookupPrototype) const
{
@@ -1097,7 +1112,9 @@ void ProjectResolver::evaluateModuleValues(Item *item, QVariantMap *modulesMap,
evaluateModuleValues(module.item, &depmods, lookupPrototype);
QVariantMap dep = evaluateProperties(module.item, lookupPrototype);
dep.insert(QLatin1String("modules"), depmods);
- modulesMap->insert(ModuleLoader::fullModuleName(module.name), dep);
+ const QString fullName = ModuleLoader::fullModuleName(module.name);
+ modulesMap->insert(fullName, dep);
+ modulesMap->insert(QLatin1Char('@') + fullName, ownPropertiesSet(module.item));
}
}