diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-11-23 16:39:02 +0100 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-11-23 21:28:25 +0000 |
commit | 08ce978733b33c1b1a64e5e1e62dea22cde6148c (patch) | |
tree | 975b1b9c1b5c236d571b2efe189f54724362a0b7 /src | |
parent | 757dede7866a39f186feb9db4d67bad4a60c2894 (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.cpp | 14 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.h | 1 |
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; |