aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/projectresolver.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-02-26 14:56:38 +0100
committerChristian Kandeler <christian.kandeler@digia.com>2014-02-26 17:51:38 +0100
commit78fa3cbf4ffdc1c7469e471e6b0349b3b5a14931 (patch)
tree391d366e9b5ededa29cd20535f69c9f74b8c8b2c /src/lib/corelib/language/projectresolver.cpp
parent3db9811427b737d7f116578ead054d18876c93db (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.cpp26
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);
}