From 580d605fd3e0a6a6755bdfdcba3bfdea24e319f4 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Sun, 16 Jul 2023 11:10:13 +0200 Subject: [PATCH] BuildManager: Add ParserAwaiterTask helper Change-Id: I5c22b8a17d6495c3411e979e3e79cf9415236442 Reviewed-by: Qt CI Bot Reviewed-by: hjk --- src/plugins/projectexplorer/buildmanager.cpp | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp index 40620f7a711..e1bc165d27c 100644 --- a/src/plugins/projectexplorer/buildmanager.cpp +++ b/src/plugins/projectexplorer/buildmanager.cpp @@ -30,6 +30,8 @@ #include +#include + #include #include #include @@ -46,11 +48,42 @@ #include using namespace Core; +using namespace Tasking; using namespace Utils; namespace ProjectExplorer { using namespace Internal; +class ParserAwaiterTaskAdapter : public TaskAdapter> +{ +private: + void start() final { checkParsing(); } + void checkParsing() { + const QSet buildSystems = *task(); + for (BuildSystem *buildSystem : buildSystems) { + if (!buildSystem || !buildSystem->isParsing()) + continue; + connect(buildSystem, &BuildSystem::parsingFinished, + this, [this, buildSystem](bool success) { + disconnect(buildSystem, &BuildSystem::parsingFinished, this, nullptr); + if (!success) { + emit done(false); + return; + } + checkParsing(); + }); + return; + } + emit done(true); + } +}; + +} // ProjectExplorer + +TASKING_DECLARE_TASK(ParserAwaiterTask, ProjectExplorer::ParserAwaiterTaskAdapter); + +namespace ProjectExplorer { + static QString msgProgress(int progress, int total) { return Tr::tr("Finished %1 of %n steps", nullptr, total).arg(progress);