aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-11-23 16:39:02 +0100
committerJake Petroules <jake.petroules@qt.io>2017-11-23 21:28:25 +0000
commit08ce978733b33c1b1a64e5e1e62dea22cde6148c (patch)
tree975b1b9c1b5c236d571b2efe189f54724362a0b7 /src
parent757dede7866a39f186feb9db4d67bad4a60c2894 (diff)
Fix inadvertant module prototype sharingv1.10.0
A product that is not multiplexed in the sense that additional instances of it are created can still alter prototype values. Take this into account when deciding whether to re-use an existing module prototype. Task-number: QBS-1243 Change-Id: I017fc0dc9d6080d622b030e97796d254d17b3468 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/lib/corelib/language/moduleloader.cpp14
-rw-r--r--src/lib/corelib/language/moduleloader.h1
2 files changed, 10 insertions, 5 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index b8a4571a5..afdb908ea 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -822,10 +822,12 @@ QList<Item *> ModuleLoader::multiplexProductItem(ProductContext *dummyContext, I
item = productItem->clone();
additionalProductItems.append(item);
}
+ const QString multiplexConfigurationId = multiplexInfo.toIdString(row);
+ const VariantValuePtr multiplexConfigurationIdValue
+ = VariantValue::create(multiplexConfigurationId);
+ item->setProperty(QStringLiteral("__multiplexConfigIdForModulePrototypes"),
+ multiplexConfigurationIdValue);
if (multiplexInfo.table.size() > 1 || aggregator) {
- const QString multiplexConfigurationId = multiplexInfo.toIdString(row);
- const VariantValuePtr multiplexConfigurationIdValue
- = VariantValue::create(multiplexConfigurationId);
multiplexConfigurationIdValues.push_back(multiplexConfigurationIdValue);
item->setProperty(multiplexConfigurationIdKey, multiplexConfigurationIdValue);
}
@@ -942,6 +944,8 @@ void ModuleLoader::prepareProduct(ProjectContext *projectContext, Item *productI
QString(), &profilePropertySet);
productContext.multiplexConfigurationId
= m_evaluator->stringValue(productItem, QLatin1String("multiplexConfigurationId"));
+ productContext.multiplexConfigIdForModulePrototypes = m_evaluator->stringValue(
+ productItem, QStringLiteral("__multiplexConfigIdForModulePrototypes"));
QBS_CHECK(profilePropertySet);
const auto it = projectContext->result->profileConfigs.constFind(productContext.profileName);
if (it == projectContext->result->profileConfigs.constEnd()) {
@@ -2551,8 +2555,8 @@ Item *ModuleLoader::loadModuleFile(ProductContext *productContext, const QString
qCDebug(lcModuleLoader) << "loadModuleFile" << fullModuleName << "from" << filePath;
- const QString keyUniquifier = productContext->multiplexConfigurationId.isEmpty() ?
- productContext->profileName : productContext->uniqueName();
+ const QString keyUniquifier = productContext->multiplexConfigIdForModulePrototypes.isEmpty()
+ ? productContext->profileName : productContext->multiplexConfigIdForModulePrototypes;
const ModuleItemCache::key_type cacheKey(filePath, keyUniquifier);
const ItemCacheValue cacheValue = m_modulePrototypeItemCache.value(cacheKey);
if (cacheValue.module) {
diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h
index d9fb5d032..5b672e49c 100644
--- a/src/lib/corelib/language/moduleloader.h
+++ b/src/lib/corelib/language/moduleloader.h
@@ -164,6 +164,7 @@ private:
QString name;
QString profileName;
QString multiplexConfigurationId;
+ QString multiplexConfigIdForModulePrototypes;
QVariantMap moduleProperties;
std::map<QString, ProductDependencies> productModuleDependencies;