diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-04-10 11:42:11 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-04-10 12:45:02 +0000 |
commit | 92d0bb4d90ec512e3e1d7d60e98a6af8f242f4de (patch) | |
tree | 7f9eed7468862ac828f8e33d49c312ba1a792f00 /src/lib/corelib/language/projectresolver.cpp | |
parent | d45d7ea294daa85249432572a6bdb4dece82d44c (diff) |
ProjectResolver: Queue errors until all products have been processed
This way, we can make users aware of all relevant errors at once, while
not also flooding them with irrelevant errors from products that are
disabled.
Task-number: QBS-1334
Change-Id: I744621ff3a40277053ebf0e70748da0399241b48
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/language/projectresolver.cpp')
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index e46c181dd..e626462c6 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -164,16 +164,6 @@ TopLevelProjectPtr ProjectResolver::resolve() try { tlp = resolveTopLevelProject(); printProfilingInfo(); - } catch (const ErrorInfo &errorInfo) { - ErrorInfo e; - for (auto it = m_loadResult.productInfos.cbegin(); it != m_loadResult.productInfos.cend(); - ++it) { - const auto &productInfo = it.value(); - if (productInfo.delayedError.hasError()) - appendError(e, productInfo.delayedError); - } - appendError(e, errorInfo); - throw e; } catch (const CancelException &) { throw ErrorInfo(Tr::tr("Project resolving canceled for configuration '%1'.") .arg(TopLevelProject::deriveId(m_setupParams.finalBuildConfigurationTree()))); @@ -249,7 +239,14 @@ TopLevelProjectPtr ProjectResolver::resolveTopLevelProject() project->probes = m_loadResult.projectProbes; ProjectContext projectContext; projectContext.project = project; + resolveProject(m_loadResult.root, &projectContext); + ErrorInfo accumulatedErrors; + for (const ErrorInfo &e : m_queuedErrors) + appendError(accumulatedErrors, e); + if (accumulatedErrors.hasError()) + throw accumulatedErrors; + project->setBuildConfiguration(m_setupParams.finalBuildConfigurationTree()); project->overriddenValues = m_setupParams.overriddenValues(); project->canonicalFilePathResults = m_engine->canonicalFilePathResults(); @@ -340,8 +337,13 @@ void ProjectResolver::resolveProjectFully(Item *item, ProjectResolver::ProjectCo { ItemType::PropertyOptions, &ProjectResolver::ignoreItem } }; - for (Item * const child : item->children()) - callItemFunction(mapping, child, projectContext); + for (Item * const child : item->children()) { + try { + callItemFunction(mapping, child, projectContext); + } catch (const ErrorInfo &e) { + m_queuedErrors.push_back(e); + } + } for (const ResolvedProductPtr &product : qAsConst(projectContext->project->products)) postProcess(product, projectContext); |