aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib
diff options
context:
space:
mode:
authorIvan Komissarov <ABBAPOH@gmail.com>2021-02-07 21:34:52 +0100
committerIvan Komissarov <ABBAPOH@gmail.com>2021-02-08 21:37:07 +0000
commitb3d59f72c764595e4daff6cbc115e06843d1e06e (patch)
tree5fd518b11c8a4c99b74d37ad6ff67059d394e675 /src/lib/corelib
parentdb0a4752a92f8eef7c3e69c3951030a02d6a4321 (diff)
qt6: do not use QHash in ModuleLoaderResult
Otherwise, Qbs crashes in TestApi::multiplexing when inserting into this hash Change-Id: Idcb136e6f9af1036c7b725e67508b0b677a9cb20 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/corelib')
-rw-r--r--src/lib/corelib/language/moduleloader.cpp7
-rw-r--r--src/lib/corelib/language/moduleloader.h2
-rw-r--r--src/lib/corelib/language/projectresolver.cpp8
-rw-r--r--src/lib/corelib/tools/stlutils.h11
4 files changed, 19 insertions, 9 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index e5e6f3a14..325045149 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -1339,7 +1339,7 @@ void ModuleLoader::setupProductDependencies(ProductContext *productContext,
|| !containsKey(m_productsWithDeferredDependsItems, productContext)) {
addProductModuleDependencies(productContext);
}
- productContext->project->result->productInfos.insert(item, productContext->info);
+ productContext->project->result->productInfos[item] = productContext->info;
}
// Leaf modules first.
@@ -1515,7 +1515,7 @@ void ModuleLoader::handleProduct(ModuleLoader::ProductContext *productContext)
handleGroup(productContext, child, reverseModuleDeps);
}
}
- productContext->project->result->productInfos.insert(item, productContext->info);
+ productContext->project->result->productInfos[item] = productContext->info;
}
static Item *rootPrototype(Item *item)
@@ -4166,8 +4166,7 @@ void ModuleLoader::handleProductError(const ErrorInfo &error,
const auto errorItems = error.items();
for (const ErrorItem &ei : errorItems)
productContext->info.delayedError.append(ei.description(), ei.codeLocation());
- productContext->project->result->productInfos.insert(productContext->item,
- productContext->info);
+ productContext->project->result->productInfos[productContext->item] = productContext->info;
m_disabledItems << productContext->item;
m_erroneousProducts.insert(productContext->name);
}
diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h
index 4033dd42d..3dc091003 100644
--- a/src/lib/corelib/language/moduleloader.h
+++ b/src/lib/corelib/language/moduleloader.h
@@ -106,7 +106,7 @@ struct ModuleLoaderResult
std::shared_ptr<ItemPool> itemPool;
Item *root;
- QHash<Item *, ProductInfo> productInfos;
+ std::unordered_map<Item *, ProductInfo> productInfos;
std::vector<ProbeConstPtr> projectProbes;
ModuleProviderInfoList moduleProviderInfo;
Set<QString> qbsFiles;
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index 570b3513f..da60d7b4f 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -655,8 +655,8 @@ QVariantMap ProjectResolver::resolveAdditionalModuleProperties(const Item *group
const QVariantMap &currentValues)
{
// Step 1: Retrieve the properties directly set in the group
- const ModulePropertiesPerGroup &mp = m_loadResult.productInfos.value(m_productContext->item)
- .modulePropertiesSetInGroups;
+ const ModulePropertiesPerGroup &mp = mapValue(
+ m_loadResult.productInfos, m_productContext->item).modulePropertiesSetInGroups;
const auto it = mp.find(group);
if (it == mp.end())
return {};
@@ -945,7 +945,7 @@ void ProjectResolver::collectExportedProductDependencies()
}
}
const ModuleLoaderResult::ProductInfo &importingProductInfo
- = m_loadResult.productInfos.value(importingProductItem);
+ = mapValue(m_loadResult.productInfos, importingProductItem);
const ProductDependencyInfos &depInfos
= getProductDependencies(dummyProduct, importingProductInfo);
for (const auto &dep : depInfos.dependencies) {
@@ -1610,7 +1610,7 @@ void ProjectResolver::resolveProductDependencies(const ProjectContext &projectCo
continue;
Item *productItem = m_productItemMap.value(rproduct);
const ModuleLoaderResult::ProductInfo &productInfo
- = m_loadResult.productInfos.value(productItem);
+ = mapValue(m_loadResult.productInfos, productItem);
const ProductDependencyInfos &depInfos = getProductDependencies(rproduct, productInfo);
if (depInfos.hasDisabledDependency)
disabledDependency = true;
diff --git a/src/lib/corelib/tools/stlutils.h b/src/lib/corelib/tools/stlutils.h
index 63b9c098e..1b6d7278f 100644
--- a/src/lib/corelib/tools/stlutils.h
+++ b/src/lib/corelib/tools/stlutils.h
@@ -75,6 +75,17 @@ bool containsKey(const C &container, const typename C::key_type &v)
return container.find(v) != end;
}
+template <class C>
+typename C::mapped_type mapValue(
+ const C &container,
+ const typename C::key_type &key,
+ const typename C::mapped_type &value = typename C::mapped_type())
+{
+ const auto end = container.cend();
+ const auto it = container.find(key);
+ return it != end ? it->second : value;
+}
+
template <typename C>
bool removeOne(C &container, const typename C::value_type &v)
{