aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2016-08-04 15:14:55 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2016-08-05 09:28:46 +0000
commitccf7ae9c7c0e09ee68eaddb27f96ddcea2972cc2 (patch)
treed6e6688b5ad53e3eaef898cf90e752b48b80c182
parent2f4faa41b1570ba2081be0366323232e68aff401 (diff)
Fix Probe caching
We have to store a *list* of probe objects per code location. Otherwise, probes with different input properties will overwrite each other. Change-Id: Idde7f3f85b6b515bdbcc4b7cff985127cca508a2 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
-rw-r--r--src/lib/corelib/language/moduleloader.cpp12
-rw-r--r--src/lib/corelib/language/moduleloader.h2
2 files changed, 8 insertions, 6 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index 7f8dd02a6..2a4c9c470 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -868,10 +868,12 @@ ProbeConstPtr ModuleLoader::findOldProbe(const QString &product,
ProbeConstPtr ModuleLoader::findCurrentProbe(const CodeLocation &location, bool condition,
const QVariantMap &initialProperties) const
{
- const ProbeConstPtr cachedProbe = m_currentProbes.value(location);
- return cachedProbe && cachedProbe->condition() == condition
- && cachedProbe->initialProperties() == initialProperties
- ? cachedProbe : ProbeConstPtr();
+ const QList<ProbeConstPtr> cachedProbes = m_currentProbes.value(location);
+ foreach (const ProbeConstPtr &p, cachedProbes) {
+ if (p->condition() == condition && p->initialProperties() == initialProperties)
+ return p;
+ }
+ return ProbeConstPtr();
}
void ModuleLoader::mergeExportItems(const ProductContext &productContext)
@@ -1752,7 +1754,7 @@ void ModuleLoader::resolveProbe(ProductContext *productContext, Item *parent, It
if (!resolvedProbe) {
resolvedProbe = Probe::create(probe->location(), condition,
configureScript->sourceCode().toString(), properties, initialProperties);
- m_currentProbes.insert(probe->location(), resolvedProbe);
+ m_currentProbes[probe->location()] << resolvedProbe;
}
productContext->info.probes << resolvedProbe;
m_engine->currentContext()->popScope();
diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h
index ab251ed2a..44f68e8f5 100644
--- a/src/lib/corelib/language/moduleloader.h
+++ b/src/lib/corelib/language/moduleloader.h
@@ -261,7 +261,7 @@ private:
QSet<Item *> m_disabledItems;
QStack<bool> m_requiredChain;
QHash<QString, QList<ProbeConstPtr>> m_oldProbes;
- QHash<CodeLocation, ProbeConstPtr> m_currentProbes;
+ QHash<CodeLocation, QList<ProbeConstPtr>> m_currentProbes;
SetupProjectParameters m_parameters;
Version m_qbsVersion;
Item *m_tempScopeItem = nullptr;