diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2024-01-24 17:18:59 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2024-01-26 09:32:45 +0000 |
commit | 946efb14b1f5f18ddfc1a275cc28e7036e69eeea (patch) | |
tree | c72e0a19b7b94d2f1dec9c7681b59137668e0d0e /src/plugins/qbsprojectmanager | |
parent | 167cd3378d836e2ab11c8ea5812dc16058816c10 (diff) |
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 <christian.stenger@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/plugins/qbsprojectmanager')
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsproject.cpp | 31 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsproject.h | 1 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsprojectparser.cpp | 27 | ||||
-rw-r--r-- | src/plugins/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 <coreplugin/icore.h> #include <coreplugin/iversioncontrol.h> #include <coreplugin/messagemanager.h> -#include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/vcsmanager.h> #include <cppeditor/cppprojectfile.h> #include <cppeditor/generatedcodemodelsupport.h> @@ -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<bool>(); - 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<bool> *m_qbsUpdateFutureInterface = nullptr; using TreeCreationWatcher = QFutureWatcher<QbsProjectNode *>; 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 <coreplugin/progressmanager/progressmanager.h> #include <utils/qtcassert.h> #include <QDir> @@ -22,14 +24,20 @@ namespace QbsProjectManager::Internal { // QbsProjectParser: // -------------------------------------------------------------------- -QbsProjectParser::QbsProjectParser(QbsBuildSystem *buildSystem, QFutureInterface<bool> *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<bool>(); + 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<bool>(this); connect(watcher, &QFutureWatcher<bool>::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<bool> *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; } |