From 946efb14b1f5f18ddfc1a275cc28e7036e69eeea Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 24 Jan 2024 17:18:59 +0100 Subject: [PATCH] QbsProjectManager: Move progress bar future to QbsProjectParser It was very odd that it was held alongside the parser in a different class. Change-Id: I187b2260e079f0bf88bfc73447b7dec7f6497dca Reviewed-by: Christian Stenger Reviewed-by: --- src/plugins/qbsprojectmanager/qbsproject.cpp | 31 +++---------------- src/plugins/qbsprojectmanager/qbsproject.h | 1 - .../qbsprojectmanager/qbsprojectparser.cpp | 27 +++++++++++++--- .../qbsprojectmanager/qbsprojectparser.h | 5 +-- 4 files changed, 27 insertions(+), 37 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 09fe9d495c0..74b64e2a5cc 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -203,12 +202,6 @@ QbsBuildSystem::~QbsBuildSystem() m_parseRequest.reset(); delete m_cppCodeModelUpdater; delete m_qbsProjectParser; - if (m_qbsUpdateFutureInterface) { - m_qbsUpdateFutureInterface->reportCanceled(); - m_qbsUpdateFutureInterface->reportFinished(); - delete m_qbsUpdateFutureInterface; - m_qbsUpdateFutureInterface = nullptr; - } qDeleteAll(m_extraCompilers); } @@ -490,7 +483,6 @@ FilePath QbsBuildSystem::installRoot() void QbsBuildSystem::handleQbsParsingDone(bool success) { QTC_ASSERT(m_qbsProjectParser, return); - QTC_ASSERT(m_qbsUpdateFutureInterface, return); qCDebug(qbsPmLog) << "Parsing done, success:" << success; @@ -515,15 +507,10 @@ void QbsBuildSystem::handleQbsParsingDone(bool success) // point of view. dataChanged = true; } - } else { - m_qbsUpdateFutureInterface->reportCanceled(); } - m_qbsProjectParser->deleteLaterSafely(); + delete m_qbsProjectParser; m_qbsProjectParser = nullptr; - m_qbsUpdateFutureInterface->reportFinished(); - delete m_qbsUpdateFutureInterface; - m_qbsUpdateFutureInterface = nullptr; if (dataChanged) { updateAfterParse(); @@ -592,7 +579,7 @@ void QbsBuildSystem::startParsing() cancelDelayedParseRequest(); QTC_ASSERT(!m_qbsProjectParser, return); - m_qbsProjectParser = new QbsProjectParser(this, m_qbsUpdateFutureInterface); + m_qbsProjectParser = new QbsProjectParser(this); m_treeCreationWatcher = nullptr; connect(m_qbsProjectParser, &QbsProjectParser::done, this, &QbsBuildSystem::handleQbsParsingDone); @@ -638,18 +625,8 @@ void QbsBuildSystem::generateErrors(const ErrorInfo &e) void QbsBuildSystem::prepareForParsing() { TaskHub::clearTasks(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM); - if (m_qbsUpdateFutureInterface) { - m_qbsUpdateFutureInterface->reportCanceled(); - m_qbsUpdateFutureInterface->reportFinished(); - } - delete m_qbsUpdateFutureInterface; - m_qbsUpdateFutureInterface = nullptr; - - m_qbsUpdateFutureInterface = new QFutureInterface(); - m_qbsUpdateFutureInterface->setProgressRange(0, 0); - ProgressManager::addTask(m_qbsUpdateFutureInterface->future(), - Tr::tr("Reading Project \"%1\"").arg(project()->displayName()), "Qbs.QbsEvaluate"); - m_qbsUpdateFutureInterface->reportStarted(); + if (m_qbsProjectParser) + m_qbsProjectParser->cancel(); } void QbsBuildSystem::updateDocuments() diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index cefda5869f8..62695d013c9 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -130,7 +130,6 @@ private: QJsonObject m_projectData; // TODO: Perhaps store this in the root project node instead? QbsProjectParser *m_qbsProjectParser = nullptr; - QFutureInterface *m_qbsUpdateFutureInterface = nullptr; using TreeCreationWatcher = QFutureWatcher; TreeCreationWatcher *m_treeCreationWatcher = nullptr; Utils::Environment m_lastParseEnv; diff --git a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp index f551dd32ca4..ee0817a9b5b 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp @@ -5,8 +5,10 @@ #include "qbsproject.h" #include "qbsprojectmanagerconstants.h" +#include "qbsprojectmanagertr.h" #include "qbssettings.h" +#include #include #include @@ -22,14 +24,20 @@ namespace QbsProjectManager::Internal { // QbsProjectParser: // -------------------------------------------------------------------- -QbsProjectParser::QbsProjectParser(QbsBuildSystem *buildSystem, QFutureInterface *fi) +QbsProjectParser::QbsProjectParser(QbsBuildSystem *buildSystem) : m_projectFilePath(buildSystem->project()->projectFilePath()), - m_session(buildSystem->session()), - m_fi(fi) + m_session(buildSystem->session()) { + m_fi = new QFutureInterface(); + m_fi->setProgressRange(0, 0); + Core::ProgressManager::addTask(m_fi->future(), + Tr::tr("Reading Project \"%1\"") + .arg(buildSystem->project()->displayName()), + "Qbs.QbsEvaluate"); + m_fi->reportStarted(); auto * const watcher = new QFutureWatcher(this); connect(watcher, &QFutureWatcher::canceled, this, &QbsProjectParser::cancel); - watcher->setFuture(fi->future()); + watcher->setFuture(m_fi->future()); } QbsProjectParser::~QbsProjectParser() @@ -38,7 +46,12 @@ QbsProjectParser::~QbsProjectParser() m_session->disconnect(this); cancel(); } - m_fi = nullptr; // we do not own m_fi, do not delete + + if (m_fi) { + m_fi->reportCanceled(); + m_fi->reportFinished(); + delete m_fi; + } } void QbsProjectParser::parse(const Store &config, const Environment &env, @@ -114,6 +127,10 @@ void QbsProjectParser::finish(bool success) { m_parsing = false; m_session->disconnect(this); + if (!success) + m_fi->reportCanceled(); + m_fi->reportFinished(); + m_fi = nullptr; emit done(success); } diff --git a/src/plugins/qbsprojectmanager/qbsprojectparser.h b/src/plugins/qbsprojectmanager/qbsprojectparser.h index bdb0bfceef7..4e7e041eaf8 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectparser.h +++ b/src/plugins/qbsprojectmanager/qbsprojectparser.h @@ -21,7 +21,7 @@ class QbsProjectParser : public QObject Q_OBJECT public: - QbsProjectParser(QbsBuildSystem *buildSystem, QFutureInterface *fi); + QbsProjectParser(QbsBuildSystem *buildSystem); ~QbsProjectParser() override; void parse(const Utils::Store &config, @@ -31,9 +31,6 @@ public: void cancel(); Utils::Environment environment() const { return m_environment; } - // FIXME: Why on earth do we not own the FutureInterface? - void deleteLaterSafely() { m_fi = nullptr; deleteLater(); } - QbsSession *session() const { return m_session; } QJsonObject projectData() const { return m_projectData; } ErrorInfo error() const { return m_error; }