diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index cdf843d0ba5..82deb528479 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -139,13 +139,33 @@ bool BuildStep::init() void BuildStep::run() { m_cancelFlag = false; - doRun(); + QTC_ASSERT(!m_taskTree, return); + + m_taskTree.reset(new TaskTree({runRecipe()})); + connect(m_taskTree.get(), &TaskTree::progressValueChanged, this, [this](int value) { + emit progress(qRound(double(value) * 100 / std::max(m_taskTree->progressMaximum(), 1)), {}); + }); + connect(m_taskTree.get(), &TaskTree::done, this, [this] { + emit finished(true); + m_taskTree.release()->deleteLater(); + }); + connect(m_taskTree.get(), &TaskTree::errorOccurred, this, [this] { + emit finished(false); + m_taskTree.release()->deleteLater(); + }); + m_taskTree->start(); } void BuildStep::cancel() { m_cancelFlag = true; - doCancel(); + if (!m_taskTree) + return; + + m_taskTree.reset(); + if (!m_cancelMessage.isEmpty()) + emit addOutput(m_cancelMessage, OutputFormat::ErrorMessage); + emit finished(false); } QWidget *BuildStep::doCreateConfigWidget() @@ -311,41 +331,6 @@ void BuildStep::setCancelMessage(const QString &message) m_cancelMessage = message; } -Tasking::GroupItem BuildStep::runRecipe() -{ - return Group {}; -} - -void BuildStep::doRun() -{ - QTC_ASSERT(!m_taskTree, return); - - m_taskTree.reset(new TaskTree({runRecipe()})); - connect(m_taskTree.get(), &TaskTree::progressValueChanged, this, [this](int value) { - emit progress(qRound(double(value) * 100 / std::max(m_taskTree->progressMaximum(), 1)), {}); - }); - connect(m_taskTree.get(), &TaskTree::done, this, [this] { - emit finished(true); - m_taskTree.release()->deleteLater(); - }); - connect(m_taskTree.get(), &TaskTree::errorOccurred, this, [this] { - emit finished(false); - m_taskTree.release()->deleteLater(); - }); - m_taskTree->start(); -} - -void BuildStep::doCancel() -{ - if (!m_taskTree) - return; - - m_taskTree.reset(); - if (!m_cancelMessage.isEmpty()) - emit addOutput(m_cancelMessage, OutputFormat::ErrorMessage); - emit finished(false); -} - void BuildStep::addMacroExpander() { m_addMacroExpander = true; diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index 5f960a1fb16..510895e10c9 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -133,9 +133,7 @@ protected: private: using ProjectConfiguration::parent; - virtual Tasking::GroupItem runRecipe(); // TODO: Make pure virtual when all subclasses implement it. - virtual void doRun(); - virtual void doCancel(); + virtual Tasking::GroupItem runRecipe() = 0; BuildStepList * const m_stepList; std::atomic_bool m_cancelFlag;