diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-02-26 14:56:38 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-02-26 17:51:38 +0100 |
commit | 78fa3cbf4ffdc1c7469e471e6b0349b3b5a14931 (patch) | |
tree | 391d366e9b5ededa29cd20535f69c9f74b8c8b2c /src/lib/corelib/language/projectresolver.cpp | |
parent | 3db9811427b737d7f116578ead054d18876c93db (diff) |
Do not share product properties with artifacts.
Since products potentially share their property maps with their groups,
artifacts get product properties such as "name" and
"destinationDirectory". This is strange and can mess with change
tracking. Therefore we split up the product's property map in two: One
contains the module properties and is potentially shared with groups,
the other has the actual product properties and is not shared.
This patch also removes a workaround from an autotest that was required
until now to prevent a false positive in change tracking.
Change-Id: Ia1f1f0ce32669fd893a99f809753df526bf1442a
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/corelib/language/projectresolver.cpp')
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index 4dcec436d..c2f21de07 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -317,8 +317,12 @@ void ProjectResolver::resolveProduct(Item *item, ProjectContext *projectContext) product->destinationDirectory = m_evaluator->stringValue(item, QLatin1String("destinationDirectory")); product->location = item->location(); - product->properties = PropertyMapInternal::create(); - product->properties->setValue(createProductConfig()); + product->productProperties = createProductConfig(); + QVariantMap moduleProperties; + moduleProperties.insert(QLatin1String("modules"), + product->productProperties.take(QLatin1String("modules"))); + product->moduleProperties = PropertyMapInternal::create(); + product->moduleProperties->setValue(moduleProperties); ModuleProperties::init(m_evaluator->scriptValue(item), product); QList<Item *> subItems = item->children(); @@ -443,10 +447,10 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext) { Q_UNUSED(projectContext); checkCancelation(); - PropertyMapPtr properties = m_productContext->product->properties; + PropertyMapPtr moduleProperties = m_productContext->product->moduleProperties; if (isSomeModulePropertySet(item)) { - properties = PropertyMapInternal::create(); - properties->setValue(evaluateModuleValues(item)); + moduleProperties = PropertyMapInternal::create(); + moduleProperties->setValue(evaluateModuleValues(item)); } const bool isEnabled = m_evaluator->boolValue(item, QLatin1String("condition")); @@ -497,13 +501,13 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext) wildcards->patterns = patterns; QSet<QString> files = wildcards->expandPatterns(group, m_productContext->product->sourceDirectory); foreach (const QString &fileName, files) - createSourceArtifact(m_productContext->product, properties, fileName, + createSourceArtifact(m_productContext->product, moduleProperties, fileName, group->fileTags, group->overrideTags, wildcards->files); group->wildcards = wildcards; } foreach (const QString &fileName, files) - createSourceArtifact(m_productContext->product, properties, fileName, + createSourceArtifact(m_productContext->product, moduleProperties, fileName, group->fileTags, group->overrideTags, group->files); ErrorInfo fileError; foreach (const SourceArtifactConstPtr &a, group->files) { @@ -519,7 +523,7 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext) group->name = m_evaluator->stringValue(item, QLatin1String("name")); if (group->name.isEmpty()) group->name = Tr::tr("Group %1").arg(m_productContext->product->groups.count()); - group->properties = properties; + group->properties = moduleProperties; m_productContext->product->groups += group; } @@ -752,7 +756,7 @@ void ProjectResolver::resolveTransformer(Item *item, ProjectContext *projectCont if (Q_UNLIKELY(child->typeName() != QLatin1String("Artifact"))) throw ErrorInfo(Tr::tr("Transformer: wrong child type '%0'.").arg(child->typeName())); SourceArtifactPtr artifact = SourceArtifact::create(); - artifact->properties = m_productContext->product->properties; + artifact->properties = m_productContext->product->moduleProperties; QString fileName = m_evaluator->stringValue(child, QLatin1String("fileName")); if (Q_UNLIKELY(fileName.isEmpty())) throw ErrorInfo(Tr::tr("Artifact fileName must not be empty.")); @@ -854,11 +858,11 @@ void ProjectResolver::resolveProductDependencies(ProjectContext *projectContext) if (exportedConfig.isEmpty()) continue; - insertExportedConfig(usedProductName, exportedConfig, rproduct->properties); + insertExportedConfig(usedProductName, exportedConfig, rproduct->moduleProperties); // insert the configuration of the Export item into the artifact configurations foreach (SourceArtifactPtr artifact, rproduct->allEnabledFiles()) { - if (artifact->properties != rproduct->properties) + if (artifact->properties != rproduct->moduleProperties) insertExportedConfig(usedProductName, exportedConfig, artifact->properties); } |