aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qbsprojectmanager
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2024-01-24 17:18:59 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2024-01-26 09:32:45 +0000
commit946efb14b1f5f18ddfc1a275cc28e7036e69eeea (patch)
treec72e0a19b7b94d2f1dec9c7681b59137668e0d0e /src/plugins/qbsprojectmanager
parent167cd3378d836e2ab11c8ea5812dc16058816c10 (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.cpp31
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.h1
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectparser.cpp27
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectparser.h5
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; }