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>
This commit is contained in:
Christian Kandeler
2024-01-24 17:18:59 +01:00
parent 167cd3378d
commit 946efb14b1
4 changed files with 27 additions and 37 deletions

View File

@@ -22,7 +22,6 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/iversioncontrol.h> #include <coreplugin/iversioncontrol.h>
#include <coreplugin/messagemanager.h> #include <coreplugin/messagemanager.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <coreplugin/vcsmanager.h> #include <coreplugin/vcsmanager.h>
#include <cppeditor/cppprojectfile.h> #include <cppeditor/cppprojectfile.h>
#include <cppeditor/generatedcodemodelsupport.h> #include <cppeditor/generatedcodemodelsupport.h>
@@ -203,12 +202,6 @@ QbsBuildSystem::~QbsBuildSystem()
m_parseRequest.reset(); m_parseRequest.reset();
delete m_cppCodeModelUpdater; delete m_cppCodeModelUpdater;
delete m_qbsProjectParser; delete m_qbsProjectParser;
if (m_qbsUpdateFutureInterface) {
m_qbsUpdateFutureInterface->reportCanceled();
m_qbsUpdateFutureInterface->reportFinished();
delete m_qbsUpdateFutureInterface;
m_qbsUpdateFutureInterface = nullptr;
}
qDeleteAll(m_extraCompilers); qDeleteAll(m_extraCompilers);
} }
@@ -490,7 +483,6 @@ FilePath QbsBuildSystem::installRoot()
void QbsBuildSystem::handleQbsParsingDone(bool success) void QbsBuildSystem::handleQbsParsingDone(bool success)
{ {
QTC_ASSERT(m_qbsProjectParser, return); QTC_ASSERT(m_qbsProjectParser, return);
QTC_ASSERT(m_qbsUpdateFutureInterface, return);
qCDebug(qbsPmLog) << "Parsing done, success:" << success; qCDebug(qbsPmLog) << "Parsing done, success:" << success;
@@ -515,15 +507,10 @@ void QbsBuildSystem::handleQbsParsingDone(bool success)
// point of view. // point of view.
dataChanged = true; dataChanged = true;
} }
} else {
m_qbsUpdateFutureInterface->reportCanceled();
} }
m_qbsProjectParser->deleteLaterSafely(); delete m_qbsProjectParser;
m_qbsProjectParser = nullptr; m_qbsProjectParser = nullptr;
m_qbsUpdateFutureInterface->reportFinished();
delete m_qbsUpdateFutureInterface;
m_qbsUpdateFutureInterface = nullptr;
if (dataChanged) { if (dataChanged) {
updateAfterParse(); updateAfterParse();
@@ -592,7 +579,7 @@ void QbsBuildSystem::startParsing()
cancelDelayedParseRequest(); cancelDelayedParseRequest();
QTC_ASSERT(!m_qbsProjectParser, return); QTC_ASSERT(!m_qbsProjectParser, return);
m_qbsProjectParser = new QbsProjectParser(this, m_qbsUpdateFutureInterface); m_qbsProjectParser = new QbsProjectParser(this);
m_treeCreationWatcher = nullptr; m_treeCreationWatcher = nullptr;
connect(m_qbsProjectParser, &QbsProjectParser::done, connect(m_qbsProjectParser, &QbsProjectParser::done,
this, &QbsBuildSystem::handleQbsParsingDone); this, &QbsBuildSystem::handleQbsParsingDone);
@@ -638,18 +625,8 @@ void QbsBuildSystem::generateErrors(const ErrorInfo &e)
void QbsBuildSystem::prepareForParsing() void QbsBuildSystem::prepareForParsing()
{ {
TaskHub::clearTasks(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM); TaskHub::clearTasks(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM);
if (m_qbsUpdateFutureInterface) { if (m_qbsProjectParser)
m_qbsUpdateFutureInterface->reportCanceled(); m_qbsProjectParser->cancel();
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();
} }
void QbsBuildSystem::updateDocuments() void QbsBuildSystem::updateDocuments()

View File

@@ -130,7 +130,6 @@ private:
QJsonObject m_projectData; // TODO: Perhaps store this in the root project node instead? QJsonObject m_projectData; // TODO: Perhaps store this in the root project node instead?
QbsProjectParser *m_qbsProjectParser = nullptr; QbsProjectParser *m_qbsProjectParser = nullptr;
QFutureInterface<bool> *m_qbsUpdateFutureInterface = nullptr;
using TreeCreationWatcher = QFutureWatcher<QbsProjectNode *>; using TreeCreationWatcher = QFutureWatcher<QbsProjectNode *>;
TreeCreationWatcher *m_treeCreationWatcher = nullptr; TreeCreationWatcher *m_treeCreationWatcher = nullptr;
Utils::Environment m_lastParseEnv; Utils::Environment m_lastParseEnv;

View File

@@ -5,8 +5,10 @@
#include "qbsproject.h" #include "qbsproject.h"
#include "qbsprojectmanagerconstants.h" #include "qbsprojectmanagerconstants.h"
#include "qbsprojectmanagertr.h"
#include "qbssettings.h" #include "qbssettings.h"
#include <coreplugin/progressmanager/progressmanager.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QDir> #include <QDir>
@@ -22,14 +24,20 @@ namespace QbsProjectManager::Internal {
// QbsProjectParser: // QbsProjectParser:
// -------------------------------------------------------------------- // --------------------------------------------------------------------
QbsProjectParser::QbsProjectParser(QbsBuildSystem *buildSystem, QFutureInterface<bool> *fi) QbsProjectParser::QbsProjectParser(QbsBuildSystem *buildSystem)
: m_projectFilePath(buildSystem->project()->projectFilePath()), : m_projectFilePath(buildSystem->project()->projectFilePath()),
m_session(buildSystem->session()), m_session(buildSystem->session())
m_fi(fi)
{ {
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); auto * const watcher = new QFutureWatcher<bool>(this);
connect(watcher, &QFutureWatcher<bool>::canceled, this, &QbsProjectParser::cancel); connect(watcher, &QFutureWatcher<bool>::canceled, this, &QbsProjectParser::cancel);
watcher->setFuture(fi->future()); watcher->setFuture(m_fi->future());
} }
QbsProjectParser::~QbsProjectParser() QbsProjectParser::~QbsProjectParser()
@@ -38,7 +46,12 @@ QbsProjectParser::~QbsProjectParser()
m_session->disconnect(this); m_session->disconnect(this);
cancel(); 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, void QbsProjectParser::parse(const Store &config, const Environment &env,
@@ -114,6 +127,10 @@ void QbsProjectParser::finish(bool success)
{ {
m_parsing = false; m_parsing = false;
m_session->disconnect(this); m_session->disconnect(this);
if (!success)
m_fi->reportCanceled();
m_fi->reportFinished();
m_fi = nullptr;
emit done(success); emit done(success);
} }

View File

@@ -21,7 +21,7 @@ class QbsProjectParser : public QObject
Q_OBJECT Q_OBJECT
public: public:
QbsProjectParser(QbsBuildSystem *buildSystem, QFutureInterface<bool> *fi); QbsProjectParser(QbsBuildSystem *buildSystem);
~QbsProjectParser() override; ~QbsProjectParser() override;
void parse(const Utils::Store &config, void parse(const Utils::Store &config,
@@ -31,9 +31,6 @@ public:
void cancel(); void cancel();
Utils::Environment environment() const { return m_environment; } 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; } QbsSession *session() const { return m_session; }
QJsonObject projectData() const { return m_projectData; } QJsonObject projectData() const { return m_projectData; }
ErrorInfo error() const { return m_error; } ErrorInfo error() const { return m_error; }