From f32a1b1e4ce4af1f6e223ca045a4041657cdaa13 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 19 Apr 2016 12:36:11 +0200 Subject: [PATCH] ProjectExplorer: Add some more functions to buildsteplist Use those functions instead of repeating code all over the place. Change-Id: I03161663b4d5c538fb2ea667353ab7846373ad81 Reviewed-by: Tim Jenssen --- src/plugins/android/androidglobal.h | 15 +++++-------- .../autotoolsbuildconfiguration.cpp | 9 ++------ .../baremetal/baremetalruncontrolfactory.cpp | 12 +++++------ .../cmakelocatorfilter.cpp | 15 +++---------- src/plugins/ios/iosrunconfiguration.cpp | 13 +----------- src/plugins/projectexplorer/buildmanager.cpp | 3 +-- src/plugins/projectexplorer/buildsteplist.cpp | 5 +++++ src/plugins/projectexplorer/buildsteplist.h | 21 +++++++++++++++++++ .../qbsbuildconfiguration.cpp | 6 +----- .../qbsdeployconfigurationfactory.cpp | 6 +----- 10 files changed, 45 insertions(+), 60 deletions(-) diff --git a/src/plugins/android/androidglobal.h b/src/plugins/android/androidglobal.h index 66c942c8f9c..b9cdb4bcc31 100644 --- a/src/plugins/android/androidglobal.h +++ b/src/plugins/android/androidglobal.h @@ -42,18 +42,13 @@ public: template static T *buildStep(const ProjectExplorer::BuildConfiguration *dc) { if (!dc) - return 0; + return nullptr; foreach (const Core::Id &id, dc->knownStepLists()) { - ProjectExplorer::BuildStepList *bsl = dc->stepList(id); - if (!bsl) - return 0; - const QList &buildSteps = bsl->steps(); - for (int i = buildSteps.count() - 1; i >= 0; --i) { - if (T * const step = qobject_cast(buildSteps.at(i))) - return step; - } + T *const step = dc->stepList(id)->firstOfType(); + if (step) + return step; } - return 0; + return nullptr; } template static void assertState(State expected, diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index db67732357e..efbb388018f 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -229,11 +229,6 @@ void AutotoolsBuildConfiguration::setBuildDirectory(const Utils::FileName &direc if (directory == buildDirectory()) return; BuildConfiguration::setBuildDirectory(directory); - BuildStepList *bsl = stepList(BUILDSTEPS_BUILD); - foreach (BuildStep *bs, bsl->steps()) { - ConfigureStep *cs = qobject_cast(bs); - if (cs) { - cs->notifyBuildDirectoryChanged(); - } - } + foreach (auto bs, stepList(BUILDSTEPS_BUILD)->allOfType()) + bs->notifyBuildDirectoryChanged(); } diff --git a/src/plugins/baremetal/baremetalruncontrolfactory.cpp b/src/plugins/baremetal/baremetalruncontrolfactory.cpp index ffedd819159..a31917f15ee 100644 --- a/src/plugins/baremetal/baremetalruncontrolfactory.cpp +++ b/src/plugins/baremetal/baremetalruncontrolfactory.cpp @@ -113,13 +113,11 @@ RunControl *BareMetalRunControlFactory::create( DebuggerStartParameters sp; if (const BuildConfiguration *bc = target->activeBuildConfiguration()) { - if (const BuildStepList *bsl = bc->stepList(BareMetalGdbCommandsDeployStep::stepId())) { - foreach (const BuildStep *bs, bsl->steps()) { - if (auto ds = qobject_cast(bs)) { - if (!sp.commandsAfterConnect.endsWith("\n")) - sp.commandsAfterConnect.append("\n"); - sp.commandsAfterConnect.append(ds->gdbCommands().toLatin1()); - } + if (BuildStepList *bsl = bc->stepList(BareMetalGdbCommandsDeployStep::stepId())) { + foreach (const BareMetalGdbCommandsDeployStep *bs, bsl->allOfType()) { + if (!sp.commandsAfterConnect.endsWith("\n")) + sp.commandsAfterConnect.append("\n"); + sp.commandsAfterConnect.append(bs->gdbCommands().toLatin1()); } } } diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp index 341330c88ba..00431ee3b5b 100644 --- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp @@ -84,29 +84,20 @@ QList CMakeLocatorFilter::matchesFor(QFutureInterface< void CMakeLocatorFilter::accept(Core::LocatorFilterEntry selection) const { // Get the project containing the target selected - CMakeProject *cmakeProject = 0; + CMakeProject *cmakeProject = nullptr; foreach (Project *p, SessionManager::projects()) { cmakeProject = qobject_cast(p); if (cmakeProject && cmakeProject->projectFilePath().toString() == selection.internalData.toString()) break; - cmakeProject = 0; } - if (!cmakeProject) - return; - - if (!cmakeProject->activeTarget()) - return; - - if (!cmakeProject->activeTarget()->activeBuildConfiguration()) + if (!cmakeProject || !cmakeProject->activeTarget() || !cmakeProject->activeTarget()->activeBuildConfiguration()) return; // Find the make step ProjectExplorer::BuildStepList *buildStepList = cmakeProject->activeTarget()->activeBuildConfiguration() ->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); - auto buildStep - = qobject_cast(findOrDefault(buildStepList->steps(), - [](BuildStep *s) -> bool { return qobject_cast(s); })); + auto buildStep = buildStepList->firstOfType(); if (!buildStep) return; diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index 12dabfc69f2..66f4826e0c9 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -174,19 +174,8 @@ void IosRunConfiguration::updateDisplayNames() IosDeployStep *IosRunConfiguration::deployStep() const { - IosDeployStep * step = 0; DeployConfiguration *config = target()->activeDeployConfiguration(); - BuildStepList *bsl = config->stepList(); - if (bsl) { - const QList &buildSteps = bsl->steps(); - for (int i = buildSteps.count() - 1; i >= 0; --i) { - step = qobject_cast(buildSteps.at(i)); - if (step) - break; - } - } - Q_ASSERT_X(step, Q_FUNC_INFO, "Impossible: iOS build configuration without deploy step."); - return step; + return config ? config->stepList()->firstOfType() : nullptr; } FileName IosRunConfiguration::profilePath() const diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp index 7bfd7143c9d..62ea36914bb 100644 --- a/src/plugins/projectexplorer/buildmanager.cpp +++ b/src/plugins/projectexplorer/buildmanager.cpp @@ -553,9 +553,8 @@ bool BuildManager::buildLists(QList bsls, const QStringList &st QStringList names; names.reserve(steps.size()); for (int i = 0; i < bsls.size(); ++i) { - for (int j = 0; j < bsls.at(i)->steps().size(); ++j) { + for (int j = 0; j < bsls.at(i)->count(); ++j) names.append(stepListNames.at(i)); - } } bool success = buildQueueAppend(steps, names, preambelMessage); diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp index a79572a43aa..77139204ce6 100644 --- a/src/plugins/projectexplorer/buildsteplist.cpp +++ b/src/plugins/projectexplorer/buildsteplist.cpp @@ -168,6 +168,11 @@ QList BuildStepList::steps() const return m_steps; } +QList BuildStepList::steps(const std::function &filter) const +{ + return Utils::filtered(steps(), filter); +} + void BuildStepList::insertStep(int position, BuildStep *step) { m_steps.insert(position, step); diff --git a/src/plugins/projectexplorer/buildsteplist.h b/src/plugins/projectexplorer/buildsteplist.h index 313c67f1309..40a8614189d 100644 --- a/src/plugins/projectexplorer/buildsteplist.h +++ b/src/plugins/projectexplorer/buildsteplist.h @@ -47,6 +47,27 @@ public: ~BuildStepList() override; QList steps() const; + QList steps(const std::function &filter) const; + template BS *firstOfType() { + BS *bs = nullptr; + for (int i = 0; i < count(); ++i) { + bs = qobject_cast(at(i)); + if (bs) + return bs; + } + return nullptr; + } + template QListallOfType() { + QList result; + BS *bs = nullptr; + for (int i = 0; i < count(); ++i) { + bs = qobject_cast(at(i)); + if (bs) + result.append(bs); + } + return result; + } + bool isNull() const; int count() const; bool isEmpty() const; diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index 6b7a1880e94..b6403c0f405 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -115,11 +115,7 @@ NamedWidget *QbsBuildConfiguration::createConfigWidget() QbsBuildStep *QbsBuildConfiguration::qbsStep() const { - foreach (BuildStep *bs, stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)->steps()) { - if (QbsBuildStep *qbsBs = qobject_cast(bs)) - return qbsBs; - } - return 0; + return stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)->firstOfType(); } QVariantMap QbsBuildConfiguration::qbsConfiguration() const diff --git a/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp b/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp index fefbfb95924..cbadd8f871b 100644 --- a/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp +++ b/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp @@ -55,11 +55,7 @@ static Core::Id genericQbsDeployConfigurationId() QbsInstallStep *QbsDeployConfiguration::qbsInstallStep() const { - foreach (ProjectExplorer::BuildStep *bs, stepList()->steps()) { - if (QbsInstallStep *install = qobject_cast(bs)) - return install; - } - return 0; + return stepList()->firstOfType(); } QbsDeployConfiguration::QbsDeployConfiguration(ProjectExplorer::Target *target, Core::Id id) :