diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2016-08-04 15:14:55 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2016-08-05 09:28:46 +0000 |
commit | ccf7ae9c7c0e09ee68eaddb27f96ddcea2972cc2 (patch) | |
tree | d6e6688b5ad53e3eaef898cf90e752b48b80c182 | |
parent | 2f4faa41b1570ba2081be0366323232e68aff401 (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.cpp | 12 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.h | 2 |
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; |