forked from qt-creator/qt-creator
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:
@@ -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()
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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; }
|
||||||
|
Reference in New Issue
Block a user