From 519cc8ded616758cb85857e8845fdc5847339e3a Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 18 May 2016 12:37:29 +0200 Subject: [PATCH] ProjectExplorer: De-duplicate code in IBuildStepFactory derived classes This removes 900 lines of duplicated code, some duplicated checks at runtime and some (minor) quadratic behavior when gathering display names. canClone(), canRestore() and canCreate() and restore() use the same pattern. Handle that on the core side once. Leave retore() virtual to let the ios code unmodified (which is likely not needed, later...). Introduce 'Unclonable' and 'Uncreatable' flags to keep Android package installation and WinRT deployment (non-)functionality unchanged. Change-Id: I0325479aff818a4038b2f241ca733b8d8cd66f2f Reviewed-by: Tobias Hunger --- src/plugins/android/androiddeployqtstep.cpp | 49 ++------------ src/plugins/android/androiddeployqtstep.h | 11 +-- .../autotoolsprojectmanager/autogenstep.cpp | 54 ++------------- .../autotoolsprojectmanager/autogenstep.h | 13 ++-- .../autoreconfstep.cpp | 54 ++------------- .../autotoolsprojectmanager/autoreconfstep.h | 10 +-- .../autotoolsprojectmanager/configurestep.cpp | 53 ++------------- .../autotoolsprojectmanager/configurestep.h | 10 +-- .../autotoolsprojectmanager/makestep.cpp | 47 ++----------- .../autotoolsprojectmanager/makestep.h | 8 +-- .../cmakeprojectmanager/cmakebuildstep.cpp | 49 ++------------ .../cmakeprojectmanager/cmakebuildstep.h | 12 ++-- .../genericprojectmanager/genericmakestep.cpp | 52 +++----------- .../genericprojectmanager/genericmakestep.h | 12 +--- src/plugins/ios/iosbuildstep.cpp | 64 ++++-------------- src/plugins/ios/iosbuildstep.h | 12 +--- src/plugins/ios/iosdeploystepfactory.cpp | 49 ++------------ src/plugins/ios/iosdeploystepfactory.h | 13 +--- src/plugins/ios/iosdsymbuildstep.cpp | 50 ++------------ src/plugins/ios/iosdsymbuildstep.h | 9 +-- .../project/nimcompilerbuildstepfactory.cpp | 58 +++------------- .../nim/project/nimcompilerbuildstepfactory.h | 12 +--- .../project/nimcompilercleanstepfactory.cpp | 53 +++------------ .../nim/project/nimcompilercleanstepfactory.h | 12 +--- src/plugins/projectexplorer/buildstep.cpp | 13 ++++ src/plugins/projectexplorer/buildstep.h | 31 ++++++--- src/plugins/projectexplorer/buildsteplist.cpp | 61 ++++++++--------- .../projectexplorer/buildstepspage.cpp | 11 ++- src/plugins/projectexplorer/processstep.cpp | 44 +----------- src/plugins/projectexplorer/processstep.h | 12 ++-- .../qbsprojectmanager/qbsbuildstep.cpp | 49 ++------------ src/plugins/qbsprojectmanager/qbsbuildstep.h | 11 +-- .../qbsprojectmanager/qbscleanstep.cpp | 48 ++----------- src/plugins/qbsprojectmanager/qbscleanstep.h | 11 +-- .../qbsprojectmanager/qbsinstallstep.cpp | 51 ++------------ .../qbsprojectmanager/qbsinstallstep.h | 11 +-- .../androidpackageinstallationfactory.cpp | 67 +++---------------- .../androidpackageinstallationfactory.h | 13 +--- .../qmakeandroidbuildapkstep.cpp | 57 +++------------- .../qmakeandroidbuildapkstep.h | 15 +---- src/plugins/qmakeprojectmanager/makestep.cpp | 40 ++--------- src/plugins/qmakeprojectmanager/makestep.h | 14 ++-- src/plugins/qmakeprojectmanager/qmakestep.cpp | 52 ++------------ src/plugins/qmakeprojectmanager/qmakestep.h | 9 +-- src/plugins/qnx/qnxdeploystepfactory.cpp | 58 +++------------- src/plugins/qnx/qnxdeploystepfactory.h | 12 +--- .../genericremotelinuxdeploystepfactory.cpp | 65 ++++-------------- .../genericremotelinuxdeploystepfactory.h | 12 ++-- .../winrt/winrtdeployconfiguration.cpp | 57 +++------------- src/plugins/winrt/winrtdeployconfiguration.h | 9 +-- 50 files changed, 309 insertions(+), 1290 deletions(-) diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index 062c13e7a4f..a06f261a54a 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -56,6 +56,7 @@ #include +using namespace ProjectExplorer; using namespace Android; using namespace Android::Internal; @@ -73,60 +74,24 @@ AndroidDeployQtStepFactory::AndroidDeployQtStepFactory(QObject *parent) { } -QList AndroidDeployQtStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const +QList AndroidDeployQtStepFactory::availableSteps(BuildStepList *parent) const { - if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY) - return QList(); - if (!AndroidManager::supportsAndroid(parent->target())) - return QList(); - if (parent->contains(AndroidDeployQtStep::Id)) - return QList(); - return QList() << AndroidDeployQtStep::Id; -} + if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY + || !AndroidManager::supportsAndroid(parent->target()) + || parent->contains(AndroidDeployQtStep::Id)) + return {}; -QString AndroidDeployQtStepFactory::displayNameForId(Core::Id id) const -{ - if (id == AndroidDeployQtStep::Id) - return tr("Deploy to Android device or emulator"); - return QString(); -} - -bool AndroidDeployQtStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const -{ - return availableCreationIds(parent).contains(id); + return {{ AndroidDeployQtStep::Id, tr("Deploy to Android device or emulator") }}; } ProjectExplorer::BuildStep *AndroidDeployQtStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id) { - Q_ASSERT(canCreate(parent, id)); Q_UNUSED(id); return new AndroidDeployQtStep(parent); } -bool AndroidDeployQtStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, ProjectExplorer::idFromMap(map)); -} - -ProjectExplorer::BuildStep *AndroidDeployQtStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) -{ - Q_ASSERT(canRestore(parent, map)); - AndroidDeployQtStep * const step = new AndroidDeployQtStep(parent); - if (!step->fromMap(map)) { - delete step; - return 0; - } - return step; -} - -bool AndroidDeployQtStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const -{ - return canCreate(parent, product->id()); -} - ProjectExplorer::BuildStep *AndroidDeployQtStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) { - Q_ASSERT(canClone(parent, product)); return new AndroidDeployQtStep(parent, static_cast(product)); } diff --git a/src/plugins/android/androiddeployqtstep.h b/src/plugins/android/androiddeployqtstep.h index cfb8f69bd55..577b8fa3797 100644 --- a/src/plugins/android/androiddeployqtstep.h +++ b/src/plugins/android/androiddeployqtstep.h @@ -47,17 +47,10 @@ class AndroidDeployQtStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit AndroidDeployQtStepFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; }; diff --git a/src/plugins/autotoolsprojectmanager/autogenstep.cpp b/src/plugins/autotoolsprojectmanager/autogenstep.cpp index 2b2176dfe48..99bce38854d 100644 --- a/src/plugins/autotoolsprojectmanager/autogenstep.cpp +++ b/src/plugins/autotoolsprojectmanager/autogenstep.cpp @@ -56,67 +56,27 @@ const char AUTOGEN_STEP_ID[] = "AutotoolsProjectManager.AutogenStep"; AutogenStepFactory::AutogenStepFactory(QObject *parent) : IBuildStepFactory(parent) { } -QList AutogenStepFactory::availableCreationIds(BuildStepList *parent) const +QList AutogenStepFactory::availableSteps(BuildStepList *parent) const { - if (!canHandle(parent)) - return QList(); - return QList() << Core::Id(AUTOGEN_STEP_ID); -} + if (parent->target()->project()->id() != Constants::AUTOTOOLS_PROJECT_ID + || parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) + return {}; -QString AutogenStepFactory::displayNameForId(Core::Id id) const -{ - if (id == AUTOGEN_STEP_ID) - return tr("Autogen", "Display name for AutotoolsProjectManager::AutogenStep id."); - return QString(); -} - -bool AutogenStepFactory::canCreate(BuildStepList *parent, Core::Id id) const -{ - return canHandle(parent) && Core::Id(AUTOGEN_STEP_ID) == id; + QString display = tr("Autogen", "Display name for AutotoolsProjectManager::AutogenStep id."); + return {{ AUTOGEN_STEP_ID, display }}; } BuildStep *AutogenStepFactory::create(BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id) return new AutogenStep(parent); } -bool AutogenStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *AutogenStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; return new AutogenStep(parent, static_cast(source)); } -bool AutogenStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *AutogenStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - AutogenStep *bs = new AutogenStep(parent); - if (bs->fromMap(map)) - return bs; - delete bs; - return 0; -} - -bool AutogenStepFactory::canHandle(BuildStepList *parent) const -{ - if (parent->target()->project()->id() == Constants::AUTOTOOLS_PROJECT_ID) - return parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD; - return false; -} - //////////////////////// // AutogenStep class //////////////////////// diff --git a/src/plugins/autotoolsprojectmanager/autogenstep.h b/src/plugins/autotoolsprojectmanager/autogenstep.h index 64b25ad8633..010a0cbbecf 100644 --- a/src/plugins/autotoolsprojectmanager/autogenstep.h +++ b/src/plugins/autotoolsprojectmanager/autogenstep.h @@ -55,16 +55,11 @@ class AutogenStepFactory : public ProjectExplorer::IBuildStepFactory public: AutogenStepFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *bc) const override; - QString displayNameForId(Core::Id id) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; - ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const override; - ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canHandle(ProjectExplorer::BuildStepList *parent) const; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; + ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; }; /////////////////////// diff --git a/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp b/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp index 551cb9f5f22..88aea423f01 100644 --- a/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp +++ b/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp @@ -55,67 +55,27 @@ const char AUTORECONF_ADDITIONAL_ARGUMENTS_KEY[] = "AutotoolsProjectManager.Auto AutoreconfStepFactory::AutoreconfStepFactory(QObject *parent) : IBuildStepFactory(parent) { } -QList AutoreconfStepFactory::availableCreationIds(BuildStepList *parent) const +QList AutoreconfStepFactory::availableSteps(BuildStepList *parent) const { - if (!canHandle(parent)) - return QList(); - return QList() << Core::Id(AUTORECONF_STEP_ID); -} + if (parent->target()->project()->id() != Constants::AUTOTOOLS_PROJECT_ID + || parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) + return {}; -QString AutoreconfStepFactory::displayNameForId(Core::Id id) const -{ - if (id == AUTORECONF_STEP_ID) - return tr("Autoreconf", "Display name for AutotoolsProjectManager::AutoreconfStep id."); - return QString(); -} - -bool AutoreconfStepFactory::canCreate(BuildStepList *parent, Core::Id id) const -{ - return canHandle(parent) && Core::Id(AUTORECONF_STEP_ID) == id; + QString display = tr("Autoreconf", "Display name for AutotoolsProjectManager::AutoreconfStep id."); + return {{ AUTORECONF_STEP_ID, display }}; } BuildStep *AutoreconfStepFactory::create(BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id); return new AutoreconfStep(parent); } -bool AutoreconfStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *AutoreconfStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; return new AutoreconfStep(parent, static_cast(source)); } -bool AutoreconfStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *AutoreconfStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - AutoreconfStep *bs = new AutoreconfStep(parent); - if (bs->fromMap(map)) - return bs; - delete bs; - return 0; -} - -bool AutoreconfStepFactory::canHandle(BuildStepList *parent) const -{ - if (parent->target()->project()->id() == Constants::AUTOTOOLS_PROJECT_ID) - return parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD; - return false; -} - ///////////////////////// // AutoreconfStep class ///////////////////////// diff --git a/src/plugins/autotoolsprojectmanager/autoreconfstep.h b/src/plugins/autotoolsprojectmanager/autoreconfstep.h index ca58644e235..ab6fb705edc 100644 --- a/src/plugins/autotoolsprojectmanager/autoreconfstep.h +++ b/src/plugins/autotoolsprojectmanager/autoreconfstep.h @@ -54,17 +54,11 @@ class AutoreconfStepFactory : public ProjectExplorer::IBuildStepFactory public: AutoreconfStepFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *bc) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - - bool canHandle(ProjectExplorer::BuildStepList *parent) const; }; ///////////////////////// diff --git a/src/plugins/autotoolsprojectmanager/configurestep.cpp b/src/plugins/autotoolsprojectmanager/configurestep.cpp index 530fba28501..f226ecdaf61 100644 --- a/src/plugins/autotoolsprojectmanager/configurestep.cpp +++ b/src/plugins/autotoolsprojectmanager/configurestep.cpp @@ -70,66 +70,27 @@ static QString projectDirRelativeToBuildDir(BuildConfiguration *bc) { ConfigureStepFactory::ConfigureStepFactory(QObject *parent) : IBuildStepFactory(parent) { } -QList ConfigureStepFactory::availableCreationIds(BuildStepList *parent) const +QList ConfigureStepFactory::availableSteps(BuildStepList *parent) const { - if (!canHandle(parent)) - return QList(); - return QList() << Core::Id(CONFIGURE_STEP_ID); -} + if (parent->target()->project()->id() != Constants::AUTOTOOLS_PROJECT_ID + || parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) + return {}; -QString ConfigureStepFactory::displayNameForId(Core::Id id) const -{ - if (id == CONFIGURE_STEP_ID) - return tr("Configure", "Display name for AutotoolsProjectManager::ConfigureStep id."); - return QString(); -} - -bool ConfigureStepFactory::canCreate(BuildStepList *parent, Core::Id id) const -{ - return canHandle(parent) && id == CONFIGURE_STEP_ID; + QString display = tr("Configure", "Display name for AutotoolsProjectManager::ConfigureStep id."); + return {{ CONFIGURE_STEP_ID, display }}; } BuildStep *ConfigureStepFactory::create(BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id) return new ConfigureStep(parent); } -bool ConfigureStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *ConfigureStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; return new ConfigureStep(parent, static_cast(source)); } -bool ConfigureStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *ConfigureStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - ConfigureStep *bs = new ConfigureStep(parent); - if (bs->fromMap(map)) - return bs; - delete bs; - return 0; -} - -bool ConfigureStepFactory::canHandle(BuildStepList *parent) const -{ - if (parent->target()->project()->id() == Constants::AUTOTOOLS_PROJECT_ID) - return parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD; - return false; -} //////////////////////// // ConfigureStep class diff --git a/src/plugins/autotoolsprojectmanager/configurestep.h b/src/plugins/autotoolsprojectmanager/configurestep.h index 77d34a8fd04..a809e0a63e9 100644 --- a/src/plugins/autotoolsprojectmanager/configurestep.h +++ b/src/plugins/autotoolsprojectmanager/configurestep.h @@ -54,17 +54,11 @@ class ConfigureStepFactory : public ProjectExplorer::IBuildStepFactory public: ConfigureStepFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *bc) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - - bool canHandle(ProjectExplorer::BuildStepList *parent) const; }; ////////////////////////// diff --git a/src/plugins/autotoolsprojectmanager/makestep.cpp b/src/plugins/autotoolsprojectmanager/makestep.cpp index ba02a2d440e..bc8aacdcb0f 100644 --- a/src/plugins/autotoolsprojectmanager/makestep.cpp +++ b/src/plugins/autotoolsprojectmanager/makestep.cpp @@ -62,62 +62,25 @@ const char MAKE_STEP_ADDITIONAL_ARGUMENTS_KEY[] = "AutotoolsProjectManager.MakeS MakeStepFactory::MakeStepFactory(QObject *parent) : IBuildStepFactory(parent) { setObjectName(QLatin1String("Autotools::MakeStepFactory")); } -QList MakeStepFactory::availableCreationIds(BuildStepList *parent) const +QList MakeStepFactory::availableSteps(BuildStepList *parent) const { - if (parent->target()->project()->id() == AUTOTOOLS_PROJECT_ID) - return QList() << Core::Id(MAKE_STEP_ID); - return QList(); -} + if (parent->target()->project()->id() != AUTOTOOLS_PROJECT_ID) + return {}; -QString MakeStepFactory::displayNameForId(Core::Id id) const -{ - if (id == MAKE_STEP_ID) - return tr("Make", "Display name for AutotoolsProjectManager::MakeStep id."); - return QString(); -} - -bool MakeStepFactory::canCreate(BuildStepList *parent, Core::Id id) const -{ - if (parent->target()->project()->id() == AUTOTOOLS_PROJECT_ID) - return id == MAKE_STEP_ID; - return false; + return {{ MAKE_STEP_ID, tr("Make", "Display name for AutotoolsProjectManager::MakeStep id.") }}; } BuildStep *MakeStepFactory::create(BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id) return new MakeStep(parent); } -bool MakeStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *MakeStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; return new MakeStep(parent, static_cast(source)); } -bool MakeStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *MakeStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - MakeStep *bs = new MakeStep(parent); - if (bs->fromMap(map)) - return bs; - delete bs; - return 0; -} - ///////////////////// // MakeStep class ///////////////////// diff --git a/src/plugins/autotoolsprojectmanager/makestep.h b/src/plugins/autotoolsprojectmanager/makestep.h index 8c46e7e2518..fdbbdfd4cef 100644 --- a/src/plugins/autotoolsprojectmanager/makestep.h +++ b/src/plugins/autotoolsprojectmanager/makestep.h @@ -55,15 +55,11 @@ class MakeStepFactory : public ProjectExplorer::IBuildStepFactory public: MakeStepFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *bc) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; }; ///////////////////// diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index b7294de4954..31a18b946af 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -512,65 +512,28 @@ QString CMakeBuildStepConfigWidget::summaryText() const CMakeBuildStepFactory::CMakeBuildStepFactory(QObject *parent) : IBuildStepFactory(parent) { } -bool CMakeBuildStepFactory::canCreate(BuildStepList *parent, Core::Id id) const +QList CMakeBuildStepFactory::availableSteps(BuildStepList *parent) const { - if (parent->target()->project()->id() == Constants::CMAKEPROJECT_ID) - return id == MS_ID; - return false; + if (parent->target()->project()->id() != Constants::CMAKEPROJECT_ID) + return {}; + + return {{ MS_ID, tr("Build", "Display name for CMakeProjectManager::CMakeBuildStep id.") }}; } BuildStep *CMakeBuildStepFactory::create(BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id); auto step = new CMakeBuildStep(parent); if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) step->setBuildTarget(CMakeBuildStep::cleanTarget()); return step; } -bool CMakeBuildStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *CMakeBuildStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; return new CMakeBuildStep(parent, static_cast(source)); } -bool CMakeBuildStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *CMakeBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - auto bs = new CMakeBuildStep(parent); - if (bs->fromMap(map)) - return bs; - delete bs; - return 0; -} - -QList CMakeBuildStepFactory::availableCreationIds(BuildStepList *parent) const -{ - if (parent->target()->project()->id() == Constants::CMAKEPROJECT_ID) - return QList() << Core::Id(MS_ID); - return QList(); -} - -QString CMakeBuildStepFactory::displayNameForId(Core::Id id) const -{ - if (id == MS_ID) - return tr("Build", "Display name for CMakeProjectManager::CMakeBuildStep id."); - return QString(); -} - void CMakeBuildStep::processStarted() { m_useNinja = false; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index 8249e1f1f25..1fb677e24cb 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -142,15 +142,11 @@ class CMakeBuildStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit CMakeBuildStepFactory(QObject *parent = 0); - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; - ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const override; - ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - QList availableCreationIds(ProjectExplorer::BuildStepList *bc) const override; - QString displayNameForId(Core::Id id) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; + ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; }; } // namespace Internal diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index f696359bf03..0e581fa1552 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -320,17 +320,19 @@ GenericMakeStepFactory::GenericMakeStepFactory(QObject *parent) : { } -bool GenericMakeStepFactory::canCreate(BuildStepList *parent, const Id id) const +QList GenericMakeStepFactory::availableSteps(BuildStepList *parent) const { - if (parent->target()->project()->id() == Constants::GENERICPROJECT_ID) - return id == GENERIC_MS_ID; - return false; + if (parent->target()->project()->id() != Constants::GENERICPROJECT_ID) + return {}; + + return {{ GENERIC_MS_ID, + QCoreApplication::translate("GenericProjectManager::Internal::GenericMakeStep", + GENERIC_MS_DISPLAY_NAME) }}; } BuildStep *GenericMakeStepFactory::create(BuildStepList *parent, const Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id) GenericMakeStep *step = new GenericMakeStep(parent); if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) { step->setClean(true); @@ -341,50 +343,12 @@ BuildStep *GenericMakeStepFactory::create(BuildStepList *parent, const Id id) return step; } -bool GenericMakeStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *GenericMakeStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; GenericMakeStep *old(qobject_cast(source)); Q_ASSERT(old); return new GenericMakeStep(parent, old); } -bool GenericMakeStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *GenericMakeStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - GenericMakeStep *bs(new GenericMakeStep(parent)); - if (bs->fromMap(map)) - return bs; - delete bs; - return 0; -} - -QList GenericMakeStepFactory::availableCreationIds(BuildStepList *parent) const -{ - if (parent->target()->project()->id() == Constants::GENERICPROJECT_ID) - return QList() << Id(GENERIC_MS_ID); - return QList(); -} - -QString GenericMakeStepFactory::displayNameForId(const Id id) const -{ - if (id == GENERIC_MS_ID) - return QCoreApplication::translate("GenericProjectManager::Internal::GenericMakeStep", - GENERIC_MS_DISPLAY_NAME); - return QString(); -} - } // namespace Internal } // namespace GenericProjectManager diff --git a/src/plugins/genericprojectmanager/genericmakestep.h b/src/plugins/genericprojectmanager/genericmakestep.h index d6f99208319..031366dfa2f 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.h +++ b/src/plugins/genericprojectmanager/genericmakestep.h @@ -107,18 +107,12 @@ class GenericMakeStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit GenericMakeStepFactory(QObject *parent = 0); - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *source) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, - const QVariantMap &map) override; - - QList availableCreationIds(ProjectExplorer::BuildStepList *bc) const override; - QString displayNameForId(Core::Id id) const override; }; } // namespace Internal diff --git a/src/plugins/ios/iosbuildstep.cpp b/src/plugins/ios/iosbuildstep.cpp index 1626bb785a4..88ec09744f2 100644 --- a/src/plugins/ios/iosbuildstep.cpp +++ b/src/plugins/ios/iosbuildstep.cpp @@ -328,22 +328,9 @@ IosBuildStepFactory::IosBuildStepFactory(QObject *parent) : { } -bool IosBuildStepFactory::canCreate(BuildStepList *parent, const Id id) const -{ - if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN - && parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) - return false; - Kit *kit = parent->target()->kit(); - Id deviceType = DeviceTypeKitInformation::deviceTypeId(kit); - return ((deviceType == Constants::IOS_DEVICE_TYPE - || deviceType == Constants::IOS_SIMULATOR_TYPE) - && id == IOS_BUILD_STEP_ID); -} - BuildStep *IosBuildStepFactory::create(BuildStepList *parent, const Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id); IosBuildStep *step = new IosBuildStep(parent); if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) { step->setClean(true); @@ -354,52 +341,27 @@ BuildStep *IosBuildStepFactory::create(BuildStepList *parent, const Id id) return step; } -bool IosBuildStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *IosBuildStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; - IosBuildStep *old(qobject_cast(source)); + IosBuildStep *old = qobject_cast(source); Q_ASSERT(old); return new IosBuildStep(parent, old); } -bool IosBuildStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const +QList IosBuildStepFactory::availableSteps(BuildStepList *parent) const { - return canCreate(parent, idFromMap(map)); -} + Id deviceType = DeviceTypeKitInformation::deviceTypeId(parent->target()->kit()); + if (deviceType != Constants::IOS_DEVICE_TYPE + && deviceType != Constants::IOS_SIMULATOR_TYPE) + return {}; -BuildStep *IosBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - IosBuildStep *bs(new IosBuildStep(parent)); - if (bs->fromMap(map)) - return bs; - delete bs; - return 0; -} + if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN + && parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) + return {}; -QList IosBuildStepFactory::availableCreationIds(BuildStepList *parent) const -{ - Kit *kit = parent->target()->kit(); - Id deviceType = DeviceTypeKitInformation::deviceTypeId(kit); - if (deviceType == Constants::IOS_DEVICE_TYPE - || deviceType == Constants::IOS_SIMULATOR_TYPE) - return QList() << Id(IOS_BUILD_STEP_ID); - return QList(); -} - -QString IosBuildStepFactory::displayNameForId(const Id id) const -{ - if (id == IOS_BUILD_STEP_ID) - return QCoreApplication::translate("GenericProjectManager::Internal::IosBuildStep", - IOS_BUILD_STEP_DISPLAY_NAME); - return QString(); + return {{ IOS_BUILD_STEP_ID, + QCoreApplication::translate("GenericProjectManager::Internal::IosBuildStep", + IOS_BUILD_STEP_DISPLAY_NAME) }}; } } // namespace Internal diff --git a/src/plugins/ios/iosbuildstep.h b/src/plugins/ios/iosbuildstep.h index 9a08d43f9f0..a08884f4918 100644 --- a/src/plugins/ios/iosbuildstep.h +++ b/src/plugins/ios/iosbuildstep.h @@ -108,18 +108,12 @@ class IosBuildStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit IosBuildStepFactory(QObject *parent = 0); - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *source) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, - const QVariantMap &map) override; - - QList availableCreationIds(ProjectExplorer::BuildStepList *bc) const override; - QString displayNameForId(Core::Id id) const override; }; } // namespace Internal diff --git a/src/plugins/ios/iosdeploystepfactory.cpp b/src/plugins/ios/iosdeploystepfactory.cpp index 7f61b5fecda..b2bc8b4a839 100644 --- a/src/plugins/ios/iosdeploystepfactory.cpp +++ b/src/plugins/ios/iosdeploystepfactory.cpp @@ -46,60 +46,23 @@ IosDeployStepFactory::IosDeployStepFactory(QObject *parent) { } -QList IosDeployStepFactory::availableCreationIds(BuildStepList *parent) const +QList IosDeployStepFactory::availableSteps(BuildStepList *parent) const { - if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY) - return QList(); - if (!IosManager::supportsIos(parent->target())) - return QList(); - if (parent->contains(IosDeployStep::Id)) - return QList(); - return QList() << IosDeployStep::Id; -} - -QString IosDeployStepFactory::displayNameForId(Core::Id id) const -{ - if (id == IosDeployStep::Id) - return tr("Deploy to iOS device or emulator"); - return QString(); -} - -bool IosDeployStepFactory::canCreate(BuildStepList *parent, Core::Id id) const -{ - return availableCreationIds(parent).contains(id); + if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_DEPLOY + && IosManager::supportsIos(parent->target()) + && !parent->contains(IosDeployStep::Id)) + return {{ IosDeployStep::Id, tr("Deploy to iOS device or emulator") }}; + return {}; } BuildStep *IosDeployStepFactory::create(BuildStepList *parent, Core::Id id) { - Q_ASSERT(canCreate(parent, id)); Q_UNUSED(id); return new IosDeployStep(parent); } -bool IosDeployStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *IosDeployStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - Q_ASSERT(canRestore(parent, map)); - IosDeployStep * const step = new IosDeployStep(parent); - if (!step->fromMap(map)) { - delete step; - return 0; - } - return step; -} - -bool IosDeployStepFactory::canClone(BuildStepList *parent, BuildStep *product) const -{ - return canCreate(parent, product->id()); -} - BuildStep *IosDeployStepFactory::clone(BuildStepList *parent, BuildStep *product) { - Q_ASSERT(canClone(parent, product)); return new IosDeployStep(parent, static_cast(product)); } diff --git a/src/plugins/ios/iosdeploystepfactory.h b/src/plugins/ios/iosdeploystepfactory.h index 93ac9b784f8..08c550c2b11 100644 --- a/src/plugins/ios/iosdeploystepfactory.h +++ b/src/plugins/ios/iosdeploystepfactory.h @@ -33,21 +33,14 @@ namespace Internal { class IosDeployStepFactory : public ProjectExplorer::IBuildStepFactory { Q_OBJECT + public: explicit IosDeployStepFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, - Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; }; diff --git a/src/plugins/ios/iosdsymbuildstep.cpp b/src/plugins/ios/iosdsymbuildstep.cpp index 4e594c31b8a..a5a2af3cb04 100644 --- a/src/plugins/ios/iosdsymbuildstep.cpp +++ b/src/plugins/ios/iosdsymbuildstep.cpp @@ -331,8 +331,6 @@ IosPresetBuildStepFactory::IosPresetBuildStepFactory(QObject *parent) : BuildStep *IosPresetBuildStepFactory::create(BuildStepList *parent, const Id id) { - if (!canCreate(parent, id)) - return 0; IosPresetBuildStep *step = createPresetStep(parent, id); if (step->completeSetup()) return step; @@ -340,15 +338,8 @@ BuildStep *IosPresetBuildStepFactory::create(BuildStepList *parent, const Id id) return 0; } -bool IosPresetBuildStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *IosPresetBuildStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; IosPresetBuildStep *old = qobject_cast(source); Q_ASSERT(old); IosPresetBuildStep *res = createPresetStep(parent, old->id()); @@ -358,15 +349,8 @@ BuildStep *IosPresetBuildStepFactory::clone(BuildStepList *parent, BuildStep *so return 0; } -bool IosPresetBuildStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - BuildStep *IosPresetBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map) { - if (!canRestore(parent, map)) - return 0; IosPresetBuildStep *bs = createPresetStep(parent, idFromMap(map)); if (bs->fromMap(map)) return bs; @@ -374,38 +358,18 @@ BuildStep *IosPresetBuildStepFactory::restore(BuildStepList *parent, const QVari return 0; } -QString IosDsymBuildStepFactory::displayNameForId(const Id id) const -{ - if (id == Constants::IOS_DSYM_BUILD_STEP_ID) - return QLatin1String("dsymutil"); - return QString(); -} - -QList IosDsymBuildStepFactory::availableCreationIds(BuildStepList *parent) const +QList IosDsymBuildStepFactory::availableSteps(BuildStepList *parent) const { if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN && parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD && parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY) - return QList(); - Kit *kit = parent->target()->kit(); - Id deviceType = DeviceTypeKitInformation::deviceTypeId(kit); - if (deviceType == Constants::IOS_DEVICE_TYPE - || deviceType == Constants::IOS_SIMULATOR_TYPE) - return QList() << Id(Constants::IOS_DSYM_BUILD_STEP_ID); - return QList(); -} + return {}; -bool IosDsymBuildStepFactory::canCreate(BuildStepList *parent, const Id id) const -{ - if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN - && parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD - && parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY) - return false; - Kit *kit = parent->target()->kit(); - Id deviceType = DeviceTypeKitInformation::deviceTypeId(kit); - return ((deviceType == Constants::IOS_DEVICE_TYPE - || deviceType == Constants::IOS_SIMULATOR_TYPE) - && id == Constants::IOS_DSYM_BUILD_STEP_ID); + Id deviceType = DeviceTypeKitInformation::deviceTypeId(parent->target()->kit()); + if (deviceType != Constants::IOS_DEVICE_TYPE && deviceType != Constants::IOS_SIMULATOR_TYPE) + return {}; + + return {{ Constants::IOS_DSYM_BUILD_STEP_ID, "dsymutil" }}; } IosPresetBuildStep *IosDsymBuildStepFactory::createPresetStep(BuildStepList *parent, const Id id) const diff --git a/src/plugins/ios/iosdsymbuildstep.h b/src/plugins/ios/iosdsymbuildstep.h index 819347ce534..a0405df62a8 100644 --- a/src/plugins/ios/iosdsymbuildstep.h +++ b/src/plugins/ios/iosdsymbuildstep.h @@ -101,11 +101,8 @@ public: explicit IosPresetBuildStepFactory(QObject *parent = 0); ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *source) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; @@ -128,9 +125,9 @@ class IosDsymBuildStepFactory : public IosPresetBuildStepFactory { Q_OBJECT public: - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; - QList availableCreationIds(ProjectExplorer::BuildStepList *bc) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; + IosPresetBuildStep *createPresetStep(ProjectExplorer::BuildStepList *parent, const Core::Id id) const override; }; diff --git a/src/plugins/nim/project/nimcompilerbuildstepfactory.cpp b/src/plugins/nim/project/nimcompilerbuildstepfactory.cpp index ec8861b5bdb..211c0d186d4 100644 --- a/src/plugins/nim/project/nimcompilerbuildstepfactory.cpp +++ b/src/plugins/nim/project/nimcompilerbuildstepfactory.cpp @@ -42,34 +42,23 @@ NimCompilerBuildStepFactory::NimCompilerBuildStepFactory(QObject *parent) : IBuildStepFactory(parent) {} -bool NimCompilerBuildStepFactory::canCreate(BuildStepList *parent, Core::Id id) const +QList NimCompilerBuildStepFactory::availableSteps(BuildStepList *parent) const { - QTC_ASSERT(parent, return false); if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) - return false; - if (!qobject_cast(parent->parent())) - return false; - return id == Constants::C_NIMCOMPILERBUILDSTEP_ID; + return {}; + + auto bc = qobject_cast(parent->parent()); + if (!bc || bc->hasNimCompilerBuildStep()) + return {}; + + return {{ Constants::C_NIMCOMPILERBUILDSTEP_ID, tr("Nim Compiler Build Step") }}; } -BuildStep *NimCompilerBuildStepFactory::create(BuildStepList *parent, Core::Id id) +BuildStep *NimCompilerBuildStepFactory::create(BuildStepList *parent, Core::Id) { - if (!canCreate(parent, id)) - return nullptr; return new NimCompilerBuildStep(parent); } -bool NimCompilerBuildStepFactory::canClone(BuildStepList *parent, BuildStep *buildStep) const -{ - QTC_ASSERT(parent, return false); - QTC_ASSERT(buildStep, return false); - if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) - return false; - if (!qobject_cast(parent->parent())) - return false; - return buildStep->id() == Constants::C_NIMCOMPILERBUILDSTEP_ID; -} - BuildStep *NimCompilerBuildStepFactory::clone(BuildStepList *parent, BuildStep *buildStep) { QTC_ASSERT(parent, return nullptr); @@ -78,34 +67,5 @@ BuildStep *NimCompilerBuildStepFactory::clone(BuildStepList *parent, BuildStep * return result->fromMap(buildStep->toMap()) ? result.release() : nullptr; } -bool NimCompilerBuildStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *NimCompilerBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return nullptr; - std::unique_ptr buildStep(new NimCompilerBuildStep(parent)); - if (buildStep->fromMap(map)) - return buildStep.release(); - return nullptr; -} - -QList NimCompilerBuildStepFactory::availableCreationIds(BuildStepList *parent) const -{ - if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD) - if (auto bc = qobject_cast(parent->parent())) - if (!bc->hasNimCompilerBuildStep()) - return { Constants::C_NIMCOMPILERBUILDSTEP_ID }; - return {}; -} - -QString NimCompilerBuildStepFactory::displayNameForId(Core::Id id) const -{ - return id == Constants::C_NIMCOMPILERBUILDSTEP_ID ? tr("Nim Compiler Build Step") : QString(); -} - } diff --git a/src/plugins/nim/project/nimcompilerbuildstepfactory.h b/src/plugins/nim/project/nimcompilerbuildstepfactory.h index 481fd0ddf04..8eb855d68c6 100644 --- a/src/plugins/nim/project/nimcompilerbuildstepfactory.h +++ b/src/plugins/nim/project/nimcompilerbuildstepfactory.h @@ -36,17 +36,11 @@ class NimCompilerBuildStepFactory : public ProjectExplorer::IBuildStepFactory public: NimCompilerBuildStepFactory(QObject *parent = nullptr); - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id); - - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product); - - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map); - - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const; - QString displayNameForId(Core::Id id) const; }; } diff --git a/src/plugins/nim/project/nimcompilercleanstepfactory.cpp b/src/plugins/nim/project/nimcompilercleanstepfactory.cpp index cc7863c30a6..0178eca6f5e 100644 --- a/src/plugins/nim/project/nimcompilercleanstepfactory.cpp +++ b/src/plugins/nim/project/nimcompilercleanstepfactory.cpp @@ -41,59 +41,28 @@ NimCompilerCleanStepFactory::NimCompilerCleanStepFactory(QObject *parent) : IBuildStepFactory(parent) {} -bool NimCompilerCleanStepFactory::canCreate(BuildStepList *parent, Core::Id id) const +QList NimCompilerCleanStepFactory::availableSteps(BuildStepList *parent) const { if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN) - return false; - if (!qobject_cast(parent->parent())) - return false; - return id == Constants::C_NIMCOMPILERCLEANSTEP_ID; + return {}; + + auto bc = qobject_cast(parent->parent()); + if (!bc || bc->hasNimCompilerCleanStep()) + return {}; + + return {{ Constants::C_NIMCOMPILERCLEANSTEP_ID, + tr(Nim::Constants::C_NIMCOMPILERCLEANSTEP_DISPLAY), + BuildStepInfo::Unclonable }}; } -BuildStep *NimCompilerCleanStepFactory::create(BuildStepList *parent, Core::Id id) +BuildStep *NimCompilerCleanStepFactory::create(BuildStepList *parent, Core::Id) { - if (!canCreate(parent, id)) - return nullptr; return new NimCompilerCleanStep(parent); } -bool NimCompilerCleanStepFactory::canClone(BuildStepList *, BuildStep *) const -{ - return false; -} - BuildStep *NimCompilerCleanStepFactory::clone(BuildStepList *, BuildStep *) { return nullptr; } -bool NimCompilerCleanStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *NimCompilerCleanStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return nullptr; - std::unique_ptr cleanStep(new NimCompilerCleanStep(parent)); - if (cleanStep->fromMap(map)) - return cleanStep.release(); - return nullptr; -} - -QList NimCompilerCleanStepFactory::availableCreationIds(BuildStepList *parent) const -{ - if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) - if (auto bc = qobject_cast(parent->parent())) - if (!bc->hasNimCompilerCleanStep()) - return { Constants::C_NIMCOMPILERCLEANSTEP_ID }; - return {}; -} - -QString NimCompilerCleanStepFactory::displayNameForId(Core::Id id) const -{ - return id == Constants::C_NIMCOMPILERCLEANSTEP_ID ? tr(Nim::Constants::C_NIMCOMPILERCLEANSTEP_DISPLAY) : QString(); -} - } diff --git a/src/plugins/nim/project/nimcompilercleanstepfactory.h b/src/plugins/nim/project/nimcompilercleanstepfactory.h index 2025f83affc..1a57e2b33a6 100644 --- a/src/plugins/nim/project/nimcompilercleanstepfactory.h +++ b/src/plugins/nim/project/nimcompilercleanstepfactory.h @@ -36,17 +36,11 @@ class NimCompilerCleanStepFactory : public ProjectExplorer::IBuildStepFactory public: NimCompilerCleanStepFactory(QObject *parent = nullptr); - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id); - - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product); - - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map); - - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const; - QString displayNameForId(Core::Id id) const; }; } diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index 6a255235c0c..1f4f87cf03e 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -30,6 +30,8 @@ #include "deployconfiguration.h" #include "target.h" +#include + /*! \class ProjectExplorer::BuildStep @@ -209,3 +211,14 @@ bool BuildStep::enabled() const IBuildStepFactory::IBuildStepFactory(QObject *parent) : QObject(parent) { } + +BuildStep *IBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map) +{ + const Core::Id id = idFromMap(map); + BuildStep *bs = create(parent, id); + if (bs->fromMap(map)) + return bs; + delete bs; + return nullptr; +} + diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index dfa3c05f2fc..dc243a3bcb0 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -94,6 +94,25 @@ private: bool m_enabled; }; +class PROJECTEXPLORER_EXPORT BuildStepInfo +{ +public: + enum Flags { + Uncreatable = 1 << 0, + Unclonable = 1 << 1, + UniqueStep = 1 << 8 // Can't be used twice in a BuildStepList + }; + + BuildStepInfo() {} + BuildStepInfo(Core::Id id, const QString &displayName, Flags flags = Flags()) + : id(id), displayName(displayName), flags(flags) + {} + + Core::Id id; + QString displayName; + Flags flags = Flags(); +}; + class PROJECTEXPLORER_EXPORT IBuildStepFactory : public QObject { Q_OBJECT @@ -101,17 +120,9 @@ class PROJECTEXPLORER_EXPORT IBuildStepFactory : public QObject public: explicit IBuildStepFactory(QObject *parent = nullptr); - // used to show the list of possible additons to a target, returns a list of types - virtual QList availableCreationIds(BuildStepList *parent) const = 0; - // used to translate the types to names to display to the user - virtual QString displayNameForId(Core::Id id) const = 0; - - virtual bool canCreate(BuildStepList *parent, Core::Id id) const = 0; + virtual QList availableSteps(BuildStepList *parent) const = 0; virtual BuildStep *create(BuildStepList *parent, Core::Id id) = 0; - // used to recreate the runConfigurations when restoring settings - virtual bool canRestore(BuildStepList *parent, const QVariantMap &map) const = 0; - virtual BuildStep *restore(BuildStepList *parent, const QVariantMap &map) = 0; - virtual bool canClone(BuildStepList *parent, BuildStep *product) const = 0; + virtual BuildStep *restore(BuildStepList *parent, const QVariantMap &map); virtual BuildStep *clone(BuildStepList *parent, BuildStep *product) = 0; }; diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp index 77139204ce6..1827d602062 100644 --- a/src/plugins/projectexplorer/buildsteplist.cpp +++ b/src/plugins/projectexplorer/buildsteplist.cpp @@ -39,22 +39,6 @@ using namespace ProjectExplorer; namespace { -IBuildStepFactory *findCloneFactory(BuildStepList *parent, BuildStep *source) -{ - return ExtensionSystem::PluginManager::getObject( - [&parent, &source](IBuildStepFactory *factory) { - return factory->canClone(parent, source); - }); -} - -IBuildStepFactory *findRestoreFactory(BuildStepList *parent, const QVariantMap &map) -{ - return ExtensionSystem::PluginManager::getObject( - [&parent, &map](IBuildStepFactory *factory) { - return factory->canRestore(parent, map); - }); -} - const char STEPS_COUNT_KEY[] = "ProjectExplorer.BuildStepList.StepsCount"; const char STEPS_PREFIX[] = "ProjectExplorer.BuildStepList.Step."; @@ -125,13 +109,23 @@ bool BuildStepList::contains(Core::Id id) const void BuildStepList::cloneSteps(BuildStepList *source) { Q_ASSERT(source); + const QList factories + = ExtensionSystem::PluginManager::getObjects(); foreach (BuildStep *originalbs, source->steps()) { - IBuildStepFactory *factory(findCloneFactory(this, originalbs)); - if (!factory) - continue; - BuildStep *clonebs(factory->clone(this, originalbs)); - if (clonebs) - m_steps.append(clonebs); + foreach (IBuildStepFactory *factory, factories) { + const QList steps = factory->availableSteps(source); + const Core::Id sourceId = originalbs->id(); + const auto canClone = [sourceId](const BuildStepInfo &info) { + return (info.flags & BuildStepInfo::Unclonable) == 0 && info.id == sourceId; + }; + if (Utils::contains(steps, canClone)) { + if (BuildStep *clonebs = factory->clone(this, originalbs)) { + m_steps.append(clonebs); + break; + } + qWarning() << "Cloning of step " << originalbs->displayName() << " failed (continuing)."; + } + } } } @@ -141,6 +135,9 @@ bool BuildStepList::fromMap(const QVariantMap &map) if (!ProjectConfiguration::fromMap(map)) return false; + const QList factories + = ExtensionSystem::PluginManager::getObjects(); + int maxSteps = map.value(QString::fromLatin1(STEPS_COUNT_KEY), 0).toInt(); for (int i = 0; i < maxSteps; ++i) { QVariantMap bsData(map.value(QString::fromLatin1(STEPS_PREFIX) + QString::number(i)).toMap()); @@ -148,17 +145,17 @@ bool BuildStepList::fromMap(const QVariantMap &map) qWarning() << "No step data found for" << i << "(continuing)."; continue; } - IBuildStepFactory *factory = findRestoreFactory(this, bsData); - if (!factory) { - qWarning() << "No factory for step" << i << "in list" << displayName() << "found (continuing)."; - continue; + foreach (IBuildStepFactory *factory, factories) { + const QList steps = factory->availableSteps(this); + const Core::Id id = ProjectExplorer::idFromMap(bsData); + if (Utils::contains(steps, Utils::equal(&BuildStepInfo::id, id))) { + if (BuildStep *bs = factory->restore(this, bsData)) { + appendStep(bs); + break; + } + qWarning() << "Restoration of step" << i << "failed (continuing)."; + } } - BuildStep *bs(factory->restore(this, bsData)); - if (!bs) { - qWarning() << "Restoration of step" << i << "failed (continuing)."; - continue; - } - insertStep(m_steps.count(), bs); } return true; } diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index feb2ee58887..0fe9eca9c46 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -295,9 +295,14 @@ void BuildStepListWidget::updateAddBuildStepMenu() //Build up a list of possible steps and save map the display names to the (internal) name and factories. QList factories = ExtensionSystem::PluginManager::getObjects(); foreach (IBuildStepFactory *factory, factories) { - QList ids = factory->availableCreationIds(m_buildStepList); - foreach (Core::Id id, ids) - map.insert(factory->displayNameForId(id), QPair(id, factory)); + const QList infos = factory->availableSteps(m_buildStepList); + for (const BuildStepInfo &info : infos) { + if (info.flags & BuildStepInfo::Uncreatable) + continue; + if ((info.flags & BuildStepInfo::UniqueStep) && m_buildStepList->contains(info.id)) + continue; + map.insert(info.displayName, qMakePair(info.id, factory)); + } } // Ask the user which one to add diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index a05665f42f5..fd9ba9e9d84 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -154,61 +154,23 @@ bool ProcessStep::fromMap(const QVariantMap &map) // ProcessStepFactory //******* -bool ProcessStepFactory::canCreate(BuildStepList *parent, Core::Id id) const +QList ProcessStepFactory::availableSteps(BuildStepList *parent) const { Q_UNUSED(parent); - return id == PROCESS_STEP_ID; + return {{ PROCESS_STEP_ID, ProcessStep::tr("Custom Process Step", "item in combobox") }}; } BuildStep *ProcessStepFactory::create(BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return nullptr; + Q_UNUSED(id); return new ProcessStep(parent); } -bool ProcessStepFactory::canClone(BuildStepList *parent, BuildStep *bs) const -{ - return canCreate(parent, bs->id()); -} - BuildStep *ProcessStepFactory::clone(BuildStepList *parent, BuildStep *bs) { - if (!canClone(parent, bs)) - return nullptr; return new ProcessStep(parent, static_cast(bs)); } -bool ProcessStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - Core::Id id = ProjectExplorer::idFromMap(map); - return canCreate(parent, id); -} - -BuildStep *ProcessStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return nullptr; - - auto bs = new ProcessStep(parent); - if (bs->fromMap(map)) - return bs; - delete bs; - return nullptr; -} - -QList ProcessStepFactory::availableCreationIds(BuildStepList *parent) const -{ - Q_UNUSED(parent); - return QList() << Core::Id(PROCESS_STEP_ID); -} -QString ProcessStepFactory::displayNameForId(Core::Id id) const -{ - if (id == PROCESS_STEP_ID) - return ProcessStep::tr("Custom Process Step", "item in combobox"); - return QString(); -} - //******* // ProcessStepConfigWidget //******* diff --git a/src/plugins/projectexplorer/processstep.h b/src/plugins/projectexplorer/processstep.h index cabe17fbb9b..8d92fca0925 100644 --- a/src/plugins/projectexplorer/processstep.h +++ b/src/plugins/projectexplorer/processstep.h @@ -37,15 +37,11 @@ class ProcessStepFactory : public IBuildStepFactory Q_OBJECT public: - virtual QList availableCreationIds(BuildStepList *parent) const override; - virtual QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - virtual bool canCreate(BuildStepList *parent, Core::Id id) const override; - virtual BuildStep *create(BuildStepList *parent, Core::Id id) override; - virtual bool canRestore(BuildStepList *parent, const QVariantMap &map) const override; - virtual BuildStep *restore(BuildStepList *parent, const QVariantMap &map) override; - virtual bool canClone(BuildStepList *parent, BuildStep *product) const override; - virtual BuildStep *clone(BuildStepList *parent, BuildStep *product) override; + BuildStep *create(BuildStepList *parent, Core::Id id) override; + BuildStep *clone(BuildStepList *parent, BuildStep *product) override; }; class ProcessStep : public AbstractProcessStep diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp index 4841e495722..8ffafd55601 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp @@ -697,64 +697,23 @@ QbsBuildStepFactory::QbsBuildStepFactory(QObject *parent) : ProjectExplorer::IBuildStepFactory(parent) { } -QList QbsBuildStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const +void QbsBuildStepFactory::availableSteps(QList *steps, + ProjectExplorer::BuildStepList *parent) const { if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD && qobject_cast(parent->parent()) && qobject_cast(parent->target()->project())) - return QList() << Core::Id(Constants::QBS_BUILDSTEP_ID); - return QList(); -} - -QString QbsBuildStepFactory::displayNameForId(Core::Id id) const -{ - if (id == Core::Id(Constants::QBS_BUILDSTEP_ID)) - return tr("Qbs Build"); - return QString(); -} - -bool QbsBuildStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const -{ - if (parent->id() != Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD) - || !qobject_cast(parent->parent()) - || !qobject_cast(parent->target()->project())) - return false; - return id == Core::Id(Constants::QBS_BUILDSTEP_ID); + steps->append({ Constants::QBS_BUILDSTEP_ID, tr("Qbs Build") }); } ProjectExplorer::BuildStep *QbsBuildStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id); return new QbsBuildStep(parent); } -bool QbsBuildStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, ProjectExplorer::idFromMap(map)); -} - -ProjectExplorer::BuildStep *QbsBuildStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - QbsBuildStep *bs = new QbsBuildStep(parent); - if (!bs->fromMap(map)) { - delete bs; - return 0; - } - return bs; -} - -bool QbsBuildStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const -{ - return canCreate(parent, product->id()); -} - ProjectExplorer::BuildStep *QbsBuildStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) { - if (!canClone(parent, product)) - return 0; return new QbsBuildStep(parent, static_cast(product)); } diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h index af15dd2b4e0..9c3f825c2b2 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.h +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h @@ -167,17 +167,10 @@ class QbsBuildStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit QbsBuildStepFactory(QObject *parent = 0); - // used to show the list of possible additons to a target, returns a list of types - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - // used to translate the types to names to display to the user - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - // used to recreate the runConfigurations when restoring settings - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; }; diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.cpp b/src/plugins/qbsprojectmanager/qbscleanstep.cpp index eda6cb04287..b19b0aee842 100644 --- a/src/plugins/qbsprojectmanager/qbscleanstep.cpp +++ b/src/plugins/qbsprojectmanager/qbscleanstep.cpp @@ -300,62 +300,22 @@ QbsCleanStepFactory::QbsCleanStepFactory(QObject *parent) : ProjectExplorer::IBuildStepFactory(parent) { } -QList QbsCleanStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const +void QbsCleanStepFactory::availableSteps(QList *steps, + ProjectExplorer::BuildStepList *parent) const { if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN && qobject_cast(parent->parent())) - return QList() << Core::Id(Constants::QBS_CLEANSTEP_ID); - return QList(); -} - -QString QbsCleanStepFactory::displayNameForId(Core::Id id) const -{ - if (id == Core::Id(Constants::QBS_CLEANSTEP_ID)) - return tr("Qbs Clean"); - return QString(); -} - -bool QbsCleanStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const -{ - if (parent->id() != Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN) - || !qobject_cast(parent->parent())) - return false; - return id == Core::Id(Constants::QBS_CLEANSTEP_ID); + steps->append({ Constants::QBS_CLEANSTEP_ID, tr("Qbs Clean") }); } ProjectExplorer::BuildStep *QbsCleanStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id); return new QbsCleanStep(parent); } -bool QbsCleanStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, ProjectExplorer::idFromMap(map)); -} - -ProjectExplorer::BuildStep *QbsCleanStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - QbsCleanStep *bs = new QbsCleanStep(parent); - if (!bs->fromMap(map)) { - delete bs; - return 0; - } - return bs; -} - -bool QbsCleanStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const -{ - return canCreate(parent, product->id()); -} - ProjectExplorer::BuildStep *QbsCleanStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) { - if (!canClone(parent, product)) - return 0; return new QbsCleanStep(parent, static_cast(product)); } diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.h b/src/plugins/qbsprojectmanager/qbscleanstep.h index 265d5389149..433ba50598a 100644 --- a/src/plugins/qbsprojectmanager/qbscleanstep.h +++ b/src/plugins/qbsprojectmanager/qbscleanstep.h @@ -121,17 +121,10 @@ class QbsCleanStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit QbsCleanStepFactory(QObject *parent = 0); - // used to show the list of possible additons to a target, returns a list of types - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - // used to translate the types to names to display to the user - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - // used to recreate the runConfigurations when restoring settings - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; }; diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp index e3a51c2eb3b..b3fc6717656 100644 --- a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp @@ -356,68 +356,25 @@ QbsInstallStepFactory::QbsInstallStepFactory(QObject *parent) : ProjectExplorer::IBuildStepFactory(parent) { } -QList QbsInstallStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const +void QbsInstallStepFactory::availableSteps(QList *steps, + ProjectExplorer::BuildStepList *parent) const { if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_DEPLOY && qobject_cast(parent->parent()) && qobject_cast(parent->target()->project())) - return QList() << Core::Id(Constants::QBS_INSTALLSTEP_ID); - return QList(); -} - -QString QbsInstallStepFactory::displayNameForId(Core::Id id) const -{ - if (id == Core::Id(Constants::QBS_INSTALLSTEP_ID)) - return tr("Qbs Install"); - return QString(); -} - -bool QbsInstallStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const -{ - if (parent->id() != Core::Id(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY) - || !qobject_cast(parent->parent()) - || !qobject_cast(parent->target()->project())) - return false; - return id == Core::Id(Constants::QBS_INSTALLSTEP_ID); + steps->append({ Constants::QBS_INSTALLSTEP_ID, tr("Qbs Install") }); } ProjectExplorer::BuildStep *QbsInstallStepFactory::create(ProjectExplorer::BuildStepList *parent, const Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id); return new QbsInstallStep(parent); } -bool QbsInstallStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, ProjectExplorer::idFromMap(map)); -} - -ProjectExplorer::BuildStep *QbsInstallStepFactory::restore(ProjectExplorer::BuildStepList *parent, - const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - QbsInstallStep *bs = new QbsInstallStep(parent); - if (!bs->fromMap(map)) { - delete bs; - return 0; - } - return bs; -} - -bool QbsInstallStepFactory::canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *product) const -{ - return canCreate(parent, product->id()); -} - ProjectExplorer::BuildStep *QbsInstallStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) { - if (!canClone(parent, product)) - return 0; return new QbsInstallStep(parent, static_cast(product)); } diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.h b/src/plugins/qbsprojectmanager/qbsinstallstep.h index 95f8434eaff..8ec22fbe924 100644 --- a/src/plugins/qbsprojectmanager/qbsinstallstep.h +++ b/src/plugins/qbsprojectmanager/qbsinstallstep.h @@ -127,17 +127,10 @@ class QbsInstallStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit QbsInstallStepFactory(QObject *parent = 0); - // used to show the list of possible additons to a target, returns a list of types - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - // used to translate the types to names to display to the user - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - // used to recreate the runConfigurations when restoring settings - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; }; diff --git a/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp b/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp index 8b5bf44bdaf..33c984558e5 100644 --- a/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp +++ b/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp @@ -29,8 +29,6 @@ #include #include #include -#include -#include #include using namespace ProjectExplorer; @@ -43,71 +41,26 @@ AndroidPackageInstallationFactory::AndroidPackageInstallationFactory(QObject *pa { } -QList AndroidPackageInstallationFactory::availableCreationIds(BuildStepList *parent) const +QList AndroidPackageInstallationFactory::availableSteps(BuildStepList *parent) const { - Q_UNUSED(parent); - return QList(); -} + if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) + return {}; + if (!Android::AndroidManager::supportsAndroid(parent->target())) + return {}; + if (parent->contains(AndroidPackageInstallationStep::Id)) + return {}; -QString AndroidPackageInstallationFactory::displayNameForId(Core::Id id) const -{ - if (id == AndroidPackageInstallationStep::Id) - return tr("Deploy to device"); - return QString(); -} - -bool AndroidPackageInstallationFactory::canCreate(BuildStepList *parent, Core::Id id) const -{ - Q_UNUSED(parent); - Q_UNUSED(id); - return false; + return {{ AndroidPackageInstallationStep::Id, tr("Deploy to device"), BuildStepInfo::Uncreatable }}; } BuildStep *AndroidPackageInstallationFactory::create(BuildStepList *parent, Core::Id id) { - Q_UNUSED(parent); - Q_UNUSED(id); - return 0; -} - -bool AndroidPackageInstallationFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) - return false; - if (!Android::AndroidManager::supportsAndroid(parent->target())) - return false; - if (parent->contains(AndroidPackageInstallationStep::Id)) - return false; - return ProjectExplorer::idFromMap(map) == AndroidPackageInstallationStep::Id; -} - -BuildStep *AndroidPackageInstallationFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - Q_ASSERT(canRestore(parent, map)); - AndroidPackageInstallationStep * const step = new AndroidPackageInstallationStep(parent); - if (!step->fromMap(map)) { - delete step; - return 0; - } - return step; -} - -bool AndroidPackageInstallationFactory::canClone(BuildStepList *parent, BuildStep *product) const -{ - if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) - return false; - if (!Android::AndroidManager::supportsAndroid(parent->target())) - return false; - if (product->id() != AndroidPackageInstallationStep::Id) - return false; - if (parent->contains(AndroidPackageInstallationStep::Id)) - return false; - return true; + Q_UNUSED(id) + return new AndroidPackageInstallationStep(parent); } BuildStep *AndroidPackageInstallationFactory::clone(BuildStepList *parent, BuildStep *product) { - Q_ASSERT(canClone(parent, product)); return new AndroidPackageInstallationStep(parent, static_cast(product)); } diff --git a/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h b/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h index f8706894397..b1fe533f97c 100644 --- a/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h +++ b/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h @@ -33,21 +33,14 @@ namespace Internal { class AndroidPackageInstallationFactory: public ProjectExplorer::IBuildStepFactory { Q_OBJECT + public: explicit AndroidPackageInstallationFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - - bool canRestore(ProjectExplorer::BuildStepList *parent, - const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; }; diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp index e4dd8acc1d7..0a6920a8383 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp @@ -64,71 +64,30 @@ QmakeAndroidBuildApkStepFactory::QmakeAndroidBuildApkStepFactory(QObject *parent { } -QList QmakeAndroidBuildApkStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const +QList QmakeAndroidBuildApkStepFactory::availableSteps(ProjectExplorer::BuildStepList *parent) const { + ProjectExplorer::Target *target = parent->target(); if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD - || !canHandle(parent->target()) - || parent->contains(ANDROID_BUILD_APK_ID)) { - return QList(); - } + || !target->project()->supportsKit(target->kit()) + || !AndroidManager::supportsAndroid(target) + || !qobject_cast(target->project()) + || parent->contains(ANDROID_BUILD_APK_ID)) + return {}; - return QList() << ANDROID_BUILD_APK_ID; -} - -QString QmakeAndroidBuildApkStepFactory::displayNameForId(const Core::Id id) const -{ - if (id == ANDROID_BUILD_APK_ID) - return tr("Build Android APK"); - return QString(); -} - -bool QmakeAndroidBuildApkStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, const Core::Id id) const -{ - return availableCreationIds(parent).contains(id); + return {{ ANDROID_BUILD_APK_ID, tr("Build Android APK") }}; } ProjectExplorer::BuildStep *QmakeAndroidBuildApkStepFactory::create(ProjectExplorer::BuildStepList *parent, const Core::Id id) { - Q_ASSERT(canCreate(parent, id)); Q_UNUSED(id); return new QmakeAndroidBuildApkStep(parent); } -bool QmakeAndroidBuildApkStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, ProjectExplorer::idFromMap(map)); -} - -ProjectExplorer::BuildStep *QmakeAndroidBuildApkStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) -{ - Q_ASSERT(canRestore(parent, map)); - QmakeAndroidBuildApkStep * const step = new QmakeAndroidBuildApkStep(parent); - if (!step->fromMap(map)) { - delete step; - return 0; - } - return step; -} - -bool QmakeAndroidBuildApkStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const -{ - return canCreate(parent, product->id()); -} - ProjectExplorer::BuildStep *QmakeAndroidBuildApkStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) { - Q_ASSERT(canClone(parent, product)); return new QmakeAndroidBuildApkStep(parent, static_cast(product)); } -bool QmakeAndroidBuildApkStepFactory::canHandle(ProjectExplorer::Target *t) const -{ - return t->project()->supportsKit(t->kit()) - && AndroidManager::supportsAndroid(t) - && qobject_cast(t->project()); -} - - QmakeAndroidBuildApkStep::QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepList *bc) :AndroidBuildApkStep(bc, ANDROID_BUILD_APK_ID) { diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h index 8367236ca00..2f44195c2f8 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h +++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h @@ -34,25 +34,16 @@ namespace Internal { class QmakeAndroidBuildApkStepFactory : public ProjectExplorer::IBuildStepFactory { Q_OBJECT + public: explicit QmakeAndroidBuildApkStepFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; -private: - bool canHandle(ProjectExplorer::Target *t) const; - }; class QmakeAndroidBuildApkStep : public Android::AndroidBuildApkStep diff --git a/src/plugins/qmakeprojectmanager/makestep.cpp b/src/plugins/qmakeprojectmanager/makestep.cpp index ddb3ac8660b..4a1e77e91ac 100644 --- a/src/plugins/qmakeprojectmanager/makestep.cpp +++ b/src/plugins/qmakeprojectmanager/makestep.cpp @@ -482,17 +482,17 @@ MakeStepFactory::MakeStepFactory(QObject *parent) : { } -bool MakeStepFactory::canCreate(BuildStepList *parent, Core::Id id) const +QList MakeStepFactory::availableSteps(BuildStepList *parent) const { - if (parent->target()->project()->id() == Constants::QMAKEPROJECT_ID) - return id == MAKESTEP_BS_ID; - return false; + if (parent->target()->project()->id() != Constants::QMAKEPROJECT_ID) + return {}; + + return {{ MAKESTEP_BS_ID, tr("Make") }}; } BuildStep *MakeStepFactory::create(BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; + Q_UNUSED(id); MakeStep *step = new MakeStep(parent); if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) { step->setClean(true); @@ -501,44 +501,16 @@ BuildStep *MakeStepFactory::create(BuildStepList *parent, Core::Id id) return step; } -bool MakeStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - BuildStep *MakeStepFactory::clone(BuildStepList *parent, BuildStep *source) { - if (!canClone(parent, source)) - return 0; return new MakeStep(parent, static_cast(source)); } -bool MakeStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - BuildStep *MakeStepFactory::restore(BuildStepList *parent, const QVariantMap &map) { - if (!canRestore(parent, map)) - return 0; MakeStep *bs(new MakeStep(parent)); if (bs->fromMap(map)) return bs; delete bs; return 0; } - -QList MakeStepFactory::availableCreationIds(BuildStepList *parent) const -{ - if (parent->target()->project()->id() == Constants::QMAKEPROJECT_ID) - return QList() << Core::Id(MAKESTEP_BS_ID); - return QList(); -} - -QString MakeStepFactory::displayNameForId(Core::Id id) const -{ - if (id == MAKESTEP_BS_ID) - return tr("Make"); - return QString(); -} diff --git a/src/plugins/qmakeprojectmanager/makestep.h b/src/plugins/qmakeprojectmanager/makestep.h index c7584920fb3..9f0abc91923 100644 --- a/src/plugins/qmakeprojectmanager/makestep.h +++ b/src/plugins/qmakeprojectmanager/makestep.h @@ -51,16 +51,14 @@ class MakeStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit MakeStepFactory(QObject *parent = 0); - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; - ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const override; - ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; + ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; + ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; }; + } //namespace Internal class QmakeProject; diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index e0714390404..f7b94258107 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -837,67 +837,27 @@ QMakeStepFactory::QMakeStepFactory(QObject *parent) : { } -bool QMakeStepFactory::canCreate(BuildStepList *parent, Core::Id id) const +QList QMakeStepFactory::availableSteps(BuildStepList *parent) const { if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD) - return false; + return {}; if (!qobject_cast(parent->parent())) - return false; - return id == QMAKE_BS_ID; + return {}; + + return {{ QMAKE_BS_ID, tr("qmake"), BuildStepInfo::UniqueStep }}; } ProjectExplorer::BuildStep *QMakeStepFactory::create(BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return nullptr; + Q_UNUSED(id) return new QMakeStep(parent); } -bool QMakeStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - return canCreate(parent, source->id()); -} - ProjectExplorer::BuildStep *QMakeStepFactory::clone(BuildStepList *parent, ProjectExplorer::BuildStep *source) { - if (!canClone(parent, source)) - return nullptr; return new QMakeStep(parent, qobject_cast(source)); } -bool QMakeStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, ProjectExplorer::idFromMap(map)); -} - -ProjectExplorer::BuildStep *QMakeStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return nullptr; - QMakeStep *bs = new QMakeStep(parent); - if (bs->fromMap(map)) - return bs; - delete bs; - return nullptr; -} - -QList QMakeStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const -{ - if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD) - if (QmakeBuildConfiguration *bc = qobject_cast(parent->parent())) - if (!bc->qmakeStep()) - return QList() << Core::Id(QMAKE_BS_ID); - return QList(); -} - -QString QMakeStepFactory::displayNameForId(Core::Id id) const -{ - if (id == QMAKE_BS_ID) - return tr("qmake"); - return QString(); -} - - QMakeStepConfig::TargetArchConfig QMakeStepConfig::targetArchFor(const Abi &targetAbi, const BaseQtVersion *version) { QMakeStepConfig::TargetArchConfig arch = QMakeStepConfig::NoArch; diff --git a/src/plugins/qmakeprojectmanager/qmakestep.h b/src/plugins/qmakeprojectmanager/qmakestep.h index c15543695a4..085f2789f1d 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.h +++ b/src/plugins/qmakeprojectmanager/qmakestep.h @@ -58,14 +58,11 @@ class QMakeStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit QMakeStepFactory(QObject *parent = 0); - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *bs) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *bs) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; }; } // namespace Internal diff --git a/src/plugins/qnx/qnxdeploystepfactory.cpp b/src/plugins/qnx/qnxdeploystepfactory.cpp index 40280f1cfa9..52f2aab4928 100644 --- a/src/plugins/qnx/qnxdeploystepfactory.cpp +++ b/src/plugins/qnx/qnxdeploystepfactory.cpp @@ -34,6 +34,8 @@ #include #include +using namespace ProjectExplorer; + namespace Qnx { namespace Internal { @@ -42,39 +44,23 @@ QnxDeployStepFactory::QnxDeployStepFactory() { } -QList QnxDeployStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const +QList QnxDeployStepFactory::availableSteps(BuildStepList *parent) const { if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY) - return QList(); + return {}; - Core::Id deviceType = ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(parent->target()->kit()); + Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(parent->target()->kit()); if (deviceType != QnxDeviceFactory::deviceType()) - return QList(); + return {}; - return QList() << RemoteLinux::GenericDirectUploadStep::stepId() - << ProjectExplorer::DeviceCheckBuildStep::stepId(); -} - -QString QnxDeployStepFactory::displayNameForId(Core::Id id) const -{ - if (id == RemoteLinux::GenericDirectUploadStep::stepId()) - return RemoteLinux::GenericDirectUploadStep::displayName(); - else if (id == ProjectExplorer::DeviceCheckBuildStep::stepId()) - return ProjectExplorer::DeviceCheckBuildStep::stepDisplayName(); - - return QString(); -} - -bool QnxDeployStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const -{ - return availableCreationIds(parent).contains(id); + return {{ RemoteLinux::GenericDirectUploadStep::stepId(), + RemoteLinux::GenericDirectUploadStep::displayName() }, + { DeviceCheckBuildStep::stepId(), + DeviceCheckBuildStep::stepDisplayName() }}; } ProjectExplorer::BuildStep *QnxDeployStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id) { - if (!canCreate(parent, id)) - return 0; - if (id == RemoteLinux::GenericDirectUploadStep::stepId()) return new RemoteLinux::GenericDirectUploadStep(parent, id); else if (id == ProjectExplorer::DeviceCheckBuildStep::stepId()) @@ -82,32 +68,8 @@ ProjectExplorer::BuildStep *QnxDeployStepFactory::create(ProjectExplorer::BuildS return 0; } -bool QnxDeployStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, ProjectExplorer::idFromMap(map)); -} - -ProjectExplorer::BuildStep *QnxDeployStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) -{ - if (!canRestore(parent, map)) - return 0; - ProjectExplorer::BuildStep * const bs = create(parent, ProjectExplorer::idFromMap(map)); - if (bs->fromMap(map)) - return bs; - delete bs; - return 0; -} - -bool QnxDeployStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const -{ - return canCreate(parent, product->id()); -} - ProjectExplorer::BuildStep *QnxDeployStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) { - if (!canClone(parent, product)) - return 0; - if (RemoteLinux::GenericDirectUploadStep * const other = qobject_cast(product)) return new RemoteLinux::GenericDirectUploadStep(parent, other); else if (ProjectExplorer::DeviceCheckBuildStep * const other = qobject_cast(product)) diff --git a/src/plugins/qnx/qnxdeploystepfactory.h b/src/plugins/qnx/qnxdeploystepfactory.h index dc9d6e98a69..e7f97f5ad56 100644 --- a/src/plugins/qnx/qnxdeploystepfactory.h +++ b/src/plugins/qnx/qnxdeploystepfactory.h @@ -36,18 +36,10 @@ class QnxDeployStepFactory : public ProjectExplorer::IBuildStepFactory public: explicit QnxDeployStepFactory(); - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, - const QVariantMap &map) override; - - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; }; diff --git a/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.cpp b/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.cpp index 4b55c66e394..58ecdc6b653 100644 --- a/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.cpp +++ b/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.cpp @@ -42,42 +42,25 @@ GenericRemoteLinuxDeployStepFactory::GenericRemoteLinuxDeployStepFactory(QObject { } -QList GenericRemoteLinuxDeployStepFactory::availableCreationIds(BuildStepList *parent) const +QList GenericRemoteLinuxDeployStepFactory::availableSteps(BuildStepList *parent) const { - QList ids; if (!qobject_cast(parent->parent())) - return ids; - ids << TarPackageCreationStep::stepId() << UploadAndInstallTarPackageStep::stepId() - << GenericDirectUploadStep::stepId() - << GenericRemoteLinuxCustomCommandDeploymentStep::stepId() - << RemoteLinuxCheckForFreeDiskSpaceStep::stepId(); - return ids; -} + return {}; -QString GenericRemoteLinuxDeployStepFactory::displayNameForId(Core::Id id) const -{ - if (id == TarPackageCreationStep::stepId()) - return TarPackageCreationStep::displayName(); - if (id == UploadAndInstallTarPackageStep::stepId()) - return UploadAndInstallTarPackageStep::displayName(); - if (id == GenericDirectUploadStep::stepId()) - return GenericDirectUploadStep::displayName(); - if (id == GenericRemoteLinuxCustomCommandDeploymentStep::stepId()) - return GenericRemoteLinuxCustomCommandDeploymentStep::stepDisplayName(); - if (id == RemoteLinuxCheckForFreeDiskSpaceStep::stepId()) - return RemoteLinuxCheckForFreeDiskSpaceStep::stepDisplayName(); - return QString(); -} - -bool GenericRemoteLinuxDeployStepFactory::canCreate(BuildStepList *parent, Core::Id id) const -{ - return availableCreationIds(parent).contains(id); + return {{ TarPackageCreationStep::stepId(), + TarPackageCreationStep::displayName() }, + { UploadAndInstallTarPackageStep::stepId(), + UploadAndInstallTarPackageStep::displayName() }, + { GenericDirectUploadStep::stepId(), + GenericDirectUploadStep::displayName() }, + { GenericRemoteLinuxCustomCommandDeploymentStep::stepId(), + GenericRemoteLinuxCustomCommandDeploymentStep::stepDisplayName() }, + { RemoteLinuxCheckForFreeDiskSpaceStep::stepId(), + RemoteLinuxCheckForFreeDiskSpaceStep::stepDisplayName() }}; } BuildStep *GenericRemoteLinuxDeployStepFactory::create(BuildStepList *parent, Core::Id id) { - Q_ASSERT(canCreate(parent, id)); - if (id == TarPackageCreationStep::stepId()) return new TarPackageCreationStep(parent); if (id == UploadAndInstallTarPackageStep::stepId()) @@ -91,30 +74,6 @@ BuildStep *GenericRemoteLinuxDeployStepFactory::create(BuildStepList *parent, Co return 0; } -bool GenericRemoteLinuxDeployStepFactory::canRestore(BuildStepList *parent, - const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *GenericRemoteLinuxDeployStepFactory::restore(BuildStepList *parent, - const QVariantMap &map) -{ - Q_ASSERT(canRestore(parent, map)); - - BuildStep * const step = create(parent, idFromMap(map)); - if (!step->fromMap(map)) { - delete step; - return 0; - } - return step; -} - -bool GenericRemoteLinuxDeployStepFactory::canClone(BuildStepList *parent, BuildStep *product) const -{ - return canCreate(parent, product->id()); -} - BuildStep *GenericRemoteLinuxDeployStepFactory::clone(BuildStepList *parent, BuildStep *product) { if (TarPackageCreationStep * const other = qobject_cast(product)) diff --git a/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.h b/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.h index 939f071b1f5..af92564fdb7 100644 --- a/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.h +++ b/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.h @@ -33,18 +33,14 @@ namespace Internal { class GenericRemoteLinuxDeployStepFactory : public ProjectExplorer::IBuildStepFactory { Q_OBJECT + public: GenericRemoteLinuxDeployStepFactory(QObject *parent = 0); - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, - const QVariantMap &map) override; - bool canClone(ProjectExplorer::BuildStepList *parent, - ProjectExplorer::BuildStep *product) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override; }; diff --git a/src/plugins/winrt/winrtdeployconfiguration.cpp b/src/plugins/winrt/winrtdeployconfiguration.cpp index da1cc0efd1c..a5a31083725 100644 --- a/src/plugins/winrt/winrtdeployconfiguration.cpp +++ b/src/plugins/winrt/winrtdeployconfiguration.cpp @@ -139,59 +139,22 @@ DeployConfiguration *WinRtDeployConfigurationFactory::clone(Target *parent, return 0; } -QList WinRtDeployStepFactory::availableCreationIds(BuildStepList *parent) const +QList WinRtDeployStepFactory::availableSteps(BuildStepList *parent) const { - QList ids; - if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY) - return ids; - if (!parent->target()->project()->supportsKit(parent->target()->kit())) - return ids; - if (!parent->contains(Constants::WINRT_BUILD_STEP_DEPLOY)) - ids << Constants::WINRT_BUILD_STEP_DEPLOY; - return ids; -} + if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY + || !parent->target()->project()->supportsKit(parent->target()->kit()) + || parent->contains(Constants::WINRT_BUILD_STEP_DEPLOY)) + return {}; -QString WinRtDeployStepFactory::displayNameForId(Core::Id id) const -{ - if (id == Constants::WINRT_BUILD_STEP_DEPLOY) { - return QCoreApplication::translate("WinRt::Internal::WinRtDeployStepFactory", - "Run windeployqt"); - } - return QString(); -} - -bool WinRtDeployStepFactory::canCreate(BuildStepList *parent, Core::Id id) const -{ - return availableCreationIds(parent).contains(id); + return {{ Constants::WINRT_BUILD_STEP_DEPLOY, + QCoreApplication::translate("WinRt::Internal::WinRtDeployStepFactory", "Run windeployqt"), + BuildStepInfo::Unclonable }}; } BuildStep *WinRtDeployStepFactory::create(BuildStepList *parent, Core::Id id) { - if (id == Constants::WINRT_BUILD_STEP_DEPLOY) - return new WinRtPackageDeploymentStep(parent); - return 0; -} - -bool WinRtDeployStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const -{ - return canCreate(parent, idFromMap(map)); -} - -BuildStep *WinRtDeployStepFactory::restore(BuildStepList *parent, const QVariantMap &map) -{ - BuildStep *bs = create(parent, idFromMap(map)); - if (!bs->fromMap(map)) { - delete bs; - bs = 0; - } - return bs; -} - -bool WinRtDeployStepFactory::canClone(BuildStepList *parent, BuildStep *source) const -{ - Q_UNUSED(parent); - Q_UNUSED(source); - return false; + Q_UNUSED(id) + return new WinRtPackageDeploymentStep(parent); } BuildStep *WinRtDeployStepFactory::clone(BuildStepList *parent, BuildStep *source) diff --git a/src/plugins/winrt/winrtdeployconfiguration.h b/src/plugins/winrt/winrtdeployconfiguration.h index 96ac069dfeb..6e036ad7d01 100644 --- a/src/plugins/winrt/winrtdeployconfiguration.h +++ b/src/plugins/winrt/winrtdeployconfiguration.h @@ -49,13 +49,10 @@ public: class WinRtDeployStepFactory : public ProjectExplorer::IBuildStepFactory { public: - QList availableCreationIds(ProjectExplorer::BuildStepList *parent) const override; - QString displayNameForId(Core::Id id) const override; - bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override; + QList + availableSteps(ProjectExplorer::BuildStepList *parent) const override; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override; - bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override; - ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override; - bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) const override; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override; };