From 46f39f5601740764bec327f60670005e17e52d47 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 18 Jul 2017 16:48:02 +0200 Subject: [PATCH] CMake: Simplify signaling Change-Id: I50fdaed0d813b5004c1756e9c5a6efd3ce7a3318 Reviewed-by: Tim Jenssen --- .../cmakebuildconfiguration.cpp | 6 ++--- .../cmakebuildconfiguration.h | 3 --- .../cmakebuildsettingswidget.cpp | 2 +- .../cmakeprojectmanager/cmakebuildstep.cpp | 26 ++++++++----------- .../cmakeprojectmanager/cmakebuildstep.h | 4 +-- .../cmakeprojectmanager/cmakeproject.cpp | 4 +-- .../cmakeprojectmanager/cmakeproject.h | 2 +- 7 files changed, 18 insertions(+), 29 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index a0358988eb8..84e3b147a4f 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -146,7 +146,6 @@ void CMakeBuildConfiguration::ctor() this, [this, project]() { clearError(); project->updateProjectData(this); - emit dataAvailable(); }); connect(m_buildDirManager.get(), &BuildDirManager::errorOccured, this, [this, project](const QString &msg) { @@ -155,9 +154,8 @@ void CMakeBuildConfiguration::ctor() }); connect(m_buildDirManager.get(), &BuildDirManager::configurationStarted, this, [this, project]() { - project->handleParsingStarted(); + project->handleParsingStarted(this); clearError(ForceEnabledChanged::True); - emit parsingStarted(); }); connect(this, &CMakeBuildConfiguration::environmentChanged, @@ -411,7 +409,7 @@ CMakeConfig CMakeBuildConfiguration::cmakeConfiguration() const void CMakeBuildConfiguration::setError(const QString &message) { - QString oldMessage = m_error; + const QString oldMessage = m_error; if (m_error != message) m_error = message; if (oldMessage.isEmpty() && !message.isEmpty()) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 1796108574f..5cc58bbdcb4 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -100,9 +100,6 @@ signals: void errorOccured(const QString &message); void warningOccured(const QString &message); - void parsingStarted(); - void dataAvailable(); - protected: CMakeBuildConfiguration(ProjectExplorer::Target *parent, CMakeBuildConfiguration *source); bool fromMap(const QVariantMap &map) override; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp index 881c8d984c7..0a84b8f406c 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp @@ -214,7 +214,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) else m_configModel->setConfiguration(m_buildConfiguration->completeCMakeConfiguration()); - connect(m_buildConfiguration, &CMakeBuildConfiguration::dataAvailable, + connect(m_buildConfiguration->target()->project(), &ProjectExplorer::Project::parsingFinished, this, [this, buildDirChooser, stretcher]() { updateButtonState(); m_configModel->setConfiguration(m_buildConfiguration->completeCMakeConfiguration()); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index 3fbe6b6a89b..6e9c9ee8edc 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -119,7 +119,8 @@ void CMakeBuildStep::ctor(BuildStepList *bsl) } connect(target(), &Target::kitChanged, this, &CMakeBuildStep::cmakeCommandChanged); - connect(bc, &CMakeBuildConfiguration::dataAvailable, this, &CMakeBuildStep::handleBuildTargetChanges); + connect(project(), &Project::parsingFinished, + this, &CMakeBuildStep::handleBuildTargetChanges); } CMakeBuildConfiguration *CMakeBuildStep::cmakeBuildConfiguration() const @@ -279,10 +280,8 @@ void CMakeBuildStep::run(QFutureInterface &fi) } if (mustDelay) { - m_runTrigger = connect(bc, &CMakeBuildConfiguration::dataAvailable, - this, [this, &fi]() { runImpl(fi); }); - m_errorTrigger = connect(bc, &CMakeBuildConfiguration::errorOccured, - this, [this, &fi](const QString& em) { handleCMakeError(fi, em); }); + m_runTrigger = connect(project(), &Project::parsingFinished, + this, [this, &fi](bool success) { handleProjectWasParsed(fi, success); }); } else { runImpl(fi); } @@ -291,21 +290,18 @@ void CMakeBuildStep::run(QFutureInterface &fi) void CMakeBuildStep::runImpl(QFutureInterface &fi) { // Do the actual build: - disconnectTriggers(); AbstractProcessStep::run(fi); } -void CMakeBuildStep::handleCMakeError(QFutureInterface &fi, const QString& errorMessage) -{ - disconnectTriggers(); - AbstractProcessStep::stdError(tr("Error parsing CMake: %1\n").arg(errorMessage)); - reportRunResult(fi, false); -} - -void CMakeBuildStep::disconnectTriggers() +void CMakeBuildStep::handleProjectWasParsed(QFutureInterface &fi, bool success) { disconnect(m_runTrigger); - disconnect(m_errorTrigger); + if (success) { + runImpl(fi); + } else { + AbstractProcessStep::stdError(tr("Project did not parse successfully, can not build.")); + reportRunResult(fi, false); + } } BuildStepConfigWidget *CMakeBuildStep::createConfigWidget() diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index 08cee9a01cb..754aae52cbd 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -104,14 +104,12 @@ private: void ctor(ProjectExplorer::BuildStepList *bsl); void runImpl(QFutureInterface &fi); - void handleCMakeError(QFutureInterface &fi, const QString& errorMessage); - void disconnectTriggers(); + void handleProjectWasParsed(QFutureInterface &fi, bool success); void handleBuildTargetChanges(); CMakeRunConfiguration *targetsActiveRunConfiguration() const; QMetaObject::Connection m_runTrigger; - QMetaObject::Connection m_errorTrigger; QRegExp m_percentProgress; QRegExp m_ninjaProgress; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 4d37f661be5..17c2bf0564d 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -377,9 +377,9 @@ void CMakeProject::handleActiveBuildConfigurationChanged() } } -void CMakeProject::handleParsingStarted() +void CMakeProject::handleParsingStarted(const CMakeBuildConfiguration *bc) { - if (activeTarget() && activeTarget()->activeBuildConfiguration() == sender()) + if (activeTarget() && activeTarget()->activeBuildConfiguration() == bc) emitParsingStarted(); } diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 92bf4f3b404..09a10c29a6a 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -114,7 +114,7 @@ private: void handleActiveTargetChanged(); void handleActiveBuildConfigurationChanged(); - void handleParsingStarted(); + void handleParsingStarted(const Internal::CMakeBuildConfiguration *bc); void handleTreeScanningFinished(); void updateProjectData(Internal::CMakeBuildConfiguration *cmakeBc); void handleParsingError(Internal::CMakeBuildConfiguration *bc);