aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/projectresolver.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-04-10 11:42:11 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-04-10 12:45:02 +0000
commit92d0bb4d90ec512e3e1d7d60e98a6af8f242f4de (patch)
tree7f9eed7468862ac828f8e33d49c312ba1a792f00 /src/lib/corelib/language/projectresolver.cpp
parentd45d7ea294daa85249432572a6bdb4dece82d44c (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.cpp26
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);