aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/corelib/language/moduleloader.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index 6449655fb..ac6d756b8 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -3796,11 +3796,33 @@ Item *ModuleLoader::createNonPresentModule(const QString &name, const QString &r
void ModuleLoader::handleProductError(const ErrorInfo &error,
ModuleLoader::ProductContext *productContext)
{
- if (!productContext->info.delayedError.hasError()) {
+ const bool alreadyHadError = productContext->info.delayedError.hasError();
+ if (!alreadyHadError) {
productContext->info.delayedError.append(Tr::tr("Error while handling product '%1':")
.arg(productContext->name),
productContext->item->location());
}
+ if (error.isInternalError()) {
+ if (alreadyHadError) {
+ qCDebug(lcModuleLoader()) << "ignoring subsequent internal error" << error.toString()
+ << "in product" << productContext->name;
+ return;
+ }
+ const auto &deps = productContext->productModuleDependencies;
+ for (auto it = deps.cbegin(); it != deps.cend(); ++it) {
+ const auto rangeForName = m_productsByName.equal_range(it->first);
+ for (auto rangeIt = rangeForName.first; rangeIt != rangeForName.second; ++rangeIt) {
+ const ProductContext * const dep = rangeIt->second;
+ if (dep->info.delayedError.hasError()) {
+ qCDebug(lcModuleLoader()) << "ignoring internal error" << error.toString()
+ << "in product" << productContext->name
+ << "assumed to be caused by erroneous dependency"
+ << dep->name;
+ return;
+ }
+ }
+ }
+ }
for (const ErrorItem &ei : error.items())
productContext->info.delayedError.append(ei.description(), ei.codeLocation());
productContext->project->result->productInfos.insert(productContext->item,