diff options
author | Ivan Komissarov <ABBAPOH@gmail.com> | 2021-02-07 21:34:52 +0100 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2021-02-08 21:37:07 +0000 |
commit | b3d59f72c764595e4daff6cbc115e06843d1e06e (patch) | |
tree | 5fd518b11c8a4c99b74d37ad6ff67059d394e675 /src/lib/corelib | |
parent | db0a4752a92f8eef7c3e69c3951030a02d6a4321 (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.cpp | 7 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 8 | ||||
-rw-r--r-- | src/lib/corelib/tools/stlutils.h | 11 |
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 ¤tValues) { // 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) { |