aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/android/androidbuildapkstep.cpp14
-rw-r--r--src/plugins/android/androidbuildapkstep.h9
-rw-r--r--src/plugins/android/androiddeployconfiguration.cpp89
-rw-r--r--src/plugins/android/androiddeployconfiguration.h22
-rw-r--r--src/plugins/android/androiddeployqtstep.cpp45
-rw-r--r--src/plugins/android/androiddeployqtstep.h14
-rw-r--r--src/plugins/android/androidrunconfiguration.cpp8
-rw-r--r--src/plugins/android/androidrunconfiguration.h2
-rw-r--r--src/plugins/autotest/testrunconfiguration.h3
-rw-r--r--src/plugins/autotoolsprojectmanager/autogenstep.cpp48
-rw-r--r--src/plugins/autotoolsprojectmanager/autogenstep.h18
-rw-r--r--src/plugins/autotoolsprojectmanager/autoreconfstep.cpp48
-rw-r--r--src/plugins/autotoolsprojectmanager/autoreconfstep.h18
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp149
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h26
-rw-r--r--src/plugins/autotoolsprojectmanager/configurestep.cpp50
-rw-r--r--src/plugins/autotoolsprojectmanager/configurestep.h18
-rw-r--r--src/plugins/autotoolsprojectmanager/makestep.cpp52
-rw-r--r--src/plugins/autotoolsprojectmanager/makestep.h18
-rw-r--r--src/plugins/baremetal/baremetalcustomrunconfiguration.cpp5
-rw-r--r--src/plugins/baremetal/baremetalcustomrunconfiguration.h2
-rw-r--r--src/plugins/baremetal/baremetalgdbcommandsdeploystep.cpp17
-rw-r--r--src/plugins/baremetal/baremetalgdbcommandsdeploystep.h5
-rw-r--r--src/plugins/baremetal/baremetalrunconfiguration.cpp30
-rw-r--r--src/plugins/baremetal/baremetalrunconfiguration.h4
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp147
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h49
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildstep.cpp45
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildstep.h13
-rw-r--r--src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp40
-rw-r--r--src/plugins/cmakeprojectmanager/cmakerunconfiguration.h4
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.cpp108
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.h30
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.cpp86
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.h29
-rw-r--r--src/plugins/genericprojectmanager/genericprojectplugin.cpp3
-rw-r--r--src/plugins/ios/iosbuildconfiguration.cpp49
-rw-r--r--src/plugins/ios/iosbuildconfiguration.h20
-rw-r--r--src/plugins/ios/iosbuildstep.cpp83
-rw-r--r--src/plugins/ios/iosbuildstep.h25
-rw-r--r--src/plugins/ios/iosconstants.h1
-rw-r--r--src/plugins/ios/iosdeployconfiguration.cpp86
-rw-r--r--src/plugins/ios/iosdeployconfiguration.h25
-rw-r--r--src/plugins/ios/iosdeploystep.cpp17
-rw-r--r--src/plugins/ios/iosdeploystep.h19
-rw-r--r--src/plugins/ios/iosdeploystepfactory.cpp29
-rw-r--r--src/plugins/ios/iosdeploystepfactory.h12
-rw-r--r--src/plugins/ios/iosdsymbuildstep.cpp212
-rw-r--r--src/plugins/ios/iosdsymbuildstep.h68
-rw-r--r--src/plugins/ios/iosrunconfiguration.cpp31
-rw-r--r--src/plugins/ios/iosrunconfiguration.h5
-rw-r--r--src/plugins/nim/nim.pro2
-rw-r--r--src/plugins/nim/nim.qbs1
-rw-r--r--src/plugins/nim/nimplugin.cpp2
-rw-r--r--src/plugins/nim/project/nimbuildconfiguration.cpp140
-rw-r--r--src/plugins/nim/project/nimbuildconfiguration.h35
-rw-r--r--src/plugins/nim/project/nimbuildconfigurationfactory.cpp217
-rw-r--r--src/plugins/nim/project/nimbuildconfigurationfactory.h74
-rw-r--r--src/plugins/nim/project/nimcompilerbuildstepfactory.cpp34
-rw-r--r--src/plugins/nim/project/nimcompilerbuildstepfactory.h10
-rw-r--r--src/plugins/nim/project/nimcompilercleanstepfactory.cpp34
-rw-r--r--src/plugins/nim/project/nimcompilercleanstepfactory.h10
-rw-r--r--src/plugins/nim/project/nimrunconfiguration.cpp2
-rw-r--r--src/plugins/projectexplorer/abstractprocessstep.cpp5
-rw-r--r--src/plugins/projectexplorer/abstractprocessstep.h1
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp189
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.h61
-rw-r--r--src/plugins/projectexplorer/buildstep.cpp157
-rw-r--r--src/plugins/projectexplorer/buildstep.h68
-rw-r--r--src/plugins/projectexplorer/buildsteplist.cpp77
-rw-r--r--src/plugins/projectexplorer/buildsteplist.h6
-rw-r--r--src/plugins/projectexplorer/buildstepspage.cpp14
-rw-r--r--src/plugins/projectexplorer/customexecutablerunconfiguration.cpp13
-rw-r--r--src/plugins/projectexplorer/customexecutablerunconfiguration.h6
-rw-r--r--src/plugins/projectexplorer/deployconfiguration.cpp262
-rw-r--r--src/plugins/projectexplorer/deployconfiguration.h97
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.cpp10
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.h3
-rw-r--r--src/plugins/projectexplorer/processstep.cpp36
-rw-r--r--src/plugins/projectexplorer/processstep.h16
-rw-r--r--src/plugins/projectexplorer/projectconfiguration.cpp46
-rw-r--r--src/plugins/projectexplorer/projectconfiguration.h20
-rw-r--r--src/plugins/projectexplorer/runconfiguration.cpp76
-rw-r--r--src/plugins/projectexplorer/runconfiguration.h33
-rw-r--r--src/plugins/projectexplorer/runsettingspropertiespage.cpp16
-rw-r--r--src/plugins/projectexplorer/target.cpp59
-rw-r--r--src/plugins/pythoneditor/pythoneditorplugin.cpp19
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp199
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.h41
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.cpp39
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.h23
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.cpp38
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.h19
-rw-r--r--src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp111
-rw-r--r--src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.h24
-rw-r--r--src/plugins/qbsprojectmanager/qbsinstallstep.cpp58
-rw-r--r--src/plugins/qbsprojectmanager/qbsinstallstep.h20
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h1
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp43
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.h6
-rw-r--r--src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp30
-rw-r--r--src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h11
-rw-r--r--src/plugins/qmakeandroidsupport/androidpackageinstallationstep.cpp6
-rw-r--r--src/plugins/qmakeandroidsupport/androidpackageinstallationstep.h3
-rw-r--r--src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp58
-rw-r--r--src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h16
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp45
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h17
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp25
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h13
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp18
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h6
-rw-r--r--src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp13
-rw-r--r--src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h3
-rw-r--r--src/plugins/qmakeprojectmanager/makestep.cpp78
-rw-r--r--src/plugins/qmakeprojectmanager/makestep.h23
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp212
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h29
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectimporter.h5
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectmanagerconstants.h2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakestep.cpp55
-rw-r--r--src/plugins/qmakeprojectmanager/qmakestep.h16
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h1
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp9
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h6
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp30
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h2
-rw-r--r--src/plugins/qnx/qnx.pro4
-rw-r--r--src/plugins/qnx/qnx.qbs4
-rw-r--r--src/plugins/qnx/qnxdeployconfiguration.cpp42
-rw-r--r--src/plugins/qnx/qnxdeployconfiguration.h20
-rw-r--r--src/plugins/qnx/qnxdeployconfigurationfactory.cpp122
-rw-r--r--src/plugins/qnx/qnxdeployconfigurationfactory.h58
-rw-r--r--src/plugins/qnx/qnxdeploystepfactory.cpp82
-rw-r--r--src/plugins/qnx/qnxdeploystepfactory.h48
-rw-r--r--src/plugins/qnx/qnxplugin.cpp4
-rw-r--r--src/plugins/qnx/qnxrunconfiguration.cpp18
-rw-r--r--src/plugins/qnx/qnxrunconfiguration.h2
-rw-r--r--src/plugins/remotelinux/abstractpackagingstep.cpp11
-rw-r--r--src/plugins/remotelinux/abstractpackagingstep.h6
-rw-r--r--src/plugins/remotelinux/abstractremotelinuxdeploystep.cpp6
-rw-r--r--src/plugins/remotelinux/abstractremotelinuxdeploystep.h4
-rw-r--r--src/plugins/remotelinux/genericdirectuploadstep.cpp19
-rw-r--r--src/plugins/remotelinux/genericdirectuploadstep.h5
-rw-r--r--src/plugins/remotelinux/genericremotelinuxdeploystepfactory.cpp93
-rw-r--r--src/plugins/remotelinux/genericremotelinuxdeploystepfactory.h49
-rw-r--r--src/plugins/remotelinux/remotelinux.pro4
-rw-r--r--src/plugins/remotelinux/remotelinux.qbs4
-rw-r--r--src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp25
-rw-r--r--src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.h9
-rw-r--r--src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.cpp36
-rw-r--r--src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.h9
-rw-r--r--src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp8
-rw-r--r--src/plugins/remotelinux/remotelinuxcustomrunconfiguration.h2
-rw-r--r--src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp43
-rw-r--r--src/plugins/remotelinux/remotelinuxdeployconfiguration.h22
-rw-r--r--src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.cpp134
-rw-r--r--src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.h54
-rw-r--r--src/plugins/remotelinux/remotelinuxplugin.cpp30
-rw-r--r--src/plugins/remotelinux/remotelinuxrunconfiguration.cpp29
-rw-r--r--src/plugins/remotelinux/remotelinuxrunconfiguration.h8
-rw-r--r--src/plugins/remotelinux/tarpackagecreationstep.cpp11
-rw-r--r--src/plugins/remotelinux/tarpackagecreationstep.h2
-rw-r--r--src/plugins/remotelinux/uploadandinstalltarpackagestep.cpp12
-rw-r--r--src/plugins/remotelinux/uploadandinstalltarpackagestep.h4
-rw-r--r--src/plugins/winrt/winrtdeployconfiguration.cpp156
-rw-r--r--src/plugins/winrt/winrtdeployconfiguration.h35
-rw-r--r--src/plugins/winrt/winrtpackagedeploymentstep.cpp1
-rw-r--r--src/plugins/winrt/winrtpackagedeploymentstep.h4
-rw-r--r--src/plugins/winrt/winrtplugin.cpp4
-rw-r--r--src/plugins/winrt/winrtrunconfiguration.cpp13
-rw-r--r--src/plugins/winrt/winrtrunconfiguration.h3
-rw-r--r--src/plugins/winrt/winrtrunfactories.cpp5
-rw-r--r--src/plugins/winrt/winrtrunfactories.h2
174 files changed, 1879 insertions, 4542 deletions
diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp
index 6f44d87ad8..9cf5aa76e0 100644
--- a/src/plugins/android/androidbuildapkstep.cpp
+++ b/src/plugins/android/androidbuildapkstep.cpp
@@ -95,7 +95,7 @@ private:
this);
};
-AndroidBuildApkStep::AndroidBuildApkStep(ProjectExplorer::BuildStepList *parent, const Core::Id id)
+AndroidBuildApkStep::AndroidBuildApkStep(ProjectExplorer::BuildStepList *parent, Core::Id id)
: ProjectExplorer::AbstractProcessStep(parent, id),
m_buildTargetSdk(AndroidConfig::apiLevelNameFor(AndroidConfigurations::
sdkManager()->latestAndroidSdkPlatform()))
@@ -104,18 +104,6 @@ AndroidBuildApkStep::AndroidBuildApkStep(ProjectExplorer::BuildStepList *parent,
setDefaultDisplayName(tr("Build Android APK"));
}
-AndroidBuildApkStep::AndroidBuildApkStep(ProjectExplorer::BuildStepList *parent,
- AndroidBuildApkStep *other)
- : ProjectExplorer::AbstractProcessStep(parent, other),
- m_signPackage(other->signPackage()),
- m_verbose(other->m_verbose),
- m_useMinistro(other->useMinistro()),
- m_openPackageLocation(other->m_openPackageLocation),
- // leave m_openPackageLocationForRun at false
- m_buildTargetSdk(other->m_buildTargetSdk)
-{
-}
-
bool AndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
{
ProjectExplorer::BuildConfiguration *bc = buildConfiguration();
diff --git a/src/plugins/android/androidbuildapkstep.h b/src/plugins/android/androidbuildapkstep.h
index c5ef1a1e9f..022c4b8bc2 100644
--- a/src/plugins/android/androidbuildapkstep.h
+++ b/src/plugins/android/androidbuildapkstep.h
@@ -38,9 +38,11 @@ namespace Android {
class ANDROID_EXPORT AndroidBuildApkStep : public ProjectExplorer::AbstractProcessStep
{
Q_OBJECT
-public:
- AndroidBuildApkStep(ProjectExplorer::BuildStepList *bc, const Core::Id id);
+protected:
+ AndroidBuildApkStep(ProjectExplorer::BuildStepList *bc, Core::Id id);
+
+public:
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
@@ -75,9 +77,6 @@ public:
protected:
Q_INVOKABLE void showInGraphicalShell();
- AndroidBuildApkStep(ProjectExplorer::BuildStepList *bc,
- AndroidBuildApkStep *other);
-
bool init(QList<const BuildStep *> &earlierSteps) override;
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
bool immutable() const override { return true; }
diff --git a/src/plugins/android/androiddeployconfiguration.cpp b/src/plugins/android/androiddeployconfiguration.cpp
index 85d191524c..a323fc72aa 100644
--- a/src/plugins/android/androiddeployconfiguration.cpp
+++ b/src/plugins/android/androiddeployconfiguration.cpp
@@ -24,6 +24,7 @@
****************************************************************************/
#include "androiddeployconfiguration.h"
+
#include "androidconstants.h"
#include "androiddeployqtstep.h"
#include "androidmanager.h"
@@ -46,92 +47,40 @@ namespace Internal {
// Qt 5.2 has a new form of deployment
const char ANDROID_DEPLOYCONFIGURATION_ID[] = "Qt4ProjectManager.AndroidDeployConfiguration2";
-AndroidDeployConfiguration::AndroidDeployConfiguration(Target *parent, Core::Id id)
- : DeployConfiguration(parent, id)
-{
- setDisplayName(tr("Deploy to Android device"));
- setDefaultDisplayName(displayName());
-}
-
-AndroidDeployConfiguration::AndroidDeployConfiguration(Target *parent, DeployConfiguration *source)
- : DeployConfiguration(parent, source)
-{
- cloneSteps(source);
-}
-
-AndroidDeployConfigurationFactory::AndroidDeployConfigurationFactory(QObject *parent)
- : DeployConfigurationFactory(parent)
-{
- setObjectName(QLatin1String("AndroidDeployConfigurationFactory"));
-}
-
-bool AndroidDeployConfigurationFactory::canCreate(Target *parent, Core::Id id) const
-{
- return availableCreationIds(parent).contains(id);
-}
-
-DeployConfiguration *AndroidDeployConfigurationFactory::create(Target *parent, Core::Id id)
-{
- AndroidDeployConfiguration *dc = new AndroidDeployConfiguration(parent, id);
- dc->stepList()->insertStep(0, new AndroidDeployQtStep(dc->stepList()));
- return dc;
-}
-
-bool AndroidDeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
-{
- return canCreate(parent, idFromMap(map));
-}
-
-DeployConfiguration *AndroidDeployConfigurationFactory::restore(Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
-
- AndroidDeployConfiguration *dc = new AndroidDeployConfiguration(parent, idFromMap(map));
- if (dc->fromMap(map))
- return dc;
+AndroidDeployConfiguration::AndroidDeployConfiguration(Target *parent)
+ : DeployConfiguration(parent, ANDROID_DEPLOYCONFIGURATION_ID)
+{}
- delete dc;
- return 0;
-}
-
-bool AndroidDeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *source) const
+void AndroidDeployConfiguration::initialize()
{
- if (!AndroidManager::supportsAndroid(parent))
- return false;
- return canCreate(parent, source->id());
+ stepList()->insertStep(0, new AndroidDeployQtStep(stepList()));
}
-DeployConfiguration *AndroidDeployConfigurationFactory::clone(Target *parent, DeployConfiguration *source)
+AndroidDeployConfigurationFactory::AndroidDeployConfigurationFactory()
{
- if (!canClone(parent, source))
- return 0;
- return new AndroidDeployConfiguration(parent, source);
+ setObjectName("AndroidDeployConfigurationFactory");
+ registerDeployConfiguration<AndroidDeployConfiguration>(ANDROID_DEPLOYCONFIGURATION_ID);
+ setSupportedTargetDeviceTypes({Constants::ANDROID_DEVICE_TYPE});
+ setDefaultDisplayName(AndroidDeployConfiguration::tr("Deploy to Android device"));
}
-QList<Core::Id> AndroidDeployConfigurationFactory::availableCreationIds(Target *parent) const
+QList<QString> AndroidDeployConfigurationFactory::availableBuildTargets(Target *parent) const
{
- QList<Core::Id> ids;
- if (!parent->project()->supportsKit(parent->kit()))
- return ids;
-
ToolChain *tc = ToolChainKitInformation::toolChain(parent->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
if (!tc || tc->targetAbi().osFlavor() != Abi::AndroidLinuxFlavor)
- return ids;
+ return {};
QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(parent->kit());
- if (!qt || qt->type() != QLatin1String(Constants::ANDROIDQT))
- return ids;
- ids << Core::Id(ANDROID_DEPLOYCONFIGURATION_ID);
- return ids;
+ if (!qt || qt->type() != Constants::ANDROIDQT)
+ return {};
+ return {QString()};
}
-QString AndroidDeployConfigurationFactory::displayNameForId(Core::Id id) const
+bool AndroidDeployConfigurationFactory::canHandle(Target *parent) const
{
- if (id == Core::Id(ANDROID_DEPLOYCONFIGURATION_ID))
- return tr("Deploy on Android");
- return QString();
+ return DeployConfigurationFactory::canHandle(parent)
+ && AndroidManager::supportsAndroid(parent->kit());
}
} // namespace Internal
diff --git a/src/plugins/android/androiddeployconfiguration.h b/src/plugins/android/androiddeployconfiguration.h
index 8ce9191e6d..fb1f5f5066 100644
--- a/src/plugins/android/androiddeployconfiguration.h
+++ b/src/plugins/android/androiddeployconfiguration.h
@@ -33,14 +33,10 @@ namespace Internal {
class AndroidDeployConfiguration : public ProjectExplorer::DeployConfiguration
{
Q_OBJECT
- friend class AndroidDeployConfigurationFactory;
public:
- AndroidDeployConfiguration(ProjectExplorer::Target *parent, Core::Id id);
-
-protected:
- AndroidDeployConfiguration(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *source);
-
+ explicit AndroidDeployConfiguration(ProjectExplorer::Target *parent);
+ void initialize() override;
};
class AndroidDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
@@ -48,18 +44,10 @@ class AndroidDeployConfigurationFactory : public ProjectExplorer::DeployConfigur
Q_OBJECT
public:
- explicit AndroidDeployConfigurationFactory(QObject *parent = 0);
-
- bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override;
- ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, Core::Id id) override;
- bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::DeployConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
- bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *source) const override;
- ProjectExplorer::DeployConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *source) override;
+ AndroidDeployConfigurationFactory();
- QList<Core::Id> availableCreationIds(ProjectExplorer::Target *parent) const override;
- // used to translate the ids to names to display to the user
- QString displayNameForId(Core::Id id) const override;
+ bool canHandle(ProjectExplorer::Target *target) const override;
+ QList<QString> availableBuildTargets(ProjectExplorer::Target *parent) const override;
};
} // namespace Internal
diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp
index 4428eb7039..ca10a6d32c 100644
--- a/src/plugins/android/androiddeployqtstep.cpp
+++ b/src/plugins/android/androiddeployqtstep.cpp
@@ -68,56 +68,29 @@ const QLatin1String InstallFailedPermissionModelDowngrade("INSTALL_FAILED_PERMIS
const QLatin1String InstallFailedVersionDowngrade("INSTALL_FAILED_VERSION_DOWNGRADE");
const Core::Id AndroidDeployQtStep::Id("Qt4ProjectManager.AndroidDeployQtStep");
-//////////////////
-// AndroidDeployQtStepFactory
-/////////////////
-
-AndroidDeployQtStepFactory::AndroidDeployQtStepFactory(QObject *parent)
- : IBuildStepFactory(parent)
-{
-}
+// AndroidDeployQtStepFactory
-QList<BuildStepInfo> AndroidDeployQtStepFactory::availableSteps(BuildStepList *parent) const
+AndroidDeployQtStepFactory::AndroidDeployQtStepFactory()
{
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY
- || !AndroidManager::supportsAndroid(parent->target())
- || parent->contains(AndroidDeployQtStep::Id))
- return {};
-
- return {{AndroidDeployQtStep::Id, tr("Deploy to Android device or emulator")}};
+ registerStep<AndroidDeployQtStep>(AndroidDeployQtStep::Id);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
+ setRepeatable(false);
+ setDisplayName(tr("Deploy to Android device or emulator"));
}
-ProjectExplorer::BuildStep *AndroidDeployQtStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id)
+bool AndroidDeployQtStepFactory::canHandle(BuildStepList *parent) const
{
- Q_UNUSED(id);
- return new AndroidDeployQtStep(parent);
+ return BuildStepFactory::canHandle(parent)
+ && AndroidManager::supportsAndroid(parent->target());
}
-ProjectExplorer::BuildStep *AndroidDeployQtStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product)
-{
- return new AndroidDeployQtStep(parent, static_cast<AndroidDeployQtStep *>(product));
-}
-//////////////////
// AndroidDeployQtStep
-/////////////////
AndroidDeployQtStep::AndroidDeployQtStep(ProjectExplorer::BuildStepList *parent)
: ProjectExplorer::BuildStep(parent, Id)
{
- ctor();
-}
-
-AndroidDeployQtStep::AndroidDeployQtStep(ProjectExplorer::BuildStepList *parent,
- AndroidDeployQtStep *other)
- : ProjectExplorer::BuildStep(parent, other)
-{
- ctor();
-}
-
-void AndroidDeployQtStep::ctor()
-{
m_uninstallPreviousPackage = QtSupport::QtKitInformation::qtVersion(target()->kit())->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0);
m_uninstallPreviousPackageRun = false;
diff --git a/src/plugins/android/androiddeployqtstep.h b/src/plugins/android/androiddeployqtstep.h
index 734fc80545..d71cead2bd 100644
--- a/src/plugins/android/androiddeployqtstep.h
+++ b/src/plugins/android/androiddeployqtstep.h
@@ -41,18 +41,12 @@ QT_END_NAMESPACE
namespace Android {
namespace Internal {
-class AndroidDeployQtStepFactory : public ProjectExplorer::IBuildStepFactory
+class AndroidDeployQtStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit AndroidDeployQtStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *product) override;
+ AndroidDeployQtStepFactory();
+ bool canHandle(ProjectExplorer::BuildStepList *bsl) const;
};
class AndroidDeployQtStep : public ProjectExplorer::BuildStep
@@ -95,8 +89,6 @@ signals:
void setSerialNumber(const QString &serialNumber);
private:
- AndroidDeployQtStep(ProjectExplorer::BuildStepList *bc, AndroidDeployQtStep *other);
- void ctor();
void runCommand(const QString &program, const QStringList &arguments);
bool init(QList<const BuildStep *> &earlierSteps) override;
diff --git a/src/plugins/android/androidrunconfiguration.cpp b/src/plugins/android/androidrunconfiguration.cpp
index f6a1e858a4..e0b86db12f 100644
--- a/src/plugins/android/androidrunconfiguration.cpp
+++ b/src/plugins/android/androidrunconfiguration.cpp
@@ -45,8 +45,8 @@ const char amStartArgsKey[] = "Android.AmStartArgsKey";
const char preStartShellCmdsKey[] = "Android.PreStartShellCmdListKey";
const char postFinishShellCmdsKey[] = "Android.PostFinishShellCmdListKey";
-AndroidRunConfiguration::AndroidRunConfiguration(Target *target)
- : RunConfiguration(target)
+AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id)
+ : RunConfiguration(target, id)
{
}
@@ -87,10 +87,12 @@ Utils::OutputFormatter *AndroidRunConfiguration::createOutputFormatter() const
bool AndroidRunConfiguration::fromMap(const QVariantMap &map)
{
+ if (!RunConfiguration::fromMap(map))
+ return false;
m_preStartShellCommands = map.value(preStartShellCmdsKey).toStringList();
m_postFinishShellCommands = map.value(postFinishShellCmdsKey).toStringList();
m_amStartExtraArgs = map.value(amStartArgsKey).toStringList();
- return RunConfiguration::fromMap(map);
+ return true;
}
QVariantMap AndroidRunConfiguration::toMap() const
diff --git a/src/plugins/android/androidrunconfiguration.h b/src/plugins/android/androidrunconfiguration.h
index 358871dc19..f012dc0805 100644
--- a/src/plugins/android/androidrunconfiguration.h
+++ b/src/plugins/android/androidrunconfiguration.h
@@ -35,7 +35,7 @@ class ANDROID_EXPORT AndroidRunConfiguration : public ProjectExplorer::RunConfig
{
Q_OBJECT
public:
- explicit AndroidRunConfiguration(ProjectExplorer::Target *target);
+ explicit AndroidRunConfiguration(ProjectExplorer::Target *target, Core::Id id);
QWidget *createConfigurationWidget() override;
Utils::OutputFormatter *createOutputFormatter() const override;
diff --git a/src/plugins/autotest/testrunconfiguration.h b/src/plugins/autotest/testrunconfiguration.h
index 34ba6b8363..4868ef7b5a 100644
--- a/src/plugins/autotest/testrunconfiguration.h
+++ b/src/plugins/autotest/testrunconfiguration.h
@@ -47,9 +47,8 @@ class TestRunConfiguration : public ProjectExplorer::RunConfiguration
public:
TestRunConfiguration(ProjectExplorer::Target *parent, TestConfiguration *config)
- : ProjectExplorer::RunConfiguration(parent)
+ : ProjectExplorer::RunConfiguration(parent, "AutoTest.TestRunConfig")
{
- initialize("AutoTest.TestRunConfig");
setDefaultDisplayName(tr("AutoTest Debug"));
bool enableQuick = false;
diff --git a/src/plugins/autotoolsprojectmanager/autogenstep.cpp b/src/plugins/autotoolsprojectmanager/autogenstep.cpp
index 6f62126e9b..0106a435b8 100644
--- a/src/plugins/autotoolsprojectmanager/autogenstep.cpp
+++ b/src/plugins/autotoolsprojectmanager/autogenstep.cpp
@@ -50,53 +50,21 @@ using namespace ProjectExplorer;
const char AUTOGEN_ADDITIONAL_ARGUMENTS_KEY[] = "AutotoolsProjectManager.AutogenStep.AdditionalArguments";
const char AUTOGEN_STEP_ID[] = "AutotoolsProjectManager.AutogenStep";
-/////////////////////////////
-// AutogenStepFactory class
-/////////////////////////////
-AutogenStepFactory::AutogenStepFactory(QObject *parent) : IBuildStepFactory(parent)
-{ }
-QList<BuildStepInfo> AutogenStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->target()->project()->id() != Constants::AUTOTOOLS_PROJECT_ID
- || parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
- return {};
-
- QString display = tr("Autogen", "Display name for AutotoolsProjectManager::AutogenStep id.");
- return {{AUTOGEN_STEP_ID, display}};
-}
+// AutogenStepFactory
-BuildStep *AutogenStepFactory::create(BuildStepList *parent, Core::Id id)
+AutogenStepFactory::AutogenStepFactory()
{
- Q_UNUSED(id)
- return new AutogenStep(parent);
+ registerStep<AutogenStep>(AUTOGEN_STEP_ID);
+ setDisplayName(tr("Autogen", "Display name for AutotoolsProjectManager::AutogenStep id."));
+ setSupportedProjectType(Constants::AUTOTOOLS_PROJECT_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
}
-BuildStep *AutogenStepFactory::clone(BuildStepList *parent, BuildStep *source)
-{
- return new AutogenStep(parent, static_cast<AutogenStep *>(source));
-}
-////////////////////////
-// AutogenStep class
-////////////////////////
-AutogenStep::AutogenStep(BuildStepList *bsl) : AbstractProcessStep(bsl, Core::Id(AUTOGEN_STEP_ID))
-{
- ctor();
-}
-
-AutogenStep::AutogenStep(BuildStepList *bsl, Core::Id id) : AbstractProcessStep(bsl, id)
-{
- ctor();
-}
-
-AutogenStep::AutogenStep(BuildStepList *bsl, AutogenStep *bs) : AbstractProcessStep(bsl, bs),
- m_additionalArguments(bs->additionalArguments())
-{
- ctor();
-}
+// AutogenStep
-void AutogenStep::ctor()
+AutogenStep::AutogenStep(BuildStepList *bsl) : AbstractProcessStep(bsl, AUTOGEN_STEP_ID)
{
setDefaultDisplayName(tr("Autogen"));
}
diff --git a/src/plugins/autotoolsprojectmanager/autogenstep.h b/src/plugins/autotoolsprojectmanager/autogenstep.h
index 010a0cbbec..320c0bacaf 100644
--- a/src/plugins/autotoolsprojectmanager/autogenstep.h
+++ b/src/plugins/autotoolsprojectmanager/autogenstep.h
@@ -48,18 +48,12 @@ class AutogenStepConfigWidget;
*
* This factory is used to create instances of AutogenStep.
*/
-class AutogenStepFactory : public ProjectExplorer::IBuildStepFactory
+class AutogenStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- AutogenStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override;
+ AutogenStepFactory();
};
///////////////////////
@@ -97,14 +91,8 @@ public:
signals:
void additionalArgumentsChanged(const QString &);
-protected:
- AutogenStep(ProjectExplorer::BuildStepList *bsl, AutogenStep *bs);
- AutogenStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
-
- bool fromMap(const QVariantMap &map) override;
-
private:
- void ctor();
+ bool fromMap(const QVariantMap &map) override;
QString m_additionalArguments;
bool m_runAutogen = false;
diff --git a/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp b/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
index 0277ca91c9..473e587d78 100644
--- a/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
+++ b/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
@@ -49,55 +49,21 @@ using namespace ProjectExplorer;
const char AUTORECONF_STEP_ID[] = "AutotoolsProjectManager.AutoreconfStep";
const char AUTORECONF_ADDITIONAL_ARGUMENTS_KEY[] = "AutotoolsProjectManager.AutoreconfStep.AdditionalArguments";
-////////////////////////////////
-// AutoreconfStepFactory class
-////////////////////////////////
-AutoreconfStepFactory::AutoreconfStepFactory(QObject *parent) : IBuildStepFactory(parent)
-{ }
-
-QList<BuildStepInfo> AutoreconfStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->target()->project()->id() != Constants::AUTOTOOLS_PROJECT_ID
- || parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
- return {};
- QString display = tr("Autoreconf", "Display name for AutotoolsProjectManager::AutoreconfStep id.");
- return {{AUTORECONF_STEP_ID, display}};
-}
+// AutoreconfStepFactory class
-BuildStep *AutoreconfStepFactory::create(BuildStepList *parent, Core::Id id)
+AutoreconfStepFactory::AutoreconfStepFactory()
{
- Q_UNUSED(id);
- return new AutoreconfStep(parent);
+ registerStep<AutoreconfStep>(AUTORECONF_STEP_ID);
+ setDisplayName(tr("Autoreconf", "Display name for AutotoolsProjectManager::AutoreconfStep id."));
+ setSupportedProjectType(Constants::AUTOTOOLS_PROJECT_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
}
-BuildStep *AutoreconfStepFactory::clone(BuildStepList *parent, BuildStep *source)
-{
- return new AutoreconfStep(parent, static_cast<AutoreconfStep *>(source));
-}
-/////////////////////////
// AutoreconfStep class
-/////////////////////////
-AutoreconfStep::AutoreconfStep(BuildStepList *bsl) :
- AbstractProcessStep(bsl, Core::Id(AUTORECONF_STEP_ID))
-{
- ctor();
-}
-
-AutoreconfStep::AutoreconfStep(BuildStepList *bsl, Core::Id id) : AbstractProcessStep(bsl, id)
-{
- ctor();
-}
-
-AutoreconfStep::AutoreconfStep(BuildStepList *bsl, AutoreconfStep *bs) :
- AbstractProcessStep(bsl, bs),
- m_additionalArguments(bs->additionalArguments())
-{
- ctor();
-}
-void AutoreconfStep::ctor()
+AutoreconfStep::AutoreconfStep(BuildStepList *bsl) : AbstractProcessStep(bsl, AUTORECONF_STEP_ID)
{
setDefaultDisplayName(tr("Autoreconf"));
}
diff --git a/src/plugins/autotoolsprojectmanager/autoreconfstep.h b/src/plugins/autotoolsprojectmanager/autoreconfstep.h
index ab6fb705ed..160f6fc5c1 100644
--- a/src/plugins/autotoolsprojectmanager/autoreconfstep.h
+++ b/src/plugins/autotoolsprojectmanager/autoreconfstep.h
@@ -47,18 +47,12 @@ class AutoreconfStep;
*
* The factory is used to create instances of AutoreconfStep.
*/
-class AutoreconfStepFactory : public ProjectExplorer::IBuildStepFactory
+class AutoreconfStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- AutoreconfStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override;
+ AutoreconfStepFactory();
};
/////////////////////////
@@ -96,14 +90,8 @@ public:
signals:
void additionalArgumentsChanged(const QString &);
-protected:
- AutoreconfStep(ProjectExplorer::BuildStepList *bsl, AutoreconfStep *bs);
- AutoreconfStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
-
- bool fromMap(const QVariantMap &map) override;
-
private:
- void ctor();
+ bool fromMap(const QVariantMap &map) override;
QString m_additionalArguments;
bool m_runAutoreconf = false;
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
index 82db5188d1..02d9b483dc 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
@@ -53,11 +53,11 @@ using namespace Internal;
using namespace ProjectExplorer;
using namespace ProjectExplorer::Constants;
-//////////////////////////////////////
-// AutotoolsBuildConfiguration class
-//////////////////////////////////////
-AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent) :
- BuildConfiguration(parent, Core::Id(AUTOTOOLS_BC_ID))
+
+// AutotoolsBuildConfiguration
+
+AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent)
+ : BuildConfiguration(parent, Constants::AUTOTOOLS_BC_ID)
{
// /<foobar> is used so the un-changed check in setBuildDirectory() works correctly.
// The leading / is to avoid the relative the path expansion in BuildConfiguration::buildDirectory.
@@ -69,82 +69,21 @@ AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent) :
});
}
-NamedWidget *AutotoolsBuildConfiguration::createConfigWidget()
-{
- return new AutotoolsBuildSettingsWidget(this);
-}
-
-AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent, Core::Id id) :
- BuildConfiguration(parent, id)
-{ }
-
-AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent,
- AutotoolsBuildConfiguration *source) :
- BuildConfiguration(parent, source)
-{
- cloneSteps(source);
-}
-
-//////////////////////////////////////
-// AutotoolsBuildConfiguration class
-//////////////////////////////////////
-AutotoolsBuildConfigurationFactory::AutotoolsBuildConfigurationFactory(QObject *parent) :
- IBuildConfigurationFactory(parent)
-{ }
-
-int AutotoolsBuildConfigurationFactory::priority(const Target *parent) const
-{
- return canHandle(parent) ? 0 : -1;
-}
-
-QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableBuilds(const Target *parent) const
-{
- QList<BuildInfo *> result;
- result << createBuildInfo(parent->kit(), parent->project()->projectDirectory());
- return result;
-}
-
-int AutotoolsBuildConfigurationFactory::priority(const Kit *k, const QString &projectPath) const
-{
- if (k && Utils::mimeTypeForFile(projectPath).matchesName(QLatin1String(Constants::MAKEFILE_MIMETYPE)))
- return 0;
- return -1;
-}
-
-QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
-{
- QList<BuildInfo *> result;
- BuildInfo *info = createBuildInfo(k,
- Utils::FileName::fromString(AutotoolsProject::defaultBuildDirectory(projectPath)));
- //: The name of the build configuration created by default for a autotools project.
- info->displayName = tr("Default");
- result << info;
- return result;
-}
-
-BuildConfiguration *AutotoolsBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
+void AutotoolsBuildConfiguration::initialize(const BuildInfo *info)
{
- QTC_ASSERT(parent, return 0);
- QTC_ASSERT(info->factory() == this, return 0);
- QTC_ASSERT(info->kitId == parent->kit()->id(), return 0);
- QTC_ASSERT(!info->displayName.isEmpty(), return 0);
-
- AutotoolsBuildConfiguration *bc = new AutotoolsBuildConfiguration(parent);
- bc->setDisplayName(info->displayName);
- bc->setDefaultDisplayName(info->displayName);
- bc->setBuildDirectory(info->buildDirectory);
+ BuildConfiguration::initialize(info);
- BuildStepList *buildSteps = bc->stepList(Core::Id(BUILDSTEPS_BUILD));
+ BuildStepList *buildSteps = stepList(BUILDSTEPS_BUILD);
// ### Build Steps Build ###
// autogen.sh or autoreconf
- QFile autogenFile(parent->project()->projectDirectory().toString() + QLatin1String("/autogen.sh"));
+ QFile autogenFile(target()->project()->projectDirectory().toString() + "/autogen.sh");
if (autogenFile.exists()) {
AutogenStep *autogenStep = new AutogenStep(buildSteps);
buildSteps->insertStep(0, autogenStep);
} else {
AutoreconfStep *autoreconfStep = new AutoreconfStep(buildSteps);
- autoreconfStep->setAdditionalArguments(QLatin1String("--force --install"));
+ autoreconfStep->setAdditionalArguments("--force --install");
buildSteps->insertStep(0, autoreconfStep);
}
@@ -158,67 +97,53 @@ BuildConfiguration *AutotoolsBuildConfigurationFactory::create(Target *parent, c
makeStep->setBuildTarget(QLatin1String("all"), /*on =*/ true);
// ### Build Steps Clean ###
- BuildStepList *cleanSteps = bc->stepList(Core::Id(BUILDSTEPS_CLEAN));
+ BuildStepList *cleanSteps = stepList(BUILDSTEPS_CLEAN);
MakeStep *cleanMakeStep = new MakeStep(cleanSteps);
- cleanMakeStep->setAdditionalArguments(QLatin1String("clean"));
+ cleanMakeStep->setAdditionalArguments("clean");
cleanMakeStep->setClean(true);
cleanSteps->insertStep(0, cleanMakeStep);
-
- return bc;
}
-bool AutotoolsBuildConfigurationFactory::canHandle(const Target *t) const
+NamedWidget *AutotoolsBuildConfiguration::createConfigWidget()
{
- QTC_ASSERT(t, return false);
-
- if (!t->project()->supportsKit(t->kit()))
- return false;
- return t->project()->id() == Constants::AUTOTOOLS_PROJECT_ID;
+ return new AutotoolsBuildSettingsWidget(this);
}
-BuildInfo *AutotoolsBuildConfigurationFactory::createBuildInfo(const Kit *k,
- const Utils::FileName &buildDir) const
-{
- BuildInfo *info = new BuildInfo(this);
- info->typeName = tr("Build");
- info->buildDirectory = buildDir;
- info->kitId = k->id();
- return info;
-}
+// AutotoolsBuildConfiguration class
-bool AutotoolsBuildConfigurationFactory::canClone(const Target *parent, BuildConfiguration *source) const
+AutotoolsBuildConfigurationFactory::AutotoolsBuildConfigurationFactory()
{
- if (!canHandle(parent))
- return false;
- return source->id() == AUTOTOOLS_BC_ID;
+ registerBuildConfiguration<AutotoolsBuildConfiguration>(AUTOTOOLS_BC_ID);
+ setSupportedProjectType(Constants::AUTOTOOLS_PROJECT_ID);
+ setSupportedProjectMimeTypeName(Constants::MAKEFILE_MIMETYPE);
}
-AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *source)
+QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
- if (!canClone(parent, source))
- return 0;
-
- AutotoolsBuildConfiguration *origin = static_cast<AutotoolsBuildConfiguration *>(source);
- return new AutotoolsBuildConfiguration(parent, origin);
+ return {createBuildInfo(parent->kit(), parent->project()->projectDirectory())};
}
-bool AutotoolsBuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const
+QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
{
- if (!canHandle(parent))
- return false;
- return idFromMap(map) == AUTOTOOLS_BC_ID;
+ QList<BuildInfo *> result;
+ BuildInfo *info = createBuildInfo(k,
+ Utils::FileName::fromString(AutotoolsProject::defaultBuildDirectory(projectPath)));
+ //: The name of the build configuration created by default for a autotools project.
+ info->displayName = tr("Default");
+ result << info;
+ return result;
}
-AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
+BuildInfo *AutotoolsBuildConfigurationFactory::createBuildInfo(const Kit *k,
+ const Utils::FileName &buildDir) const
{
- if (!canRestore(parent, map))
- return 0;
- AutotoolsBuildConfiguration *bc = new AutotoolsBuildConfiguration(parent);
- if (bc->fromMap(map))
- return bc;
- delete bc;
- return 0;
+ BuildInfo *info = new BuildInfo(this);
+ info->typeName = tr("Build");
+ info->buildDirectory = buildDir;
+ info->kitId = k->id();
+
+ return info;
}
BuildConfiguration::BuildType AutotoolsBuildConfiguration::buildType() const
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
index 3d7f170f5b..f2bafd3624 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
@@ -34,24 +34,16 @@ namespace Utils { class FileName; }
namespace AutotoolsProjectManager {
namespace Internal {
-class AutotoolsTarget;
-class AutotoolsBuildConfigurationFactory;
-
class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
Q_OBJECT
- friend class AutotoolsBuildConfigurationFactory;
-public:
+ friend class ProjectExplorer::IBuildConfigurationFactory;
explicit AutotoolsBuildConfiguration(ProjectExplorer::Target *parent);
+ void initialize(const ProjectExplorer::BuildInfo *info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
-
BuildType buildType() const override;
-
-protected:
- AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
- AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, AutotoolsBuildConfiguration *source);
};
class AutotoolsBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
@@ -59,23 +51,13 @@ class AutotoolsBuildConfigurationFactory : public ProjectExplorer::IBuildConfigu
Q_OBJECT
public:
- explicit AutotoolsBuildConfigurationFactory(QObject *parent = 0);
+ AutotoolsBuildConfigurationFactory();
- int priority(const ProjectExplorer::Target *parent) const override;
+private:
QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override;
- int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override;
QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k,
const QString &projectPath) const override;
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const override;
-
- bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const override;
- AutotoolsBuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) override;
- bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- AutotoolsBuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
-private:
- bool canHandle(const ProjectExplorer::Target *t) const;
ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const;
};
diff --git a/src/plugins/autotoolsprojectmanager/configurestep.cpp b/src/plugins/autotoolsprojectmanager/configurestep.cpp
index 8fdb2c6728..7d370e2ded 100644
--- a/src/plugins/autotoolsprojectmanager/configurestep.cpp
+++ b/src/plugins/autotoolsprojectmanager/configurestep.cpp
@@ -64,55 +64,21 @@ static QString projectDirRelativeToBuildDir(BuildConfiguration *bc) {
return projDirToBuildDir;
}
-////////////////////////////////
-// ConfigureStepFactory Class
-////////////////////////////////
-ConfigureStepFactory::ConfigureStepFactory(QObject *parent) : IBuildStepFactory(parent)
-{ }
-QList<BuildStepInfo> ConfigureStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->target()->project()->id() != Constants::AUTOTOOLS_PROJECT_ID
- || parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
- return {};
-
- QString display = tr("Configure", "Display name for AutotoolsProjectManager::ConfigureStep id.");
- return {{CONFIGURE_STEP_ID, display}};
-}
-
-BuildStep *ConfigureStepFactory::create(BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id)
- return new ConfigureStep(parent);
-}
-
-BuildStep *ConfigureStepFactory::clone(BuildStepList *parent, BuildStep *source)
-{
- return new ConfigureStep(parent, static_cast<ConfigureStep *>(source));
-}
+// ConfigureStepFactory
-
-////////////////////////
-// ConfigureStep class
-////////////////////////
-ConfigureStep::ConfigureStep(BuildStepList* bsl) :
- AbstractProcessStep(bsl, Core::Id(CONFIGURE_STEP_ID))
+ConfigureStepFactory::ConfigureStepFactory()
{
- ctor();
+ registerStep<ConfigureStep>(CONFIGURE_STEP_ID);
+ setDisplayName(tr("Configure", "Display name for AutotoolsProjectManager::ConfigureStep id."));
+ setSupportedProjectType(Constants::AUTOTOOLS_PROJECT_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
}
-ConfigureStep::ConfigureStep(BuildStepList *bsl, Core::Id id) : AbstractProcessStep(bsl, id)
-{
- ctor();
-}
-ConfigureStep::ConfigureStep(BuildStepList *bsl, ConfigureStep *bs) : AbstractProcessStep(bsl, bs),
- m_additionalArguments(bs->additionalArguments())
-{
- ctor();
-}
+// ConfigureStep
-void ConfigureStep::ctor()
+ConfigureStep::ConfigureStep(BuildStepList *bsl) : AbstractProcessStep(bsl, CONFIGURE_STEP_ID)
{
setDefaultDisplayName(tr("Configure"));
}
diff --git a/src/plugins/autotoolsprojectmanager/configurestep.h b/src/plugins/autotoolsprojectmanager/configurestep.h
index a809e0a63e..2f5ce3e65e 100644
--- a/src/plugins/autotoolsprojectmanager/configurestep.h
+++ b/src/plugins/autotoolsprojectmanager/configurestep.h
@@ -47,18 +47,12 @@ class ConfigureStepConfigWidget;
*
* The factory is used to create instances of ConfigureStep.
*/
-class ConfigureStepFactory : public ProjectExplorer::IBuildStepFactory
+class ConfigureStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- ConfigureStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override;
+ ConfigureStepFactory();
};
//////////////////////////
@@ -97,14 +91,8 @@ signals:
void additionalArgumentsChanged(const QString &);
void buildDirectoryChanged();
-protected:
- ConfigureStep(ProjectExplorer::BuildStepList *bsl, ConfigureStep *bs);
- ConfigureStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
-
- bool fromMap(const QVariantMap &map) override;
-
private:
- void ctor();
+ bool fromMap(const QVariantMap &map) override;
QString m_additionalArguments;
bool m_runConfigure = false;
diff --git a/src/plugins/autotoolsprojectmanager/makestep.cpp b/src/plugins/autotoolsprojectmanager/makestep.cpp
index 3fb0ec4105..596c2a025b 100644
--- a/src/plugins/autotoolsprojectmanager/makestep.cpp
+++ b/src/plugins/autotoolsprojectmanager/makestep.cpp
@@ -56,53 +56,23 @@ const char CLEAN_KEY[] = "AutotoolsProjectManager.MakeStep.Clean";
const char BUILD_TARGETS_KEY[] = "AutotoolsProjectManager.MakeStep.BuildTargets";
const char MAKE_STEP_ADDITIONAL_ARGUMENTS_KEY[] = "AutotoolsProjectManager.MakeStep.AdditionalArguments";
-//////////////////////////
-// MakeStepFactory class
-//////////////////////////
-MakeStepFactory::MakeStepFactory(QObject *parent) : IBuildStepFactory(parent)
-{ setObjectName("Autotools::MakeStepFactory"); }
-QList<BuildStepInfo> MakeStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->target()->project()->id() != AUTOTOOLS_PROJECT_ID)
- return {};
-
- return {{MAKE_STEP_ID, tr("Make", "Display name for AutotoolsProjectManager::MakeStep id.")}};
-}
-
-BuildStep *MakeStepFactory::create(BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id)
- return new MakeStep(parent);
-}
-
-BuildStep *MakeStepFactory::clone(BuildStepList *parent, BuildStep *source)
-{
- return new MakeStep(parent, static_cast<MakeStep *>(source));
-}
+// MakeStepFactory
-/////////////////////
-// MakeStep class
-/////////////////////
-MakeStep::MakeStep(BuildStepList* bsl) : AbstractProcessStep(bsl, Core::Id(MAKE_STEP_ID))
+MakeStepFactory::MakeStepFactory()
{
- ctor();
+ setObjectName("Autotools::MakeStepFactory");
+ registerStep<MakeStep>(MAKE_STEP_ID);
+ setDisplayName(tr("Make", "Display name for AutotoolsProjectManager::MakeStep id."));
+ setSupportedProjectType(AUTOTOOLS_PROJECT_ID);
+ setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_BUILD,
+ ProjectExplorer::Constants::BUILDSTEPS_CLEAN,
+ ProjectExplorer::Constants::BUILDSTEPS_DEPLOY});
}
-MakeStep::MakeStep(BuildStepList *bsl, Core::Id id) : AbstractProcessStep(bsl, id)
-{
- ctor();
-}
-
-MakeStep::MakeStep(BuildStepList *bsl, MakeStep *bs) : AbstractProcessStep(bsl, bs),
- m_buildTargets(bs->m_buildTargets),
- m_additionalArguments(bs->additionalArguments()),
- m_clean(bs->m_clean)
-{
- ctor();
-}
+// MakeStep
-void MakeStep::ctor()
+MakeStep::MakeStep(BuildStepList *bsl) : AbstractProcessStep(bsl, MAKE_STEP_ID)
{
setDefaultDisplayName(tr("Make"));
}
diff --git a/src/plugins/autotoolsprojectmanager/makestep.h b/src/plugins/autotoolsprojectmanager/makestep.h
index fdbbdfd4ce..1ded149366 100644
--- a/src/plugins/autotoolsprojectmanager/makestep.h
+++ b/src/plugins/autotoolsprojectmanager/makestep.h
@@ -48,18 +48,12 @@ class MakeStep;
*
* The factory is used to create instances of MakeStep.
*/
-class MakeStepFactory : public ProjectExplorer::IBuildStepFactory
+class MakeStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- MakeStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override;
+ MakeStepFactory();
};
/////////////////////
@@ -98,14 +92,8 @@ public:
signals:
void additionalArgumentsChanged(const QString &);
-protected:
- MakeStep(ProjectExplorer::BuildStepList *bsl, MakeStep *bs);
- MakeStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
-
- bool fromMap(const QVariantMap &map) override;
-
private:
- void ctor();
+ bool fromMap(const QVariantMap &map) override;
QStringList m_buildTargets;
QString m_additionalArguments;
diff --git a/src/plugins/baremetal/baremetalcustomrunconfiguration.cpp b/src/plugins/baremetal/baremetalcustomrunconfiguration.cpp
index 1121b52f04..f61e3d0df4 100644
--- a/src/plugins/baremetal/baremetalcustomrunconfiguration.cpp
+++ b/src/plugins/baremetal/baremetalcustomrunconfiguration.cpp
@@ -117,11 +117,6 @@ BareMetalCustomRunConfiguration::BareMetalCustomRunConfiguration(ProjectExplorer
{
}
-void BareMetalCustomRunConfiguration::initialize(Core::Id)
-{
- BareMetalRunConfiguration::initialize(runConfigId());
-}
-
bool BareMetalCustomRunConfiguration::isConfigured() const
{
return !m_localExecutable.isEmpty();
diff --git a/src/plugins/baremetal/baremetalcustomrunconfiguration.h b/src/plugins/baremetal/baremetalcustomrunconfiguration.h
index ea2d3b337f..94687ba876 100644
--- a/src/plugins/baremetal/baremetalcustomrunconfiguration.h
+++ b/src/plugins/baremetal/baremetalcustomrunconfiguration.h
@@ -38,8 +38,6 @@ class BareMetalCustomRunConfiguration : public BareMetalRunConfiguration
public:
explicit BareMetalCustomRunConfiguration(ProjectExplorer::Target *parent);
- void initialize(Core::Id) override;
-
bool isConfigured() const override;
ConfigurationState ensureConfigured(QString *errorMessage) override;
QWidget *createConfigurationWidget() override;
diff --git a/src/plugins/baremetal/baremetalgdbcommandsdeploystep.cpp b/src/plugins/baremetal/baremetalgdbcommandsdeploystep.cpp
index d02ed5a212..8affd8d659 100644
--- a/src/plugins/baremetal/baremetalgdbcommandsdeploystep.cpp
+++ b/src/plugins/baremetal/baremetalgdbcommandsdeploystep.cpp
@@ -62,21 +62,8 @@ QString BareMetalGdbCommandsDeployStepWidget::summaryText() const
return displayName();
}
-BareMetalGdbCommandsDeployStep::BareMetalGdbCommandsDeployStep(BuildStepList *bsl,
- const Core::Id id)
- : BuildStep(bsl, id)
-{
- ctor();
-}
-
-BareMetalGdbCommandsDeployStep::BareMetalGdbCommandsDeployStep(BuildStepList *bsl,
- BareMetalGdbCommandsDeployStep *other)
- : BuildStep(bsl, other)
-{
- ctor();
-}
-
-void BareMetalGdbCommandsDeployStep::ctor()
+BareMetalGdbCommandsDeployStep::BareMetalGdbCommandsDeployStep(BuildStepList *bsl)
+ : BuildStep(bsl, stepId())
{
setDefaultDisplayName(displayName());
}
diff --git a/src/plugins/baremetal/baremetalgdbcommandsdeploystep.h b/src/plugins/baremetal/baremetalgdbcommandsdeploystep.h
index 0278dbc0ac..83a2191369 100644
--- a/src/plugins/baremetal/baremetalgdbcommandsdeploystep.h
+++ b/src/plugins/baremetal/baremetalgdbcommandsdeploystep.h
@@ -38,9 +38,7 @@ class BareMetalGdbCommandsDeployStep : public ProjectExplorer::BuildStep
Q_OBJECT
public:
- BareMetalGdbCommandsDeployStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
- BareMetalGdbCommandsDeployStep(ProjectExplorer::BuildStepList *bsl,
- BareMetalGdbCommandsDeployStep *other);
+ explicit BareMetalGdbCommandsDeployStep(ProjectExplorer::BuildStepList *bsl);
bool init(QList<const BuildStep *> &earlierSteps) override;
void run(QFutureInterface<bool> &fi) override;
@@ -58,7 +56,6 @@ public:
QString gdbCommands() const;
private:
- void ctor();
QString m_gdbCommands;
};
diff --git a/src/plugins/baremetal/baremetalrunconfiguration.cpp b/src/plugins/baremetal/baremetalrunconfiguration.cpp
index b18f1528d7..bbdbe4e680 100644
--- a/src/plugins/baremetal/baremetalrunconfiguration.cpp
+++ b/src/plugins/baremetal/baremetalrunconfiguration.cpp
@@ -45,19 +45,8 @@ namespace Internal {
const char ProFileKey[] = "Qt4ProjectManager.MaemoRunConfiguration.ProFile";
const char WorkingDirectoryKey[] = "BareMetal.RunConfig.WorkingDirectory";
-static QString pathFromId(Core::Id id)
-{
- if (id == BareMetalCustomRunConfiguration::runConfigId())
- return QString();
-
- QByteArray idStr = id.name();
- if (!idStr.startsWith(BareMetalRunConfiguration::IdPrefix))
- return QString();
- return QString::fromUtf8(idStr.mid(int(strlen(BareMetalRunConfiguration::IdPrefix))));
-}
-
BareMetalRunConfiguration::BareMetalRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, IdPrefix)
{
addExtraAspect(new ArgumentsAspect(this, "Qt4ProjectManager.MaemoRunConfiguration.Arguments"));
connect(target, &Target::deploymentDataChanged,
@@ -68,17 +57,9 @@ BareMetalRunConfiguration::BareMetalRunConfiguration(Target *target)
this, &BareMetalRunConfiguration::handleBuildSystemDataUpdated); // Handles device changes, etc.
}
-void BareMetalRunConfiguration::initialize(const Core::Id id)
-{
- RunConfiguration::initialize(id);
- m_projectFilePath = pathFromId(id);
-
- setDefaultDisplayName(defaultDisplayName());
-}
-
-QString BareMetalRunConfiguration::targetNameFromId(Core::Id id)
+QString BareMetalRunConfiguration::extraId() const
{
- return QFileInfo(pathFromId(id)).fileName();
+ return m_projectFilePath;
}
QWidget *BareMetalRunConfiguration::createConfigurationWidget()
@@ -110,8 +91,11 @@ bool BareMetalRunConfiguration::fromMap(const QVariantMap &map)
= QDir::cleanPath(dir.filePath(map.value(QLatin1String(ProFileKey)).toString()));
m_workingDirectory = map.value(QLatin1String(WorkingDirectoryKey)).toString();
- setDefaultDisplayName(defaultDisplayName());
+ // Hack for old-style mangled ids. FIXME: Remove.
+ if (m_projectFilePath.isEmpty())
+ m_projectFilePath = ProjectExplorer::idFromMap(map).suffixAfter(id());
+ setDefaultDisplayName(defaultDisplayName());
return true;
}
diff --git a/src/plugins/baremetal/baremetalrunconfiguration.h b/src/plugins/baremetal/baremetalrunconfiguration.h
index 647fa40c3e..62ffaf5d34 100644
--- a/src/plugins/baremetal/baremetalrunconfiguration.h
+++ b/src/plugins/baremetal/baremetalrunconfiguration.h
@@ -57,7 +57,6 @@ public:
QString buildSystemTarget() const final;
- static QString targetNameFromId(Core::Id id);
static const char *IdPrefix;
signals:
@@ -66,8 +65,9 @@ signals:
protected:
bool fromMap(const QVariantMap &map) override;
+ QString extraId() const final;
+
QString defaultDisplayName();
- void initialize(Core::Id id) override;
private:
void handleBuildSystemDataUpdated();
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index fb7f0d658f..b239171fb5 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -51,9 +51,6 @@
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
-#include <QHash>
-#include <QInputDialog>
-
using namespace ProjectExplorer;
using namespace Utils;
@@ -63,10 +60,33 @@ namespace Internal {
const char INITIAL_ARGUMENTS[] = "CMakeProjectManager.CMakeBuildConfiguration.InitialArgument"; // Obsolete since QtC 3.7
const char CONFIGURATION_KEY[] = "CMake.Configuration";
-CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent) :
- BuildConfiguration(parent, Core::Id(Constants::CMAKE_BC_ID))
+CMakeBuildConfiguration::CMakeBuildConfiguration(Target *parent)
+ : BuildConfiguration(parent, Constants::CMAKE_BC_ID)
{
- ctor();
+ CMakeProject *project = static_cast<CMakeProject *>(target()->project());
+ setBuildDirectory(shadowBuildDirectory(project->projectFilePath(),
+ target()->kit(),
+ displayName(), BuildConfiguration::Unknown));
+ connect(project, &Project::parsingFinished, this, &BuildConfiguration::enabledChanged);
+}
+
+void CMakeBuildConfiguration::initialize(const BuildInfo *info)
+{
+ BuildConfiguration::initialize(info);
+
+ BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ buildSteps->appendStep(new CMakeBuildStep(buildSteps));
+
+ BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
+ cleanSteps->appendStep(new CMakeBuildStep(cleanSteps));
+
+ if (info->buildDirectory.isEmpty()) {
+ CMakeProject *project = static_cast<CMakeProject *>(target()->project());
+ setBuildDirectory(CMakeBuildConfiguration::shadowBuildDirectory(project->projectFilePath(),
+ target()->kit(),
+ info->displayName, info->buildType));
+ }
+ setConfigurationForCMake(static_cast<const CMakeBuildInfo *>(info)->configuration);
}
bool CMakeBuildConfiguration::isEnabled() const
@@ -79,15 +99,6 @@ QString CMakeBuildConfiguration::disabledReason() const
return error();
}
-CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent,
- CMakeBuildConfiguration *source) :
- BuildConfiguration(parent, source),
- m_configurationForCMake(source->m_configurationForCMake)
-{
- ctor();
- cloneSteps(source);
-}
-
QVariantMap CMakeBuildConfiguration::toMap() const
{
QVariantMap map(ProjectExplorer::BuildConfiguration::toMap());
@@ -128,15 +139,6 @@ bool CMakeBuildConfiguration::fromMap(const QVariantMap &map)
return true;
}
-void CMakeBuildConfiguration::ctor()
-{
- auto p = static_cast<CMakeProject *>(project());
- setBuildDirectory(shadowBuildDirectory(p->projectFilePath(),
- target()->kit(),
- displayName(), BuildConfiguration::Unknown));
- connect(p, &Project::parsingFinished, this, &BuildConfiguration::enabledChanged);
-}
-
bool CMakeBuildConfiguration::isParsing() const
{
return project()->isParsing() && isActive();
@@ -331,9 +333,12 @@ ProjectExplorer::NamedWidget *CMakeBuildConfiguration::createConfigWidget()
\class CMakeBuildConfigurationFactory
*/
-CMakeBuildConfigurationFactory::CMakeBuildConfigurationFactory(QObject *parent) :
- ProjectExplorer::IBuildConfigurationFactory(parent)
-{ }
+CMakeBuildConfigurationFactory::CMakeBuildConfigurationFactory()
+{
+ registerBuildConfiguration<CMakeBuildConfiguration>(Constants::CMAKE_BC_ID);
+ setSupportedProjectType(CMakeProjectManager::Constants::CMAKEPROJECT_ID);
+ setSupportedProjectMimeTypeName(Constants::CMAKEPROJECTMIMETYPE);
+}
CMakeBuildConfigurationFactory::BuildType CMakeBuildConfigurationFactory::buildTypeFromByteArray(const QByteArray &in)
{
@@ -362,11 +367,6 @@ BuildConfiguration::BuildType CMakeBuildConfigurationFactory::cmakeBuildTypeToBu
return BuildConfiguration::Unknown;
}
-int CMakeBuildConfigurationFactory::priority(const ProjectExplorer::Target *parent) const
-{
- return canHandle(parent) ? 0 : -1;
-}
-
QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableBuilds(const ProjectExplorer::Target *parent) const
{
QList<ProjectExplorer::BuildInfo *> result;
@@ -380,13 +380,6 @@ QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableBui
return result;
}
-int CMakeBuildConfigurationFactory::priority(const ProjectExplorer::Kit *k, const QString &projectPath) const
-{
- if (k && Utils::mimeTypeForFile(projectPath).matchesName(Constants::CMAKEPROJECTMIMETYPE))
- return 0;
- return -1;
-}
-
QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableSetups(const ProjectExplorer::Kit *k,
const QString &projectPath) const
{
@@ -410,82 +403,6 @@ QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableSet
return result;
}
-ProjectExplorer::BuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const
-{
- QTC_ASSERT(info->factory() == this, return nullptr);
- QTC_ASSERT(info->kitId == parent->kit()->id(), return nullptr);
- QTC_ASSERT(!info->displayName.isEmpty(), return nullptr);
-
- CMakeBuildInfo copy(*static_cast<const CMakeBuildInfo *>(info));
- CMakeProject *project = static_cast<CMakeProject *>(parent->project());
-
- if (copy.buildDirectory.isEmpty()) {
- copy.buildDirectory
- = CMakeBuildConfiguration::shadowBuildDirectory(project->projectFilePath(),
- parent->kit(),
- copy.displayName, info->buildType);
- }
-
- auto bc = new CMakeBuildConfiguration(parent);
- bc->setDisplayName(copy.displayName);
- bc->setDefaultDisplayName(copy.displayName);
-
- ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- ProjectExplorer::BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
-
- auto buildStep = new CMakeBuildStep(buildSteps);
- buildSteps->insertStep(0, buildStep);
-
- auto cleanStep = new CMakeBuildStep(cleanSteps);
- cleanSteps->insertStep(0, cleanStep);
-
- bc->setBuildDirectory(copy.buildDirectory);
- bc->setConfigurationForCMake(copy.configuration);
-
- return bc;
-}
-
-bool CMakeBuildConfigurationFactory::canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const
-{
- if (!canHandle(parent))
- return false;
- return source->id() == Constants::CMAKE_BC_ID;
-}
-
-CMakeBuildConfiguration *CMakeBuildConfigurationFactory::clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source)
-{
- if (!canClone(parent, source))
- return nullptr;
- auto old = static_cast<CMakeBuildConfiguration *>(source);
- return new CMakeBuildConfiguration(parent, old);
-}
-
-bool CMakeBuildConfigurationFactory::canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const
-{
- if (!canHandle(parent))
- return false;
- return ProjectExplorer::idFromMap(map) == Constants::CMAKE_BC_ID;
-}
-
-CMakeBuildConfiguration *CMakeBuildConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return nullptr;
- auto bc = std::make_unique<CMakeBuildConfiguration>(parent);
- if (bc->fromMap(map))
- return bc.release();
- return nullptr;
-}
-
-bool CMakeBuildConfigurationFactory::canHandle(const ProjectExplorer::Target *t) const
-{
- QTC_ASSERT(t, return false);
- if (!t->project()->supportsKit(t->kit()))
- return false;
- return qobject_cast<CMakeProject *>(t->project());
-}
-
CMakeBuildInfo *CMakeBuildConfigurationFactory::createBuildInfo(const ProjectExplorer::Kit *k,
const QString &sourceDir,
BuildType buildType) const
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
index be257a21fb..5a381d0f47 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
@@ -32,11 +32,6 @@
#include <cpptools/cpprawprojectpart.h>
#include <projectexplorer/buildconfiguration.h>
-#include <projectexplorer/abi.h>
-
-#include <memory>
-
-namespace ProjectExplorer { class ToolChain; }
namespace CMakeProjectManager {
class CMakeBuildInfo;
@@ -45,27 +40,19 @@ class CMakeProject;
namespace Internal {
class BuildDirManager;
-class CMakeBuildConfigurationFactory;
class CMakeBuildSettingsWidget;
-class CMakeProjectNode;
class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
Q_OBJECT
+ friend class ProjectExplorer::IBuildConfigurationFactory;
+ explicit CMakeBuildConfiguration(ProjectExplorer::Target *parent);
+
public:
- CMakeBuildConfiguration(ProjectExplorer::Target *parent);
+ void emitBuildTypeChanged();
bool isEnabled() const override;
- QString disabledReason() const override;
-
- ProjectExplorer::NamedWidget *createConfigWidget() override;
-
- QVariantMap toMap() const override;
-
- BuildType buildType() const override;
-
- void emitBuildTypeChanged();
CMakeConfig configurationForCMake() const;
CMakeConfig configurationFromCMake() const;
@@ -88,12 +75,16 @@ signals:
void configurationForCMakeChanged();
-protected:
- CMakeBuildConfiguration(ProjectExplorer::Target *parent, CMakeBuildConfiguration *source);
- bool fromMap(const QVariantMap &map) override;
-
private:
- void ctor();
+ QVariantMap toMap() const override;
+ BuildType buildType() const override;
+
+ void initialize(const ProjectExplorer::BuildInfo *info) override;
+ QString disabledReason() const override;
+
+ ProjectExplorer::NamedWidget *createConfigWidget() override;
+
+ bool fromMap(const QVariantMap &map) override;
bool isParsing() const;
@@ -115,7 +106,6 @@ private:
CMakeConfig m_configurationFromCMake;
QList<CMakeBuildTarget> m_buildTargets;
- friend class CMakeBuildConfigurationFactory;
friend class CMakeBuildSettingsWidget;
friend class CMakeProjectManager::CMakeProject;
friend class BuildDirManager;
@@ -128,7 +118,7 @@ class CMakeBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurati
Q_OBJECT
public:
- CMakeBuildConfigurationFactory(QObject *parent = 0);
+ CMakeBuildConfigurationFactory();
enum BuildType { BuildTypeNone = 0,
BuildTypeDebug = 1,
@@ -139,22 +129,11 @@ public:
static BuildType buildTypeFromByteArray(const QByteArray &in);
static ProjectExplorer::BuildConfiguration::BuildType cmakeBuildTypeToBuildType(const BuildType &in);
- int priority(const ProjectExplorer::Target *parent) const override;
QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override;
- int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override;
QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k,
const QString &projectPath) const override;
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const override;
-
- bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const override;
- CMakeBuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) override;
- bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- CMakeBuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
private:
- bool canHandle(const ProjectExplorer::Target *t) const;
-
CMakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k,
const QString &sourceDir,
BuildType buildType) const;
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
index 7b3ff357b5..04cda44655 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
@@ -75,25 +75,7 @@ static bool isCurrentExecutableTarget(const QString &target)
}
CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl) :
- AbstractProcessStep(bsl, Core::Id(Constants::CMAKE_BUILD_STEP_ID))
-{
- ctor(bsl);
-}
-
-CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Core::Id id) : AbstractProcessStep(bsl, id)
-{
- ctor(bsl);
-}
-
-CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, CMakeBuildStep *bs) :
- AbstractProcessStep(bsl, bs),
- m_buildTarget(bs->m_buildTarget),
- m_toolArguments(bs->m_toolArguments)
-{
- ctor(bsl);
-}
-
-void CMakeBuildStep::ctor(BuildStepList *bsl)
+ AbstractProcessStep(bsl, Constants::CMAKE_BUILD_STEP_ID)
{
m_percentProgress = QRegExp("^\\[\\s*(\\d*)%\\]");
m_ninjaProgress = QRegExp("^\\[\\s*(\\d*)/\\s*(\\d*)");
@@ -586,27 +568,12 @@ QString CMakeBuildStepConfigWidget::summaryText() const
// CMakeBuildStepFactory
//
-CMakeBuildStepFactory::CMakeBuildStepFactory(QObject *parent) : IBuildStepFactory(parent)
-{ }
-
-QList<BuildStepInfo> CMakeBuildStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->target()->project()->id() != Constants::CMAKEPROJECT_ID)
- return {};
-
- return {{Constants::CMAKE_BUILD_STEP_ID,
- tr("Build", "Display name for CMakeProjectManager::CMakeBuildStep id.")}};
-}
-
-BuildStep *CMakeBuildStepFactory::create(BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id);
- return new CMakeBuildStep(parent);
-}
-
-BuildStep *CMakeBuildStepFactory::clone(BuildStepList *parent, BuildStep *source)
+CMakeBuildStepFactory::CMakeBuildStepFactory()
{
- return new CMakeBuildStep(parent, static_cast<CMakeBuildStep *>(source));
+ registerStep<CMakeBuildStep>(Constants::CMAKE_BUILD_STEP_ID);
+ setDisplayName(tr("Build", "Display name for CMakeProjectManager::CMakeBuildStep id."));
+ setSupportedProjectType(Constants::CMAKEPROJECT_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
}
void CMakeBuildStep::processStarted()
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h
index 754aae52cb..68c40d5752 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h
@@ -92,9 +92,6 @@ protected:
void processStarted() override;
void processFinished(int exitCode, QProcess::ExitStatus status) override;
- CMakeBuildStep(ProjectExplorer::BuildStepList *bsl, CMakeBuildStep *bs);
- CMakeBuildStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
-
bool fromMap(const QVariantMap &map) override;
// For parsing [ 76%]
@@ -140,18 +137,12 @@ private:
QString m_summaryText;
};
-class CMakeBuildStepFactory : public ProjectExplorer::IBuildStepFactory
+class CMakeBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit CMakeBuildStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *source) override;
+ CMakeBuildStepFactory();
};
} // namespace Internal
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
index 5272547da6..8da4ccf5e6 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
@@ -63,7 +63,7 @@ const char TITLE_KEY[] = "CMakeProjectManager.CMakeRunConfiguation.Title";
} // namespace
CMakeRunConfiguration::CMakeRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, CMAKE_RC_PREFIX)
{
// Workaround for QTCREATORBUG-19354:
auto cmakeRunEnvironmentModifier = [](RunConfiguration *rc, Utils::Environment &env) {
@@ -81,23 +81,9 @@ CMakeRunConfiguration::CMakeRunConfiguration(Target *target)
addExtraAspect(new WorkingDirectoryAspect(this, "CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"));
}
-void CMakeRunConfiguration::initialize(Core::Id id)
+QString CMakeRunConfiguration::extraId() const
{
- RunConfiguration::initialize(id);
- QString executable = id.suffixAfter(CMAKE_RC_PREFIX);
-
- CMakeProject *project = static_cast<CMakeProject *>(target()->project());
-
- m_buildSystemTarget = executable;
- m_executable = executable;
-
- if (!executable.isEmpty()) {
- const CMakeBuildTarget ct = project->buildTargetForTitle(executable);
- m_title = ct.title;
- extraAspect<WorkingDirectoryAspect>()->setDefaultWorkingDirectory(ct.workingDirectory);
- }
-
- setDefaultDisplayName(defaultDisplayName());
+ return m_buildSystemTarget;
}
Runnable CMakeRunConfiguration::runnable() const
@@ -143,8 +129,26 @@ QVariantMap CMakeRunConfiguration::toMap() const
bool CMakeRunConfiguration::fromMap(const QVariantMap &map)
{
+ RunConfiguration::fromMap(map);
+
m_title = map.value(QLatin1String(TITLE_KEY)).toString();
- return RunConfiguration::fromMap(map);
+
+ QString extraId = ProjectExplorer::idFromMap(map).suffixAfter(id());
+
+ if (!extraId.isEmpty()) {
+ m_buildSystemTarget = extraId;
+ m_executable = extraId;
+ if (m_title.isEmpty())
+ m_title = extraId;
+
+ CMakeProject *project = static_cast<CMakeProject *>(target()->project());
+ const CMakeBuildTarget ct = project->buildTargetForTitle(m_title);
+ extraAspect<WorkingDirectoryAspect>()->setDefaultWorkingDirectory(ct.workingDirectory);
+ }
+
+ setDefaultDisplayName(defaultDisplayName());
+
+ return true;
}
QString CMakeRunConfiguration::defaultDisplayName() const
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
index 7551f34f27..79bd94c78a 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
@@ -44,7 +44,6 @@ public:
void setExecutable(const QString &executable);
void setBaseWorkingDirectory(const Utils::FileName &workingDirectory);
-
QString title() const;
QVariantMap toMap() const override;
@@ -55,13 +54,12 @@ public:
Utils::OutputFormatter *createOutputFormatter() const final;
- void initialize(Core::Id id) override;
-
private:
bool fromMap(const QVariantMap &map) override;
QString defaultDisplayName() const;
void updateEnabledState() final;
+ QString extraId() const final;
QString baseWorkingDirectory() const;
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
index 236352c647..4080fcf7f2 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
@@ -55,21 +55,21 @@ namespace Internal {
const char GENERIC_BC_ID[] = "GenericProjectManager.GenericBuildConfiguration";
GenericBuildConfiguration::GenericBuildConfiguration(Target *parent)
- : BuildConfiguration(parent, Core::Id(GENERIC_BC_ID))
+ : BuildConfiguration(parent, GENERIC_BC_ID)
{
updateCacheAndEmitEnvironmentChanged();
}
-GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, Core::Id id)
- : BuildConfiguration(parent, id)
+void GenericBuildConfiguration::initialize(const BuildInfo *info)
{
- updateCacheAndEmitEnvironmentChanged();
-}
+ BuildConfiguration::initialize(info);
+
+ BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ buildSteps->appendStep(new GenericMakeStep(buildSteps, "all"));
+
+ BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
+ cleanSteps->appendStep(new GenericMakeStep(cleanSteps, "clean"));
-GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, GenericBuildConfiguration *source) :
- BuildConfiguration(parent, source)
-{
- cloneSteps(source);
updateCacheAndEmitEnvironmentChanged();
}
@@ -82,33 +82,20 @@ NamedWidget *GenericBuildConfiguration::createConfigWidget()
\class GenericBuildConfigurationFactory
*/
-GenericBuildConfigurationFactory::GenericBuildConfigurationFactory(QObject *parent) :
- IBuildConfigurationFactory(parent)
+GenericBuildConfigurationFactory::GenericBuildConfigurationFactory()
{
+ registerBuildConfiguration<GenericBuildConfiguration>(GENERIC_BC_ID);
+ setSupportedProjectType(Constants::GENERICPROJECT_ID);
+ setSupportedProjectMimeTypeName(Constants::GENERICMIMETYPE);
}
GenericBuildConfigurationFactory::~GenericBuildConfigurationFactory()
{
}
-int GenericBuildConfigurationFactory::priority(const Target *parent) const
-{
- return canHandle(parent) ? 0 : -1;
-}
-
QList<BuildInfo *> GenericBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
- QList<BuildInfo *> result;
- BuildInfo *info = createBuildInfo(parent->kit(), parent->project()->projectDirectory());
- result << info;
- return result;
-}
-
-int GenericBuildConfigurationFactory::priority(const Kit *k, const QString &projectPath) const
-{
- if (k && Utils::mimeTypeForFile(projectPath).matchesName(Constants::GENERICMIMETYPE))
- return 0;
- return -1;
+ return {createBuildInfo(parent->kit(), parent->project()->projectDirectory())};
}
QList<BuildInfo *> GenericBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
@@ -121,73 +108,6 @@ QList<BuildInfo *> GenericBuildConfigurationFactory::availableSetups(const Kit *
return result;
}
-BuildConfiguration *GenericBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
-{
- QTC_ASSERT(info->factory() == this, return 0);
- QTC_ASSERT(info->kitId == parent->kit()->id(), return 0);
- QTC_ASSERT(!info->displayName.isEmpty(), return 0);
-
- auto bc = new GenericBuildConfiguration(parent);
- bc->setDisplayName(info->displayName);
- bc->setDefaultDisplayName(info->displayName);
- bc->setBuildDirectory(info->buildDirectory);
-
- BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
-
- Q_ASSERT(buildSteps);
- auto makeStep = new GenericMakeStep(buildSteps);
- buildSteps->insertStep(0, makeStep);
- makeStep->setBuildTarget("all", /* on = */ true);
-
- Q_ASSERT(cleanSteps);
- auto cleanMakeStep = new GenericMakeStep(cleanSteps);
- cleanSteps->insertStep(0, cleanMakeStep);
- cleanMakeStep->setBuildTarget("clean", /* on = */ true);
- cleanMakeStep->setClean(true);
-
- return bc;
-}
-
-bool GenericBuildConfigurationFactory::canClone(const Target *parent, BuildConfiguration *source) const
-{
- if (!canHandle(parent))
- return false;
- return source->id() == GENERIC_BC_ID;
-}
-
-BuildConfiguration *GenericBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *source)
-{
- if (!canClone(parent, source))
- return 0;
- return new GenericBuildConfiguration(parent, qobject_cast<GenericBuildConfiguration *>(source));
-}
-
-bool GenericBuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const
-{
- if (!canHandle(parent))
- return false;
- return ProjectExplorer::idFromMap(map) == GENERIC_BC_ID;
-}
-
-BuildConfiguration *GenericBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
- auto bc = new GenericBuildConfiguration(parent);
- if (bc->fromMap(map))
- return bc;
- delete bc;
- return 0;
-}
-
-bool GenericBuildConfigurationFactory::canHandle(const Target *t) const
-{
- if (!t->project()->supportsKit(t->kit()))
- return false;
- return qobject_cast<GenericProject *>(t->project());
-}
-
BuildInfo *GenericBuildConfigurationFactory::createBuildInfo(const Kit *k,
const Utils::FileName &buildDir) const
{
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
index 54e375e88f..dc2121c16d 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
@@ -36,29 +36,17 @@ class PathChooser;
namespace GenericProjectManager {
namespace Internal {
-class GenericTarget;
-class GenericBuildConfigurationFactory;
-class GenericBuildSettingsWidget;
-
class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
Q_OBJECT
- friend class GenericBuildConfigurationFactory;
-public:
+ friend class ProjectExplorer::IBuildConfigurationFactory;
explicit GenericBuildConfiguration(ProjectExplorer::Target *parent);
+ void initialize(const ProjectExplorer::BuildInfo *info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
-
BuildType buildType() const override;
-
void addToEnvironment(Utils::Environment &env) const final;
-
-protected:
- GenericBuildConfiguration(ProjectExplorer::Target *parent, GenericBuildConfiguration *source);
- GenericBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
-
- friend class GenericBuildSettingsWidget;
};
class GenericBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
@@ -66,24 +54,14 @@ class GenericBuildConfigurationFactory : public ProjectExplorer::IBuildConfigura
Q_OBJECT
public:
- explicit GenericBuildConfigurationFactory(QObject *parent = nullptr);
+ GenericBuildConfigurationFactory();
~GenericBuildConfigurationFactory();
- int priority(const ProjectExplorer::Target *parent) const override;
+private:
QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override;
- int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override;
QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k,
const QString &projectPath) const override;
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const override;
- bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const override;
- ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) override;
- bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
-
-private:
- bool canHandle(const ProjectExplorer::Target *t) const;
ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const;
};
diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp
index be9f30854d..1b8cca5bfd 100644
--- a/src/plugins/genericprojectmanager/genericmakestep.cpp
+++ b/src/plugins/genericprojectmanager/genericmakestep.cpp
@@ -61,32 +61,12 @@ const char MAKE_ARGUMENTS_KEY[] = "GenericProjectManager.GenericMakeStep.MakeArg
const char MAKE_COMMAND_KEY[] = "GenericProjectManager.GenericMakeStep.MakeCommand";
const char CLEAN_KEY[] = "GenericProjectManager.GenericMakeStep.Clean";
-GenericMakeStep::GenericMakeStep(BuildStepList *parent) :
- AbstractProcessStep(parent, Id(GENERIC_MS_ID))
-{
- ctor();
-}
-
-GenericMakeStep::GenericMakeStep(BuildStepList *parent, const Id id) :
- AbstractProcessStep(parent, id)
-{
- ctor();
-}
-
-GenericMakeStep::GenericMakeStep(BuildStepList *parent, GenericMakeStep *bs) :
- AbstractProcessStep(parent, bs),
- m_buildTargets(bs->m_buildTargets),
- m_makeArguments(bs->m_makeArguments),
- m_makeCommand(bs->m_makeCommand),
- m_clean(bs->m_clean)
-{
- ctor();
-}
-
-void GenericMakeStep::ctor()
+GenericMakeStep::GenericMakeStep(BuildStepList *parent, const QString &buildTarget)
+ : AbstractProcessStep(parent, GENERIC_MS_ID)
{
setDefaultDisplayName(QCoreApplication::translate("GenericProjectManager::Internal::GenericMakeStep",
GENERIC_MS_DISPLAY_NAME));
+ setBuildTarget(buildTarget, true);
}
bool GenericMakeStep::init(QList<const BuildStep *> &earlierSteps)
@@ -324,42 +304,46 @@ void GenericMakeStepConfigWidget::makeArgumentsLineEditTextEdited()
}
//
-// GenericMakeStepFactory
+// GenericMakeAllStepFactory
//
-GenericMakeStepFactory::GenericMakeStepFactory(QObject *parent) :
- IBuildStepFactory(parent)
-{
-}
-
-QList<BuildStepInfo> GenericMakeStepFactory::availableSteps(BuildStepList *parent) const
+GenericMakeAllStepFactory::GenericMakeAllStepFactory()
{
- if (parent->target()->project()->id() != Constants::GENERICPROJECT_ID)
- return {};
+ struct Step : GenericMakeStep
+ {
+ Step(BuildStepList *bsl) : GenericMakeStep(bsl)
+ {
+ setBuildTarget("all", true);
+ }
+ };
- return {{GENERIC_MS_ID,
- QCoreApplication::translate("GenericProjectManager::Internal::GenericMakeStep",
- GENERIC_MS_DISPLAY_NAME)}};
+ registerStep<Step>(GENERIC_MS_ID);
+ setDisplayName(QCoreApplication::translate(
+ "GenericProjectManager::Internal::GenericMakeStep", GENERIC_MS_DISPLAY_NAME));
+ setSupportedProjectType(Constants::GENERICPROJECT_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
}
-BuildStep *GenericMakeStepFactory::create(BuildStepList *parent, const Id id)
-{
- Q_UNUSED(id)
- auto step = new GenericMakeStep(parent);
- if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) {
- step->setClean(true);
- step->setBuildTarget("clean", /* on = */ true);
- } else if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD) {
- step->setBuildTarget("all", /* on = */ true);
- }
- return step;
-}
+//
+// GenericMakeCleanStepFactory
+//
-BuildStep *GenericMakeStepFactory::clone(BuildStepList *parent, BuildStep *source)
+GenericMakeCleanStepFactory::GenericMakeCleanStepFactory()
{
- auto old = qobject_cast<GenericMakeStep *>(source);
- Q_ASSERT(old);
- return new GenericMakeStep(parent, old);
+ struct Step : GenericMakeStep
+ {
+ Step(BuildStepList *bsl) : GenericMakeStep(bsl)
+ {
+ setBuildTarget("clean", true);
+ setClean(true);
+ }
+ };
+
+ registerStep<Step>(GENERIC_MS_ID);
+ setDisplayName(QCoreApplication::translate(
+ "GenericProjectManager::Internal::GenericMakeStep", GENERIC_MS_DISPLAY_NAME));
+ setSupportedProjectType(Constants::GENERICPROJECT_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
}
} // namespace Internal
diff --git a/src/plugins/genericprojectmanager/genericmakestep.h b/src/plugins/genericprojectmanager/genericmakestep.h
index de23ffda39..8a5758b100 100644
--- a/src/plugins/genericprojectmanager/genericmakestep.h
+++ b/src/plugins/genericprojectmanager/genericmakestep.h
@@ -33,7 +33,6 @@ namespace GenericProjectManager {
namespace Internal {
class GenericMakeStepConfigWidget;
-class GenericMakeStepFactory;
namespace Ui { class GenericMakeStep; }
@@ -42,10 +41,9 @@ class GenericMakeStep : public ProjectExplorer::AbstractProcessStep
Q_OBJECT
friend class GenericMakeStepConfigWidget;
- friend class GenericMakeStepFactory;
public:
- explicit GenericMakeStep(ProjectExplorer::BuildStepList *parent);
+ explicit GenericMakeStep(ProjectExplorer::BuildStepList *parent, const QString &buildTarget = {});
bool init(QList<const BuildStep *> &earlierSteps) override;
void run(QFutureInterface<bool> &fi) override;
@@ -60,16 +58,10 @@ public:
void setClean(bool clean);
bool isClean() const;
+private:
QVariantMap toMap() const override;
-
-protected:
- GenericMakeStep(ProjectExplorer::BuildStepList *parent, GenericMakeStep *bs);
- GenericMakeStep(ProjectExplorer::BuildStepList *parent, Core::Id id);
bool fromMap(const QVariantMap &map) override;
-private:
- void ctor();
-
QStringList m_buildTargets;
QString m_makeArguments;
QString m_makeCommand;
@@ -99,19 +91,16 @@ private:
QString m_summaryText;
};
-class GenericMakeStepFactory : public ProjectExplorer::IBuildStepFactory
+class GenericMakeAllStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
- explicit GenericMakeStepFactory(QObject *parent = nullptr);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
+ GenericMakeAllStepFactory();
+};
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *source) override;
+class GenericMakeCleanStepFactory : public ProjectExplorer::BuildStepFactory
+{
+public:
+ GenericMakeCleanStepFactory();
};
} // namespace Internal
diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.cpp b/src/plugins/genericprojectmanager/genericprojectplugin.cpp
index 6c6a35431f..8cb6c96666 100644
--- a/src/plugins/genericprojectmanager/genericprojectplugin.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectplugin.cpp
@@ -62,7 +62,8 @@ bool GenericProjectPlugin::initialize(const QStringList &, QString *errorMessage
ProjectManager::registerProjectType<GenericProject>(Constants::GENERICMIMETYPE);
addAutoReleasedObject(new ProjectFilesFactory);
- addAutoReleasedObject(new GenericMakeStepFactory);
+ addAutoReleasedObject(new GenericMakeAllStepFactory);
+ addAutoReleasedObject(new GenericMakeCleanStepFactory);
addAutoReleasedObject(new GenericBuildConfigurationFactory);
IWizardFactory::registerFactoryCreator([]() { return QList<IWizardFactory *>() << new GenericProjectWizard; });
diff --git a/src/plugins/ios/iosbuildconfiguration.cpp b/src/plugins/ios/iosbuildconfiguration.cpp
index 74d14d08db..f7d056e4f5 100644
--- a/src/plugins/ios/iosbuildconfiguration.cpp
+++ b/src/plugins/ios/iosbuildconfiguration.cpp
@@ -32,12 +32,14 @@
#include "projectexplorer/kitinformation.h"
#include "projectexplorer/namedwidget.h"
#include "projectexplorer/target.h"
+
#include "qmakeprojectmanager/qmakebuildinfo.h"
-#include "utils/algorithm.h"
+#include "qmakeprojectmanager/qmakeprojectmanagerconstants.h"
-#include <memory>
+#include "utils/algorithm.h"
using namespace QmakeProjectManager;
+using namespace ProjectExplorer;
namespace Ios {
namespace Internal {
@@ -47,13 +49,8 @@ const char qmakeProvisioningProfileSettings[] = "QMAKE_MAC_XCODE_SETTINGS+=qprof
const char signingIdentifierKey[] = "Ios.SigningIdentifier";
const char autoManagedSigningKey[] = "Ios.AutoManagedSigning";
-IosBuildConfiguration::IosBuildConfiguration(ProjectExplorer::Target *target) :
- QmakeBuildConfiguration(target)
-{
-}
-
-IosBuildConfiguration::IosBuildConfiguration(ProjectExplorer::Target *target, IosBuildConfiguration *source) :
- QmakeBuildConfiguration(target, source)
+IosBuildConfiguration::IosBuildConfiguration(Target *target)
+ : QmakeBuildConfiguration(target)
{
}
@@ -143,12 +140,11 @@ void IosBuildConfiguration::updateQmakeCommand()
}
}
-IosBuildConfigurationFactory::IosBuildConfigurationFactory(QObject *parent)
- : QmakeBuildConfigurationFactory(parent)
+IosBuildConfigurationFactory::IosBuildConfigurationFactory()
{
+ registerBuildConfiguration<IosBuildConfiguration>(QmakeProjectManager::Constants::QMAKE_BC_ID);
}
-
int IosBuildConfigurationFactory::priority(const ProjectExplorer::Kit *k, const QString &projectPath) const
{
return (QmakeBuildConfigurationFactory::priority(k, projectPath) >= 0
@@ -157,37 +153,10 @@ int IosBuildConfigurationFactory::priority(const ProjectExplorer::Kit *k, const
int IosBuildConfigurationFactory::priority(const ProjectExplorer::Target *parent) const
{
- return (QmakeBuildConfigurationFactory::priority(parent) >= 0
+ return (IBuildConfigurationFactory::priority(parent) >= 0
&& IosManager::supportsIos(parent)) ? 1 : -1;
}
-ProjectExplorer::BuildConfiguration *IosBuildConfigurationFactory::create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const
-{
- auto qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
- auto bc = new IosBuildConfiguration(parent);
- configureBuildConfiguration(parent, bc, qmakeInfo);
- return bc;
-}
-
-ProjectExplorer::BuildConfiguration *IosBuildConfigurationFactory::clone(ProjectExplorer::Target *parent,
- ProjectExplorer::BuildConfiguration *source)
-{
- if (!canClone(parent, source))
- return nullptr;
- auto *oldbc = static_cast<IosBuildConfiguration *>(source);
- return new IosBuildConfiguration(parent, oldbc);
-}
-
-ProjectExplorer::BuildConfiguration *IosBuildConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map)
-{
- if (canRestore(parent, map)) {
- std::unique_ptr<IosBuildConfiguration> bc(new IosBuildConfiguration(parent));
- if (bc->fromMap(map))
- return bc.release();
- }
- return nullptr;
-}
} // namespace Internal
} // namespace Ios
diff --git a/src/plugins/ios/iosbuildconfiguration.h b/src/plugins/ios/iosbuildconfiguration.h
index 2bb94fc529..8eff217bc8 100644
--- a/src/plugins/ios/iosbuildconfiguration.h
+++ b/src/plugins/ios/iosbuildconfiguration.h
@@ -26,49 +26,35 @@
#include "qmakeprojectmanager/qmakebuildconfiguration.h"
-namespace ProjectExplorer {
-class Target;
-class Kit;
-class NamedWidget;
-}
-
namespace Ios {
namespace Internal {
class IosBuildConfiguration : public QmakeProjectManager::QmakeBuildConfiguration
{
- friend class IosBuildConfigurationFactory;
Q_OBJECT
+
public:
explicit IosBuildConfiguration(ProjectExplorer::Target *target);
- IosBuildConfiguration(ProjectExplorer::Target *target, IosBuildConfiguration *source);
+private:
QList<ProjectExplorer::NamedWidget *> createSubConfigWidgets() override;
QVariantMap toMap() const override;
-protected:
bool fromMap(const QVariantMap &map) override;
-private:
void onSigningSettingsChanged(bool autoManagedSigning, QString identifier);
void updateQmakeCommand();
-private:
QString m_signingIdentifier;
bool m_autoManagedSigning = true;
};
-
class IosBuildConfigurationFactory : public QmakeProjectManager::QmakeBuildConfigurationFactory
{
public:
- explicit IosBuildConfigurationFactory(QObject *parent = 0);
+ IosBuildConfigurationFactory();
int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override;
int priority(const ProjectExplorer::Target *parent) const override;
-
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent, const ProjectExplorer::BuildInfo *info) const override;
- ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) override;
- ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
};
} // namespace Internal
diff --git a/src/plugins/ios/iosbuildstep.cpp b/src/plugins/ios/iosbuildstep.cpp
index c088b1ede4..5d89f7c6a8 100644
--- a/src/plugins/ios/iosbuildstep.cpp
+++ b/src/plugins/ios/iosbuildstep.cpp
@@ -60,30 +60,14 @@ const char BUILD_ARGUMENTS_KEY[] = "Ios.IosBuildStep.XcodeArguments";
const char CLEAN_KEY[] = "Ios.IosBuildStep.Clean";
IosBuildStep::IosBuildStep(BuildStepList *parent) :
- AbstractProcessStep(parent, Id(IOS_BUILD_STEP_ID))
-{
- ctor();
-}
-
-IosBuildStep::IosBuildStep(BuildStepList *parent, const Id id) :
- AbstractProcessStep(parent, id)
-{
- ctor();
-}
-
-IosBuildStep::IosBuildStep(BuildStepList *parent, IosBuildStep *bs) :
- AbstractProcessStep(parent, bs),
- m_baseBuildArguments(bs->m_baseBuildArguments),
- m_useDefaultArguments(bs->m_useDefaultArguments),
- m_clean(bs->m_clean)
-{
- ctor();
-}
-
-void IosBuildStep::ctor()
+ AbstractProcessStep(parent, IOS_BUILD_STEP_ID)
{
setDefaultDisplayName(QCoreApplication::translate("GenericProjectManager::Internal::IosBuildStep",
IOS_BUILD_STEP_DISPLAY_NAME));
+ if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) {
+ m_clean = true;
+ setExtraArguments(QStringList("clean"));
+ }
}
bool IosBuildStep::init(QList<const BuildStep *> &earlierSteps)
@@ -127,16 +111,6 @@ bool IosBuildStep::init(QList<const BuildStep *> &earlierSteps)
return AbstractProcessStep::init(earlierSteps);
}
-void IosBuildStep::setClean(bool clean)
-{
- m_clean = clean;
-}
-
-bool IosBuildStep::isClean() const
-{
- return m_clean;
-}
-
QVariantMap IosBuildStep::toMap() const
{
QVariantMap map(AbstractProcessStep::toMap());
@@ -323,49 +297,20 @@ void IosBuildStepConfigWidget::extraArgumentsChanged()
m_buildStep->setExtraArguments(Utils::QtcProcess::splitArgs(
m_ui->extraArgumentsLineEdit->text()));
}
+
//
// IosBuildStepFactory
//
-IosBuildStepFactory::IosBuildStepFactory(QObject *parent) :
- IBuildStepFactory(parent)
-{
-}
-
-BuildStep *IosBuildStepFactory::create(BuildStepList *parent, const Id id)
-{
- Q_UNUSED(id);
- IosBuildStep *step = new IosBuildStep(parent);
- if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) {
- step->setClean(true);
- step->setExtraArguments(QStringList("clean"));
- } else if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD) {
- // nomal setup
- }
- return step;
-}
-
-BuildStep *IosBuildStepFactory::clone(BuildStepList *parent, BuildStep *source)
-{
- IosBuildStep *old = qobject_cast<IosBuildStep *>(source);
- Q_ASSERT(old);
- return new IosBuildStep(parent, old);
-}
-
-QList<BuildStepInfo> IosBuildStepFactory::availableSteps(BuildStepList *parent) const
+IosBuildStepFactory::IosBuildStepFactory()
{
- Id deviceType = DeviceTypeKitInformation::deviceTypeId(parent->target()->kit());
- if (deviceType != Constants::IOS_DEVICE_TYPE
- && deviceType != Constants::IOS_SIMULATOR_TYPE)
- return {};
-
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN
- && parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
- return {};
-
- return {{IOS_BUILD_STEP_ID,
- QCoreApplication::translate("GenericProjectManager::Internal::IosBuildStep",
- IOS_BUILD_STEP_DISPLAY_NAME)}};
+ registerStep<IosBuildStep>(IOS_BUILD_STEP_ID);
+ setSupportedDeviceTypes({Constants::IOS_DEVICE_TYPE,
+ Constants::IOS_SIMULATOR_TYPE});
+ setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_CLEAN,
+ ProjectExplorer::Constants::BUILDSTEPS_BUILD});
+ setDisplayName(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 047eb799f9..47de3d6651 100644
--- a/src/plugins/ios/iosbuildstep.h
+++ b/src/plugins/ios/iosbuildstep.h
@@ -60,17 +60,9 @@ public:
QStringList defaultArguments() const;
QString buildCommand() const;
- void setClean(bool clean);
- bool isClean() const;
-
- QVariantMap toMap() const override;
-protected:
- IosBuildStep(ProjectExplorer::BuildStepList *parent, IosBuildStep *bs);
- IosBuildStep(ProjectExplorer::BuildStepList *parent, Core::Id id);
- bool fromMap(const QVariantMap &map) override;
-
private:
- void ctor();
+ bool fromMap(const QVariantMap &map) override;
+ QVariantMap toMap() const override;
QStringList m_baseBuildArguments;
QStringList m_extraArguments;
@@ -99,19 +91,10 @@ private:
QString m_summaryText;
};
-class IosBuildStepFactory : public ProjectExplorer::IBuildStepFactory
+class IosBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
- explicit IosBuildStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *source) override;
+ IosBuildStepFactory();
};
} // namespace Internal
diff --git a/src/plugins/ios/iosconstants.h b/src/plugins/ios/iosconstants.h
index 22ef1836f4..769067a80b 100644
--- a/src/plugins/ios/iosconstants.h
+++ b/src/plugins/ios/iosconstants.h
@@ -41,6 +41,7 @@ const char IOS_DEVICE_TYPE[] = "Ios.Device.Type";
const char IOS_SIMULATOR_TYPE[] = "Ios.Simulator.Type";
const char IOS_DEVICE_ID[] = "iOS Device ";
const char IOS_SIMULATOR_DEVICE_ID[] = "iOS Simulator Device ";
+const char IOS_PRESET_BUILD_STEP_ID[] = "Ios.IosPresetBuildStep";
const char IOS_DSYM_BUILD_STEP_ID[] = "Ios.IosDsymBuildStep";
const quint16 IOS_DEVICE_PORT_START = 30000;
diff --git a/src/plugins/ios/iosdeployconfiguration.cpp b/src/plugins/ios/iosdeployconfiguration.cpp
index ec7ab7f9c9..fcdb6ad066 100644
--- a/src/plugins/ios/iosdeployconfiguration.cpp
+++ b/src/plugins/ios/iosdeployconfiguration.cpp
@@ -32,8 +32,7 @@
#include <projectexplorer/target.h>
#include <qmakeprojectmanager/qmakeproject.h>
-#include <qtsupport/qtkitinformation.h>
-#include <qtsupport/qtsupportconstants.h>
+#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
using namespace ProjectExplorer;
@@ -41,89 +40,28 @@ namespace Ios {
namespace Internal {
const char IOS_DEPLOYCONFIGURATION_ID[] = "Qt4ProjectManager.IosDeployConfiguration";
-const char IOS_DC_PREFIX[] = "Qt4ProjectManager.IosDeployConfiguration.";
-IosDeployConfiguration::IosDeployConfiguration(Target *parent, Core::Id id)
- : DeployConfiguration(parent, id)
+IosDeployConfiguration::IosDeployConfiguration(Target *parent)
+ : DeployConfiguration(parent, IOS_DEPLOYCONFIGURATION_ID)
{
- setDisplayName(tr("Deploy to iOS"));
- setDefaultDisplayName(displayName());
}
-IosDeployConfiguration::IosDeployConfiguration(Target *parent, DeployConfiguration *source)
- : DeployConfiguration(parent, source)
+void IosDeployConfiguration::initialize()
{
- cloneSteps(source);
+ stepList()->insertStep(0, new IosDeployStep(stepList()));
}
-IosDeployConfigurationFactory::IosDeployConfigurationFactory(QObject *parent)
- : DeployConfigurationFactory(parent)
+IosDeployConfigurationFactory::IosDeployConfigurationFactory()
{
- setObjectName(QLatin1String("IosDeployConfigurationFactory"));
+ setObjectName("IosDeployConfigurationFactory");
+ registerDeployConfiguration<IosDeployConfiguration>(IOS_DEPLOYCONFIGURATION_ID);
+ setSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID);
+ setDefaultDisplayName(tr("Deploy on iOS"));
}
-bool IosDeployConfigurationFactory::canCreate(Target *parent, Core::Id id) const
+bool IosDeployConfigurationFactory::canHandle(Target *target) const
{
- return availableCreationIds(parent).contains(id);
-}
-
-DeployConfiguration *IosDeployConfigurationFactory::create(Target *parent, Core::Id id)
-{
- IosDeployConfiguration *dc = new IosDeployConfiguration(parent, id);
- dc->stepList()->insertStep(0, new IosDeployStep(dc->stepList()));
- return dc;
-}
-
-bool IosDeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
-{
- return canCreate(parent, idFromMap(map));
-}
-
-DeployConfiguration *IosDeployConfigurationFactory::restore(Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
-
- IosDeployConfiguration *dc = new IosDeployConfiguration(parent, idFromMap(map));
- if (dc->fromMap(map))
- return dc;
-
- delete dc;
- return 0;
-}
-
-bool IosDeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *source) const
-{
- if (!IosManager::supportsIos(parent))
- return false;
- return source->id() == IOS_DEPLOYCONFIGURATION_ID;
-}
-
-DeployConfiguration *IosDeployConfigurationFactory::clone(Target *parent, DeployConfiguration *source)
-{
- if (!canClone(parent, source))
- return 0;
- return new IosDeployConfiguration(parent, source);
-}
-
-QList<Core::Id> IosDeployConfigurationFactory::availableCreationIds(Target *parent) const
-{
- QList<Core::Id> ids;
- if (!qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project()))
- return ids;
- if (!parent->project()->supportsKit(parent->kit()))
- return ids;
- if (!IosManager::supportsIos(parent))
- return ids;
- ids << Core::Id(IOS_DEPLOYCONFIGURATION_ID);
- return ids;
-}
-
-QString IosDeployConfigurationFactory::displayNameForId(Core::Id id) const
-{
- if (id.name().startsWith(IOS_DC_PREFIX))
- return tr("Deploy on iOS");
- return QString();
+ return DeployConfigurationFactory::canHandle(target) && IosManager::supportsIos(target->kit());
}
} // namespace Internal
diff --git a/src/plugins/ios/iosdeployconfiguration.h b/src/plugins/ios/iosdeployconfiguration.h
index 2dc92fdfce..1a1f8bd377 100644
--- a/src/plugins/ios/iosdeployconfiguration.h
+++ b/src/plugins/ios/iosdeployconfiguration.h
@@ -33,15 +33,10 @@ namespace Internal {
class IosDeployConfiguration : public ProjectExplorer::DeployConfiguration
{
Q_OBJECT
- friend class IosDeployConfigurationFactory;
public:
- IosDeployConfiguration(ProjectExplorer::Target *parent, Core::Id id);
-
-protected:
- IosDeployConfiguration(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *source);
-
+ explicit IosDeployConfiguration(ProjectExplorer::Target *parent);
+ void initialize() override;
};
class IosDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
@@ -49,21 +44,9 @@ class IosDeployConfigurationFactory : public ProjectExplorer::DeployConfiguratio
Q_OBJECT
public:
- explicit IosDeployConfigurationFactory(QObject *parent = 0);
-
- bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override;
- ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, Core::Id id) override;
- bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::DeployConfiguration *restore(ProjectExplorer::Target *parent,
- const QVariantMap &map) override;
- bool canClone(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *source) const override;
- ProjectExplorer::DeployConfiguration *clone(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *source) override;
+ IosDeployConfigurationFactory();
- QList<Core::Id> availableCreationIds(ProjectExplorer::Target *parent) const override;
- // used to translate the ids to names to display to the user
- QString displayNameForId(Core::Id id) const override;
+ bool canHandle(ProjectExplorer::Target *target) const override;
};
} // namespace Internal
diff --git a/src/plugins/ios/iosdeploystep.cpp b/src/plugins/ios/iosdeploystep.cpp
index e48170b574..d9a67ea962 100644
--- a/src/plugins/ios/iosdeploystep.cpp
+++ b/src/plugins/ios/iosdeploystep.cpp
@@ -59,24 +59,7 @@ const Core::Id IosDeployStep::Id("Qt4ProjectManager.IosDeployStep");
IosDeployStep::IosDeployStep(BuildStepList *parent)
: BuildStep(parent, Id)
- , m_expectFail(false)
{
- ctor();
-}
-
-IosDeployStep::IosDeployStep(BuildStepList *parent,
- IosDeployStep *other)
- : BuildStep(parent, other)
- , m_expectFail(false)
-{
- ctor();
-}
-
-void IosDeployStep::ctor()
-{
- m_toolHandler = 0;
- m_transferStatus = NoTransfer;
- cleanup();
updateDisplayNames();
connect(DeviceManager::instance(), &DeviceManager::updated,
this, &IosDeployStep::updateDisplayNames);
diff --git a/src/plugins/ios/iosdeploystep.h b/src/plugins/ios/iosdeploystep.h
index 068df59c49..d16fa8a4a2 100644
--- a/src/plugins/ios/iosdeploystep.h
+++ b/src/plugins/ios/iosdeploystep.h
@@ -36,16 +36,9 @@
#include <QFutureInterface>
#include <QProcess>
-QT_BEGIN_NAMESPACE
-class QEventLoop;
-class QTimer;
-QT_END_NAMESPACE
-
namespace Ios {
class IosToolHandler;
namespace Internal {
-class IosDeviceConfigListModel;
-class IosPackageCreationStep;
class IosDeployStep : public ProjectExplorer::BuildStep
{
@@ -67,9 +60,6 @@ public:
void run(QFutureInterface<bool> &fi) override;
void cleanup();
void cancel() override;
-signals:
- //void done();
- //void error();
private:
void handleIsTransferringApp(Ios::IosToolHandler *handler, const QString &bundlePath,
@@ -80,7 +70,7 @@ private:
void handleFinished(Ios::IosToolHandler *handler);
void handleErrorMsg(Ios::IosToolHandler *handler, const QString &msg);
void updateDisplayNames();
- IosDeployStep(ProjectExplorer::BuildStepList *bc, IosDeployStep *other);
+
bool init(QList<const BuildStep *> &earlierSteps) override;
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
bool immutable() const override { return true; }
@@ -89,21 +79,20 @@ private:
IosDevice::ConstPtr iosdevice() const;
IosSimulator::ConstPtr iossimulator() const;
- void ctor();
QString deviceId() const;
QString appBundle() const;
void raiseError(const QString &error);
void writeOutput(const QString &text, OutputFormat = OutputFormat::NormalMessage);
void checkProvisioningProfile();
- TransferStatus m_transferStatus;
- IosToolHandler *m_toolHandler;
+ TransferStatus m_transferStatus = NoTransfer;
+ IosToolHandler *m_toolHandler = nullptr;
QFutureInterface<bool> m_futureInterface;
ProjectExplorer::IDevice::ConstPtr m_device;
QString m_bundlePath;
IosDeviceType m_deviceType;
static const Core::Id Id;
- bool m_expectFail;
+ bool m_expectFail = false;
};
} // namespace Internal
diff --git a/src/plugins/ios/iosdeploystepfactory.cpp b/src/plugins/ios/iosdeploystepfactory.cpp
index 8c8d4cc332..d14660fa38 100644
--- a/src/plugins/ios/iosdeploystepfactory.cpp
+++ b/src/plugins/ios/iosdeploystepfactory.cpp
@@ -31,8 +31,6 @@
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
-#include <qtsupport/qtsupportconstants.h>
-#include <qtsupport/qtkitinformation.h>
#include <QCoreApplication>
@@ -41,29 +39,18 @@ using namespace ProjectExplorer;
namespace Ios {
namespace Internal {
-IosDeployStepFactory::IosDeployStepFactory(QObject *parent)
- : IBuildStepFactory(parent)
+IosDeployStepFactory::IosDeployStepFactory()
{
+ registerStep<IosDeployStep>(IosDeployStep::Id);
+ setDisplayName(tr("Deploy to iOS device or emulator"));
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
+ setRepeatable(false);
}
-QList<BuildStepInfo> IosDeployStepFactory::availableSteps(BuildStepList *parent) const
+bool IosDeployStepFactory::canHandle(BuildStepList *parent) const
{
- 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_UNUSED(id);
- return new IosDeployStep(parent);
-}
-
-BuildStep *IosDeployStepFactory::clone(BuildStepList *parent, BuildStep *product)
-{
- return new IosDeployStep(parent, static_cast<IosDeployStep *>(product));
+ return BuildStepFactory::canHandle(parent)
+ && IosManager::supportsIos(parent->target());
}
} // namespace Internal
diff --git a/src/plugins/ios/iosdeploystepfactory.h b/src/plugins/ios/iosdeploystepfactory.h
index 08c550c2b1..75bf7ef7cb 100644
--- a/src/plugins/ios/iosdeploystepfactory.h
+++ b/src/plugins/ios/iosdeploystepfactory.h
@@ -30,19 +30,13 @@
namespace Ios {
namespace Internal {
-class IosDeployStepFactory : public ProjectExplorer::IBuildStepFactory
+class IosDeployStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit IosDeployStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *product) override;
+ IosDeployStepFactory();
+ bool canHandle(ProjectExplorer::BuildStepList *parent) const;
};
} // namespace Internal
diff --git a/src/plugins/ios/iosdsymbuildstep.cpp b/src/plugins/ios/iosdsymbuildstep.cpp
index 3d876621e9..2d2f494766 100644
--- a/src/plugins/ios/iosdsymbuildstep.cpp
+++ b/src/plugins/ios/iosdsymbuildstep.cpp
@@ -56,31 +56,13 @@ static const char COMMAND_PARTIAL_KEY[] = ".Command";
static const char ARGUMENTS_PARTIAL_KEY[] = ".Arguments";
static const char CLEAN_PARTIAL_KEY[] = ".Clean";
-IosPresetBuildStep::IosPresetBuildStep(BuildStepList *parent, const Id id) :
- AbstractProcessStep(parent, id),
+IosDsymBuildStep::IosDsymBuildStep(BuildStepList *parent) :
+ AbstractProcessStep(parent, Constants::IOS_DSYM_BUILD_STEP_ID),
m_clean(parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN)
{
}
-bool IosPresetBuildStep::completeSetup()
-{
- m_command = defaultCommand();
- m_arguments = defaultArguments();
- return true;
-}
-
-bool IosPresetBuildStep::completeSetupWithStep(BuildStep *bs)
-{
- IosPresetBuildStep *o = qobject_cast<IosPresetBuildStep *>(bs);
- if (!o)
- return false;
- m_arguments = o->m_arguments;
- m_clean = o->m_clean;
- m_command = o->m_command;
- return true;
-}
-
-bool IosPresetBuildStep::init(QList<const BuildStep *> &earlierSteps)
+bool IosDsymBuildStep::init(QList<const BuildStep *> &earlierSteps)
{
BuildConfiguration *bc = buildConfiguration();
if (!bc)
@@ -108,7 +90,7 @@ bool IosPresetBuildStep::init(QList<const BuildStep *> &earlierSteps)
return AbstractProcessStep::init(earlierSteps);
}
-QVariantMap IosPresetBuildStep::toMap() const
+QVariantMap IosDsymBuildStep::toMap() const
{
QVariantMap map(AbstractProcessStep::toMap());
@@ -121,7 +103,7 @@ QVariantMap IosPresetBuildStep::toMap() const
return map;
}
-bool IosPresetBuildStep::fromMap(const QVariantMap &map)
+bool IosDsymBuildStep::fromMap(const QVariantMap &map)
{
QVariant bArgs = map.value(id().withSuffix(ARGUMENTS_PARTIAL_KEY).toString());
m_arguments = bArgs.toStringList();
@@ -138,14 +120,14 @@ bool IosPresetBuildStep::fromMap(const QVariantMap &map)
return BuildStep::fromMap(map);
}
-QStringList IosPresetBuildStep::defaultArguments() const
+QStringList IosDsymBuildStep::defaultArguments() const
{
if (m_clean)
return defaultCleanCmdList().mid(1);
return defaultCmdList().mid(1);
}
-QString IosPresetBuildStep::defaultCommand() const
+QString IosDsymBuildStep::defaultCommand() const
{
if (m_clean)
return defaultCleanCmdList().at(0);
@@ -153,14 +135,40 @@ QString IosPresetBuildStep::defaultCommand() const
return defaultCmdList().at(0);
}
-QString IosPresetBuildStep::command() const
+QStringList IosDsymBuildStep::defaultCleanCmdList() const
+{
+ auto runConf = qobject_cast<IosRunConfiguration *>(target()->activeRunConfiguration());
+ QTC_ASSERT(runConf, return QStringList("echo"));
+ QString dsymPath = runConf->bundleDirectory().toUserOutput();
+ dsymPath.chop(4);
+ dsymPath.append(".dSYM");
+ return QStringList({"rm", "-rf", dsymPath});
+}
+
+QStringList IosDsymBuildStep::defaultCmdList() const
+{
+ QString dsymutilCmd = "dsymutil";
+ Utils::FileName dsymUtilPath = IosConfigurations::developerPath()
+ .appendPath("Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil");
+ if (dsymUtilPath.exists())
+ dsymutilCmd = dsymUtilPath.toUserOutput();
+ IosRunConfiguration *runConf =
+ qobject_cast<IosRunConfiguration *>(target()->activeRunConfiguration());
+ QTC_ASSERT(runConf, return QStringList("echo"));
+ QString dsymPath = runConf->bundleDirectory().toUserOutput();
+ dsymPath.chop(4);
+ dsymPath.append(".dSYM");
+ return QStringList({dsymutilCmd, "-o", dsymPath, runConf->localExecutable().toUserOutput()});
+}
+
+QString IosDsymBuildStep::command() const
{
if (m_command.isEmpty())
return defaultCommand();
return m_command;
}
-void IosPresetBuildStep::setCommand(const QString &command)
+void IosDsymBuildStep::setCommand(const QString &command)
{
if (command == m_command)
return;
@@ -177,41 +185,27 @@ void IosPresetBuildStep::setCommand(const QString &command)
}
}
-bool IosPresetBuildStep::clean() const
-{
- return m_clean;
-}
-
-void IosPresetBuildStep::setClean(bool clean)
-{
- if (m_clean != clean) {
- m_clean = clean;
- m_arguments = defaultArguments();
- m_command = defaultCommand();
- }
-}
-
-bool IosPresetBuildStep::isDefault() const
+bool IosDsymBuildStep::isDefault() const
{
return arguments() == defaultArguments() && command() == defaultCommand();
}
-void IosPresetBuildStep::run(QFutureInterface<bool> &fi)
+void IosDsymBuildStep::run(QFutureInterface<bool> &fi)
{
AbstractProcessStep::run(fi);
}
-BuildStepConfigWidget *IosPresetBuildStep::createConfigWidget()
+BuildStepConfigWidget *IosDsymBuildStep::createConfigWidget()
{
- return new IosPresetBuildStepConfigWidget(this);
+ return new IosDsymBuildStepConfigWidget(this);
}
-bool IosPresetBuildStep::immutable() const
+bool IosDsymBuildStep::immutable() const
{
return false;
}
-void IosPresetBuildStep::setArguments(const QStringList &args)
+void IosDsymBuildStep::setArguments(const QStringList &args)
{
if (arguments() == args)
return;
@@ -224,7 +218,7 @@ void IosPresetBuildStep::setArguments(const QStringList &args)
}
}
-QStringList IosPresetBuildStep::arguments() const
+QStringList IosDsymBuildStep::arguments() const
{
if (m_command.isEmpty())
return defaultArguments();
@@ -232,10 +226,10 @@ QStringList IosPresetBuildStep::arguments() const
}
//
-// IosPresetBuildStepConfigWidget
+// IosDsymBuildStepConfigWidget
//
-IosPresetBuildStepConfigWidget::IosPresetBuildStepConfigWidget(IosPresetBuildStep *buildStep)
+IosDsymBuildStepConfigWidget::IosDsymBuildStepConfigWidget(IosDsymBuildStep *buildStep)
: m_buildStep(buildStep)
{
m_ui = new Ui::IosPresetBuildStep;
@@ -250,16 +244,16 @@ IosPresetBuildStepConfigWidget::IosPresetBuildStepConfigWidget(IosPresetBuildSte
updateDetails();
connect(m_ui->argumentsTextEdit, &QPlainTextEdit::textChanged,
- this, &IosPresetBuildStepConfigWidget::argumentsChanged);
+ this, &IosDsymBuildStepConfigWidget::argumentsChanged);
connect(m_ui->commandLineEdit, &QLineEdit::editingFinished,
- this, &IosPresetBuildStepConfigWidget::commandChanged);
+ this, &IosDsymBuildStepConfigWidget::commandChanged);
connect(m_ui->resetDefaultsButton, &QAbstractButton::clicked,
- this, &IosPresetBuildStepConfigWidget::resetDefaults);
+ this, &IosDsymBuildStepConfigWidget::resetDefaults);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
- this, &IosPresetBuildStepConfigWidget::updateDetails);
+ this, &IosDsymBuildStepConfigWidget::updateDetails);
connect(m_buildStep->target(), &Target::kitChanged,
- this, &IosPresetBuildStepConfigWidget::updateDetails);
+ this, &IosDsymBuildStepConfigWidget::updateDetails);
pro->subscribeSignal(&BuildConfiguration::environmentChanged, this, [this]() {
if (static_cast<BuildConfiguration *>(sender())->isActive())
updateDetails();
@@ -271,17 +265,17 @@ IosPresetBuildStepConfigWidget::IosPresetBuildStepConfigWidget(IosPresetBuildSte
});
}
-IosPresetBuildStepConfigWidget::~IosPresetBuildStepConfigWidget()
+IosDsymBuildStepConfigWidget::~IosDsymBuildStepConfigWidget()
{
delete m_ui;
}
-QString IosPresetBuildStepConfigWidget::displayName() const
+QString IosDsymBuildStepConfigWidget::displayName() const
{
return m_buildStep->displayName();
}
-void IosPresetBuildStepConfigWidget::updateDetails()
+void IosDsymBuildStepConfigWidget::updateDetails()
{
BuildConfiguration *bc = m_buildStep->buildConfiguration();
if (!bc)
@@ -297,19 +291,19 @@ void IosPresetBuildStepConfigWidget::updateDetails()
emit updateSummary();
}
-QString IosPresetBuildStepConfigWidget::summaryText() const
+QString IosDsymBuildStepConfigWidget::summaryText() const
{
return m_summaryText;
}
-void IosPresetBuildStepConfigWidget::commandChanged()
+void IosDsymBuildStepConfigWidget::commandChanged()
{
m_buildStep->setCommand(m_ui->commandLineEdit->text());
m_ui->resetDefaultsButton->setEnabled(!m_buildStep->isDefault());
updateDetails();
}
-void IosPresetBuildStepConfigWidget::argumentsChanged()
+void IosDsymBuildStepConfigWidget::argumentsChanged()
{
m_buildStep->setArguments(Utils::QtcProcess::splitArgs(
m_ui->argumentsTextEdit->toPlainText()));
@@ -317,7 +311,7 @@ void IosPresetBuildStepConfigWidget::argumentsChanged()
updateDetails();
}
-void IosPresetBuildStepConfigWidget::resetDefaults()
+void IosDsymBuildStepConfigWidget::resetDefaults()
{
m_buildStep->setCommand(m_buildStep->defaultCommand());
m_buildStep->setArguments(m_buildStep->defaultArguments());
@@ -329,95 +323,19 @@ void IosPresetBuildStepConfigWidget::resetDefaults()
}
//
-// IosPresetBuildStepFactory
+// IosDsymBuildStepFactory
//
-IosPresetBuildStepFactory::IosPresetBuildStepFactory(QObject *parent) :
- IBuildStepFactory(parent)
-{
-}
-
-BuildStep *IosPresetBuildStepFactory::create(BuildStepList *parent, const Id id)
-{
- IosPresetBuildStep *step = createPresetStep(parent, id);
- if (step->completeSetup())
- return step;
- delete step;
- return 0;
-}
-
-BuildStep *IosPresetBuildStepFactory::clone(BuildStepList *parent, BuildStep *source)
-{
- IosPresetBuildStep *old = qobject_cast<IosPresetBuildStep *>(source);
- Q_ASSERT(old);
- IosPresetBuildStep *res = createPresetStep(parent, old->id());
- if (res->completeSetupWithStep(old))
- return res;
- delete res;
- return 0;
-}
-
-BuildStep *IosPresetBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
-{
- IosPresetBuildStep *bs = createPresetStep(parent, idFromMap(map));
- if (bs->fromMap(map))
- return bs;
- delete bs;
- return 0;
-}
-
-QList<BuildStepInfo> 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 {};
-
- 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
-{
- return new IosDsymBuildStep(parent, id);
-}
-
-IosDsymBuildStep::IosDsymBuildStep(BuildStepList *parent, const Id id)
- : IosPresetBuildStep(parent, id)
-{
- setDefaultDisplayName("dsymutil");
-}
-
-QStringList IosDsymBuildStep::defaultCleanCmdList() const
-{
- IosRunConfiguration *runConf =
- qobject_cast<IosRunConfiguration *>(target()->activeRunConfiguration());
- QTC_ASSERT(runConf, return QStringList("echo"));
- QString dsymPath = runConf->bundleDirectory().toUserOutput();
- dsymPath.chop(4);
- dsymPath.append(".dSYM");
- return QStringList({"rm", "-rf", dsymPath});
-}
-
-QStringList IosDsymBuildStep::defaultCmdList() const
+IosDsymBuildStepFactory::IosDsymBuildStepFactory()
{
- QString dsymutilCmd = "dsymutil";
- Utils::FileName dsymUtilPath = IosConfigurations::developerPath()
- .appendPath("Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil");
- if (dsymUtilPath.exists())
- dsymutilCmd = dsymUtilPath.toUserOutput();
- IosRunConfiguration *runConf =
- qobject_cast<IosRunConfiguration *>(target()->activeRunConfiguration());
- QTC_ASSERT(runConf, return QStringList("echo"));
- QString dsymPath = runConf->bundleDirectory().toUserOutput();
- dsymPath.chop(4);
- dsymPath.append(".dSYM");
- return QStringList({dsymutilCmd, "-o", dsymPath, runConf->localExecutable().toUserOutput()});
+ registerStep<IosDsymBuildStep>(Constants::IOS_DSYM_BUILD_STEP_ID);
+ setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_CLEAN,
+ ProjectExplorer::Constants::BUILDSTEPS_BUILD,
+ ProjectExplorer::Constants::BUILDSTEPS_DEPLOY});
+ setSupportedDeviceTypes({Constants::IOS_DEVICE_TYPE,
+ Constants::IOS_SIMULATOR_TYPE});
+ setDisplayName("dsymutil");
}
-
} // namespace Internal
} // namespace Ios
diff --git a/src/plugins/ios/iosdsymbuildstep.h b/src/plugins/ios/iosdsymbuildstep.h
index 851d60f97e..39d01ef667 100644
--- a/src/plugins/ios/iosdsymbuildstep.h
+++ b/src/plugins/ios/iosdsymbuildstep.h
@@ -31,17 +31,17 @@ namespace Ios {
namespace Internal {
namespace Ui { class IosPresetBuildStep; }
-class IosPresetBuildStepConfigWidget;
-class IosPresetBuildStepFactory;
+class IosDsymBuildStepConfigWidget;
-class IosPresetBuildStep : public ProjectExplorer::AbstractProcessStep
+class IosDsymBuildStep : public ProjectExplorer::AbstractProcessStep
{
Q_OBJECT
- friend class IosPresetBuildStepConfigWidget;
- friend class IosPresetBuildStepFactory;
+ friend class IosDsymBuildStepConfigWidget;
public:
+ IosDsymBuildStep(ProjectExplorer::BuildStepList *parent);
+
bool init(QList<const BuildStep *> &earlierSteps) override;
void run(QFutureInterface<bool> &fi) override;
@@ -53,31 +53,27 @@ public:
QString defaultCommand() const;
QString command() const;
void setCommand(const QString &command);
- bool clean() const;
- void setClean(bool clean);
bool isDefault() const;
QVariantMap toMap() const override;
-protected:
- IosPresetBuildStep(ProjectExplorer::BuildStepList *parent, Core::Id id);
- virtual bool completeSetup();
- virtual bool completeSetupWithStep(ProjectExplorer::BuildStep *bs);
- bool fromMap(const QVariantMap &map) override;
- virtual QStringList defaultCleanCmdList() const = 0;
- virtual QStringList defaultCmdList() const = 0;
+
private:
+ bool fromMap(const QVariantMap &map) override;
+ QStringList defaultCleanCmdList() const;
+ QStringList defaultCmdList() const;
+
QStringList m_arguments;
QString m_command;
bool m_clean;
};
-class IosPresetBuildStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
+class IosDsymBuildStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
{
Q_OBJECT
public:
- IosPresetBuildStepConfigWidget(IosPresetBuildStep *buildStep);
- ~IosPresetBuildStepConfigWidget();
+ IosDsymBuildStepConfigWidget(IosDsymBuildStep *buildStep);
+ ~IosDsymBuildStepConfigWidget();
QString displayName() const override;
QString summaryText() const override;
@@ -88,47 +84,15 @@ private:
void updateDetails();
Ui::IosPresetBuildStep *m_ui;
- IosPresetBuildStep *m_buildStep;
+ IosDsymBuildStep *m_buildStep;
QString m_summaryText;
};
-class IosPresetBuildStepFactory : public ProjectExplorer::IBuildStepFactory
-{
- Q_OBJECT
-
-public:
- explicit IosPresetBuildStepFactory(QObject *parent = 0);
-
- 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;
-
-protected:
- virtual IosPresetBuildStep *createPresetStep(ProjectExplorer::BuildStepList *parent,
- const Core::Id id) const = 0;
-};
-
-class IosDsymBuildStep : public IosPresetBuildStep
-{
- Q_OBJECT
- friend class IosDsymBuildStepFactory;
-protected:
- QStringList defaultCleanCmdList() const override;
- QStringList defaultCmdList() const override;
- IosDsymBuildStep(ProjectExplorer::BuildStepList *parent, Core::Id id);
-};
-
-class IosDsymBuildStepFactory : public IosPresetBuildStepFactory
+class IosDsymBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- IosPresetBuildStep *createPresetStep(ProjectExplorer::BuildStepList *parent,
- const Core::Id id) const override;
+ explicit IosDsymBuildStepFactory();
};
} // namespace Internal
diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp
index f26b6cca86..78a3928d52 100644
--- a/src/plugins/ios/iosrunconfiguration.cpp
+++ b/src/plugins/ios/iosrunconfiguration.cpp
@@ -95,7 +95,7 @@ private:
};
IosRunConfiguration::IosRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, Constants::IOS_RC_ID_PREFIX)
{
addExtraAspect(new ArgumentsAspect(this, "Ios.run_arguments"));
@@ -105,15 +105,13 @@ IosRunConfiguration::IosRunConfiguration(Target *target)
this, &IosRunConfiguration::deviceChanges);
}
-void IosRunConfiguration::initialize(Core::Id id)
+QString IosRunConfiguration::extraId() const
{
- RunConfiguration::initialize(id);
- m_profilePath = pathFromId(id);
-
- updateDisplayNames();
+ return m_profilePath.toString();
}
-void IosRunConfiguration::deviceChanges() {
+void IosRunConfiguration::deviceChanges()
+{
updateDisplayNames();
updateEnabledState();
}
@@ -242,6 +240,12 @@ FileName IosRunConfiguration::localExecutable() const
bool IosRunConfiguration::fromMap(const QVariantMap &map)
{
+ if (!RunConfiguration::fromMap(map))
+ return false;
+
+ QString extraId = idFromMap(map).suffixAfter(id());
+ m_profilePath = Utils::FileName::fromString(extraId);
+
bool deviceTypeIsInt;
map.value(deviceTypeKey).toInt(&deviceTypeIsInt);
if (deviceTypeIsInt || !m_deviceType.fromMap(map.value(deviceTypeKey).toMap())) {
@@ -250,7 +254,9 @@ bool IosRunConfiguration::fromMap(const QVariantMap &map)
else
m_deviceType = IosDeviceType(IosDeviceType::SimulatedDevice);
}
- return RunConfiguration::fromMap(map);
+
+ updateDisplayNames();
+ return true;
}
QVariantMap IosRunConfiguration::toMap() const
@@ -265,15 +271,6 @@ QString IosRunConfiguration::buildSystemTarget() const
return static_cast<QmakeProject *>(target()->project())->mapProFilePathToTarget(m_profilePath);
}
-FileName IosRunConfiguration::pathFromId(Core::Id id)
-{
- QString pathStr = id.toString();
- const QString prefix = Constants::IOS_RC_ID_PREFIX;
- if (!pathStr.startsWith(prefix))
- return Utils::FileName();
- return Utils::FileName::fromString(pathStr.mid(prefix.size()));
-}
-
QString IosRunConfiguration::disabledReason() const
{
Core::Id devType = DeviceTypeKitInformation::deviceTypeId(target()->kit());
diff --git a/src/plugins/ios/iosrunconfiguration.h b/src/plugins/ios/iosrunconfiguration.h
index 9a88424e8e..5295fc7c22 100644
--- a/src/plugins/ios/iosrunconfiguration.h
+++ b/src/plugins/ios/iosrunconfiguration.h
@@ -66,14 +66,11 @@ public:
QString buildSystemTarget() const final;
- static Utils::FileName pathFromId(Core::Id id);
-
signals:
void localExecutableChanged();
private:
- friend class ProjectExplorer::IRunConfigurationFactory;
- void initialize(Core::Id id) override;
+ QString extraId() const final;
void deviceChanges();
friend class IosRunConfigurationWidget;
diff --git a/src/plugins/nim/nim.pro b/src/plugins/nim/nim.pro
index ae570653a0..9a53b0ed55 100644
--- a/src/plugins/nim/nim.pro
+++ b/src/plugins/nim/nim.pro
@@ -18,7 +18,6 @@ HEADERS += \
project/nimproject.h \
project/nimprojectnode.h \
project/nimbuildconfiguration.h \
- project/nimbuildconfigurationfactory.h \
project/nimcompilerbuildstep.h \
project/nimcompilerbuildstepconfigwidget.h \
project/nimcompilercleanstep.h \
@@ -45,7 +44,6 @@ SOURCES += \
project/nimproject.cpp \
project/nimprojectnode.cpp \
project/nimbuildconfiguration.cpp \
- project/nimbuildconfigurationfactory.cpp \
project/nimcompilerbuildstep.cpp \
project/nimcompilerbuildstepconfigwidget.cpp \
project/nimcompilercleanstep.cpp \
diff --git a/src/plugins/nim/nim.qbs b/src/plugins/nim/nim.qbs
index 5b6d140719..2142b9848e 100644
--- a/src/plugins/nim/nim.qbs
+++ b/src/plugins/nim/nim.qbs
@@ -36,7 +36,6 @@ QtcPlugin {
prefix: "project/"
files: [
"nimbuildconfiguration.h", "nimbuildconfiguration.cpp",
- "nimbuildconfigurationfactory.h", "nimbuildconfigurationfactory.cpp",
"nimbuildconfigurationwidget.h", "nimbuildconfigurationwidget.cpp",
"nimcompilerbuildstep.h", "nimcompilerbuildstep.cpp",
"nimcompilerbuildstepconfigwidget.h", "nimcompilerbuildstepconfigwidget.cpp", "nimcompilerbuildstepconfigwidget.ui",
diff --git a/src/plugins/nim/nimplugin.cpp b/src/plugins/nim/nimplugin.cpp
index b07d847219..52a267b965 100644
--- a/src/plugins/nim/nimplugin.cpp
+++ b/src/plugins/nim/nimplugin.cpp
@@ -28,7 +28,7 @@
#include "nimconstants.h"
#include "editor/nimeditorfactory.h"
#include "editor/nimhighlighter.h"
-#include "project/nimbuildconfigurationfactory.h"
+#include "project/nimbuildconfiguration.h"
#include "project/nimcompilerbuildstepfactory.h"
#include "project/nimcompilercleanstepfactory.h"
#include "project/nimproject.h"
diff --git a/src/plugins/nim/project/nimbuildconfiguration.cpp b/src/plugins/nim/project/nimbuildconfiguration.cpp
index 81f34e12fb..7be50ea787 100644
--- a/src/plugins/nim/project/nimbuildconfiguration.cpp
+++ b/src/plugins/nim/project/nimbuildconfiguration.cpp
@@ -27,12 +27,23 @@
#include "nimbuildconfigurationwidget.h"
#include "nimcompilerbuildstep.h"
#include "nimproject.h"
+#include "nimbuildconfiguration.h"
+#include "nimcompilerbuildstep.h"
+#include "nimcompilercleanstep.h"
+#include "nimproject.h"
#include "../nimconstants.h"
-#include <projectexplorer/namedwidget.h>
-#include <projectexplorer/projectexplorerconstants.h>
+#include <coreplugin/documentmanager.h>
+#include <projectexplorer/buildconfiguration.h>
+#include <projectexplorer/buildinfo.h>
#include <projectexplorer/buildsteplist.h>
+#include <projectexplorer/buildstep.h>
+#include <projectexplorer/kit.h>
+#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/projectmacroexpander.h>
+#include <projectexplorer/target.h>
+#include <utils/mimetypes/mimedatabase.h>
#include <utils/qtcassert.h>
using namespace ProjectExplorer;
@@ -40,9 +51,73 @@ using namespace Utils;
namespace Nim {
+static FileName defaultBuildDirectory(const Kit *k,
+ const QString &projectFilePath,
+ const QString &bc,
+ BuildConfiguration::BuildType buildType)
+{
+ QFileInfo projectFileInfo(projectFilePath);
+
+ ProjectMacroExpander expander(projectFilePath, projectFileInfo.baseName(), k, bc, buildType);
+ QString buildDirectory = expander.expand(Core::DocumentManager::buildDirectory());
+
+ if (FileUtils::isAbsolutePath(buildDirectory))
+ return FileName::fromString(buildDirectory);
+
+ auto projectDir = FileName::fromString(projectFileInfo.absoluteDir().absolutePath());
+ auto result = projectDir.appendPath(buildDirectory);
+
+ return result;
+}
+
NimBuildConfiguration::NimBuildConfiguration(Target *target)
: BuildConfiguration(target, Constants::C_NIMBUILDCONFIGURATION_ID)
-{}
+{
+}
+
+void NimBuildConfiguration::initialize(const BuildInfo *info)
+{
+ BuildConfiguration::initialize(info);
+
+ auto project = qobject_cast<NimProject *>(target()->project());
+ QTC_ASSERT(project, return);
+
+ // Create the build configuration and initialize it from build info
+ setBuildDirectory(defaultBuildDirectory(target()->kit(),
+ project->projectFilePath().toString(),
+ info->displayName,
+ info->buildType));
+
+ // Add nim compiler build step
+ {
+ BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps);
+ NimCompilerBuildStep::DefaultBuildOptions defaultOption;
+ switch (info->buildType) {
+ case BuildConfiguration::Release:
+ defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release;
+ break;
+ case BuildConfiguration::Debug:
+ defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Debug;
+ break;
+ default:
+ defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Empty;
+ break;
+ }
+ nimCompilerBuildStep->setDefaultCompilerOptions(defaultOption);
+ Utils::FileNameList nimFiles = project->nimFiles();
+ if (!nimFiles.isEmpty())
+ nimCompilerBuildStep->setTargetNimFile(nimFiles.first());
+ buildSteps->appendStep(nimCompilerBuildStep);
+ }
+
+ // Add clean step
+ {
+ BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
+ cleanSteps->appendStep(new NimCompilerCleanStep(cleanSteps));
+ }
+}
+
NamedWidget *NimBuildConfiguration::createConfigWidget()
{
@@ -59,9 +134,6 @@ bool NimBuildConfiguration::fromMap(const QVariantMap &map)
if (!BuildConfiguration::fromMap(map))
return false;
- if (!canRestore(map))
- return false;
-
const QString displayName = map[Constants::C_NIMBUILDCONFIGURATION_DISPLAY_KEY].toString();
const QString buildDirectory = map[Constants::C_NIMBUILDCONFIGURATION_BUILDDIRECTORY_KEY].toString();
@@ -91,32 +163,58 @@ FileName NimBuildConfiguration::outFilePath() const
return step->outFilePath();
}
-bool NimBuildConfiguration::canRestore(const QVariantMap &map)
+const NimCompilerBuildStep *NimBuildConfiguration::nimCompilerBuildStep() const
{
- return idFromMap(map) == Constants::C_NIMBUILDCONFIGURATION_ID;
+ BuildStepList *steps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ QTC_ASSERT(steps, return nullptr);
+ foreach (BuildStep *step, steps->steps())
+ if (step->id() == Constants::C_NIMCOMPILERBUILDSTEP_ID)
+ return qobject_cast<NimCompilerBuildStep *>(step);
+ return nullptr;
}
-bool NimBuildConfiguration::hasNimCompilerBuildStep() const
+
+NimBuildConfigurationFactory::NimBuildConfigurationFactory()
{
- BuildStepList *steps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- return steps ? steps->contains(Constants::C_NIMCOMPILERBUILDSTEP_ID) : false;
+ registerBuildConfiguration<NimBuildConfiguration>(Constants::C_NIMBUILDCONFIGURATION_ID);
+ setSupportedProjectType(Constants::C_NIMPROJECT_ID);
+ setSupportedProjectMimeTypeName(Constants::C_NIM_PROJECT_MIMETYPE);
}
-bool NimBuildConfiguration::hasNimCompilerCleanStep() const
+QList<BuildInfo *> NimBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
- BuildStepList *steps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
- return steps ? steps->contains(Constants::C_NIMCOMPILERCLEANSTEP_ID) : false;
+ // Retrieve the project path
+ auto project = qobject_cast<NimProject *>(parent->project());
+ QTC_ASSERT(project, return {});
+
+ // Create the build info
+ BuildInfo *info = createBuildInfo(parent->kit(), project->projectFilePath().toString(),
+ BuildConfiguration::Debug);
+
+ info->displayName.clear(); // ask for a name
+ info->buildDirectory.clear(); // This depends on the displayName
+
+ return {info};
}
-const NimCompilerBuildStep *NimBuildConfiguration::nimCompilerBuildStep() const
+QList<BuildInfo *> NimBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
{
- BuildStepList *steps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- QTC_ASSERT(steps, return nullptr);
- foreach (BuildStep *step, steps->steps())
- if (step->id() == Constants::C_NIMCOMPILERBUILDSTEP_ID)
- return qobject_cast<NimCompilerBuildStep *>(step);
- return nullptr;
+ BuildInfo *debug = createBuildInfo(k, projectPath, BuildConfiguration::Debug);
+ BuildInfo *release = createBuildInfo(k, projectPath, BuildConfiguration::Release);
+ return {debug, release};
}
+BuildInfo *NimBuildConfigurationFactory::createBuildInfo(const Kit *k, const QString &projectFilePath,
+ BuildConfiguration::BuildType buildType) const
+{
+ auto result = new BuildInfo(this);
+ result->buildType = buildType;
+ result->displayName = BuildConfiguration::buildTypeName(buildType);
+ result->buildDirectory = defaultBuildDirectory(k, projectFilePath, result->displayName, buildType);
+ result->kitId = k->id();
+ result->typeName = tr("Build");
+ return result;
}
+} // namespace Nim
+
diff --git a/src/plugins/nim/project/nimbuildconfiguration.h b/src/plugins/nim/project/nimbuildconfiguration.h
index 1228be0680..de2b5a9464 100644
--- a/src/plugins/nim/project/nimbuildconfiguration.h
+++ b/src/plugins/nim/project/nimbuildconfiguration.h
@@ -28,40 +28,53 @@
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/target.h>
-#include <QPointer>
-
namespace Nim {
-class NimProject;
class NimCompilerBuildStep;
class NimBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
Q_OBJECT
-public:
- NimBuildConfiguration(ProjectExplorer::Target *target);
+ friend class ProjectExplorer::IBuildConfigurationFactory;
+ explicit NimBuildConfiguration(ProjectExplorer::Target *target);
+ void initialize(const ProjectExplorer::BuildInfo *info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
-
ProjectExplorer::BuildConfiguration::BuildType buildType() const override;
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
+public:
Utils::FileName cacheDirectory() const;
Utils::FileName outFilePath() const;
- static bool canRestore(const QVariantMap &map);
-
- bool hasNimCompilerBuildStep() const;
- bool hasNimCompilerCleanStep() const;
-
signals:
void outFilePathChanged(const Utils::FileName &outFilePath);
private:
+ void setupBuild(const ProjectExplorer::BuildInfo *info);
const NimCompilerBuildStep *nimCompilerBuildStep() const;
};
+
+class NimBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
+{
+ Q_OBJECT
+
+public:
+ NimBuildConfigurationFactory();
+
+private:
+ QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override;
+
+ QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k,
+ const QString &projectPath) const override;
+
+ ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k,
+ const QString &projectPath,
+ ProjectExplorer::BuildConfiguration::BuildType buildType) const;
+};
+
}
diff --git a/src/plugins/nim/project/nimbuildconfigurationfactory.cpp b/src/plugins/nim/project/nimbuildconfigurationfactory.cpp
deleted file mode 100644
index 99839eec72..0000000000
--- a/src/plugins/nim/project/nimbuildconfigurationfactory.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) Filippo Cucchetto <filippocucchetto@gmail.com>
-** Contact: http://www.qt.io/licensing
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "nimbuildconfigurationfactory.h"
-#include "nimbuildconfiguration.h"
-#include "nimcompilerbuildstep.h"
-#include "nimcompilercleanstep.h"
-#include "nimproject.h"
-
-#include "../nimconstants.h"
-
-#include <coreplugin/documentmanager.h>
-#include <projectexplorer/buildconfiguration.h>
-#include <projectexplorer/buildinfo.h>
-#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/buildstep.h>
-#include <projectexplorer/kit.h>
-#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/projectmacroexpander.h>
-#include <projectexplorer/target.h>
-#include <utils/mimetypes/mimedatabase.h>
-#include <utils/qtcassert.h>
-
-#include <memory>
-
-using namespace ProjectExplorer;
-using namespace Utils;
-
-namespace Nim {
-
-NimBuildConfigurationFactory::NimBuildConfigurationFactory(QObject *parent)
- : IBuildConfigurationFactory(parent)
-{}
-
-QList<BuildInfo *> NimBuildConfigurationFactory::availableBuilds(const Target *parent) const
-{
- // Retrieve the project path
- auto project = qobject_cast<NimProject *>(parent->project());
- QTC_ASSERT(project, return {});
-
- // Create the build info
- BuildInfo *info = createBuildInfo(parent->kit(), project->projectFilePath().toString(),
- BuildConfiguration::Debug);
-
- info->displayName.clear(); // ask for a name
- info->buildDirectory.clear(); // This depends on the displayName
-
- return {info};
-}
-
-QList<BuildInfo *> NimBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
-{
- BuildInfo *debug = createBuildInfo(k, projectPath, BuildConfiguration::Debug);
- BuildInfo *release = createBuildInfo(k, projectPath, BuildConfiguration::Release);
- return {debug, release};
-}
-
-BuildConfiguration *NimBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
-{
- auto project = qobject_cast<NimProject *>(parent->project());
- QTC_ASSERT(project, return nullptr);
-
- // Create the build configuration and initialize it from build info
- auto result = new NimBuildConfiguration(parent);
- result->setDisplayName(info->displayName);
- result->setDefaultDisplayName(info->displayName);
- result->setBuildDirectory(defaultBuildDirectory(parent->kit(),
- project->projectFilePath().toString(),
- info->displayName,
- info->buildType));
-
- // Add nim compiler build step
- {
- BuildStepList *buildSteps = result->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
- auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps);
- NimCompilerBuildStep::DefaultBuildOptions defaultOption;
- switch (info->buildType) {
- case BuildConfiguration::Release:
- defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release;
- break;
- case BuildConfiguration::Debug:
- defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Debug;
- break;
- default:
- defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Empty;
- break;
- }
- nimCompilerBuildStep->setDefaultCompilerOptions(defaultOption);
- Utils::FileNameList nimFiles = project->nimFiles();
- if (!nimFiles.isEmpty())
- nimCompilerBuildStep->setTargetNimFile(nimFiles.first());
- buildSteps->appendStep(nimCompilerBuildStep);
- }
-
- // Add clean step
- {
- BuildStepList *cleanSteps = result->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
- cleanSteps->appendStep(new NimCompilerCleanStep(cleanSteps));
- }
-
- return result;
-}
-
-bool NimBuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const
-{
- Q_UNUSED(parent);
- if (!canHandle(parent))
- return false;
- return NimBuildConfiguration::canRestore(map);
-}
-
-BuildConfiguration *NimBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
-{
- QTC_ASSERT(canRestore(parent, map), return nullptr);
-
- // Create the build configuration
- auto result = new NimBuildConfiguration(parent);
-
- // Restore from map
- bool status = result->fromMap(map);
- QTC_ASSERT(status, return nullptr);
-
- return result;
-}
-
-bool NimBuildConfigurationFactory::canClone(const Target *parent, BuildConfiguration *product) const
-{
- QTC_ASSERT(parent, return false);
- QTC_ASSERT(product, return false);
- if (!canHandle(parent))
- return false;
- return product->id() == Constants::C_NIMBUILDCONFIGURATION_ID;
-}
-
-BuildConfiguration *NimBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *product)
-{
- QTC_ASSERT(parent, return nullptr);
- QTC_ASSERT(product, return nullptr);
- auto buildConfiguration = qobject_cast<NimBuildConfiguration *>(product);
- QTC_ASSERT(buildConfiguration, return nullptr);
- std::unique_ptr<NimBuildConfiguration> result(new NimBuildConfiguration(parent));
- return result->fromMap(buildConfiguration->toMap()) ? result.release() : nullptr;
-}
-
-int NimBuildConfigurationFactory::priority(const Kit *k, const QString &projectPath) const
-{
- if (k && Utils::mimeTypeForFile(projectPath).matchesName(Constants::C_NIM_PROJECT_MIMETYPE))
- return 0;
- return -1;
-}
-
-int NimBuildConfigurationFactory::priority(const Target *parent) const
-{
- return canHandle(parent) ? 0 : -1;
-}
-
-bool NimBuildConfigurationFactory::canHandle(const Target *t) const
-{
- if (!t->project()->supportsKit(t->kit()))
- return false;
- return qobject_cast<NimProject *>(t->project());
-}
-
-FileName NimBuildConfigurationFactory::defaultBuildDirectory(const Kit *k,
- const QString &projectFilePath,
- const QString &bc,
- BuildConfiguration::BuildType buildType)
-{
- QFileInfo projectFileInfo(projectFilePath);
-
- ProjectMacroExpander expander(projectFilePath, projectFileInfo.baseName(), k, bc, buildType);
- QString buildDirectory = expander.expand(Core::DocumentManager::buildDirectory());
-
- if (FileUtils::isAbsolutePath(buildDirectory))
- return FileName::fromString(buildDirectory);
-
- auto projectDir = FileName::fromString(projectFileInfo.absoluteDir().absolutePath());
- auto result = projectDir.appendPath(buildDirectory);
-
- return result;
-}
-
-BuildInfo *NimBuildConfigurationFactory::createBuildInfo(const Kit *k, const QString &projectFilePath,
- BuildConfiguration::BuildType buildType) const
-{
- auto result = new BuildInfo(this);
- result->buildType = buildType;
- result->displayName = BuildConfiguration::buildTypeName(buildType);
- result->buildDirectory = defaultBuildDirectory(k, projectFilePath, result->displayName, buildType);
- result->kitId = k->id();
- result->typeName = tr("Build");
- return result;
-}
-
-} // namespace Nim
diff --git a/src/plugins/nim/project/nimbuildconfigurationfactory.h b/src/plugins/nim/project/nimbuildconfigurationfactory.h
deleted file mode 100644
index 40532ca2ee..0000000000
--- a/src/plugins/nim/project/nimbuildconfigurationfactory.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) Filippo Cucchetto <filippocucchetto@gmail.com>
-** Contact: http://www.qt.io/licensing
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <projectexplorer/buildconfiguration.h>
-
-namespace Nim {
-
-class NimBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
-{
- Q_OBJECT
-
-public:
- explicit NimBuildConfigurationFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override;
-
- QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k,
- const QString &projectPath) const override;
-
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const override;
-
- bool canRestore(const ProjectExplorer::Target *parent,
- const QVariantMap &map) const override;
-
- ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent,
- const QVariantMap &map) override;
-
- bool canClone(const ProjectExplorer::Target *parent,
- ProjectExplorer::BuildConfiguration *product) const override;
-
- ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent,
- ProjectExplorer::BuildConfiguration *product) override;
-
- int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override;
-
- int priority(const ProjectExplorer::Target *parent) const override;
-
-private:
- bool canHandle(const ProjectExplorer::Target *t) const;
- static Utils::FileName defaultBuildDirectory(const ProjectExplorer::Kit *k,
- const QString &projectPath,
- const QString &bc, ProjectExplorer::BuildConfiguration::BuildType buildType);
-
- ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k,
- const QString &projectPath,
- ProjectExplorer::BuildConfiguration::BuildType buildType) const;
-};
-
-}
diff --git a/src/plugins/nim/project/nimcompilerbuildstepfactory.cpp b/src/plugins/nim/project/nimcompilerbuildstepfactory.cpp
index afd2125f3f..c1d25593d7 100644
--- a/src/plugins/nim/project/nimcompilerbuildstepfactory.cpp
+++ b/src/plugins/nim/project/nimcompilerbuildstepfactory.cpp
@@ -32,39 +32,17 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <utils/qtcassert.h>
-#include <memory>
-
using namespace ProjectExplorer;
namespace Nim {
-NimCompilerBuildStepFactory::NimCompilerBuildStepFactory(QObject *parent)
- : IBuildStepFactory(parent)
-{}
-
-QList<BuildStepInfo> NimCompilerBuildStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
- return {};
-
- auto bc = qobject_cast<NimBuildConfiguration *>(parent->parent());
- if (!bc || bc->hasNimCompilerBuildStep())
- return {};
-
- return {{Constants::C_NIMCOMPILERBUILDSTEP_ID, tr("Nim Compiler Build Step")}};
-}
-
-BuildStep *NimCompilerBuildStepFactory::create(BuildStepList *parent, Core::Id)
-{
- return new NimCompilerBuildStep(parent);
-}
-
-BuildStep *NimCompilerBuildStepFactory::clone(BuildStepList *parent, BuildStep *buildStep)
+NimCompilerBuildStepFactory::NimCompilerBuildStepFactory()
{
- QTC_ASSERT(parent, return nullptr);
- QTC_ASSERT(buildStep, return nullptr);
- std::unique_ptr<NimCompilerBuildStep> result(new NimCompilerBuildStep(parent));
- return result->fromMap(buildStep->toMap()) ? result.release() : nullptr;
+ registerStep<NimCompilerBuildStep>(Constants::C_NIMCOMPILERBUILDSTEP_ID);
+ setDisplayName(tr("Nim Compiler Build Step"));
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ setSupportedConfiguration(Constants::C_NIMBUILDCONFIGURATION_ID);
+ setRepeatable(false);
}
}
diff --git a/src/plugins/nim/project/nimcompilerbuildstepfactory.h b/src/plugins/nim/project/nimcompilerbuildstepfactory.h
index 9ccb6cbde6..a19c34792f 100644
--- a/src/plugins/nim/project/nimcompilerbuildstepfactory.h
+++ b/src/plugins/nim/project/nimcompilerbuildstepfactory.h
@@ -29,18 +29,12 @@
namespace Nim {
-class NimCompilerBuildStepFactory : public ProjectExplorer::IBuildStepFactory
+class NimCompilerBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- NimCompilerBuildStepFactory(QObject *parent = nullptr);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override;
+ NimCompilerBuildStepFactory();
};
}
diff --git a/src/plugins/nim/project/nimcompilercleanstepfactory.cpp b/src/plugins/nim/project/nimcompilercleanstepfactory.cpp
index 2478d33fd3..eaac014dde 100644
--- a/src/plugins/nim/project/nimcompilercleanstepfactory.cpp
+++ b/src/plugins/nim/project/nimcompilercleanstepfactory.cpp
@@ -31,38 +31,18 @@
#include <projectexplorer/projectexplorerconstants.h>
-#include <memory>
-
using namespace ProjectExplorer;
namespace Nim {
-NimCompilerCleanStepFactory::NimCompilerCleanStepFactory(QObject *parent)
- : IBuildStepFactory(parent)
-{}
-
-QList<BuildStepInfo> NimCompilerCleanStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN)
- return {};
-
- auto bc = qobject_cast<NimBuildConfiguration *>(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)
-{
- return new NimCompilerCleanStep(parent);
-}
-
-BuildStep *NimCompilerCleanStepFactory::clone(BuildStepList *, BuildStep *)
+NimCompilerCleanStepFactory::NimCompilerCleanStepFactory()
{
- return nullptr;
+ registerStep<NimCompilerCleanStep>(Constants::C_NIMCOMPILERCLEANSTEP_ID);
+ setFlags(BuildStepInfo::Unclonable);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
+ setSupportedConfiguration(Constants::C_NIMBUILDCONFIGURATION_ID);
+ setRepeatable(false);
+ setDisplayName(tr(Nim::Constants::C_NIMCOMPILERCLEANSTEP_DISPLAY));
}
}
diff --git a/src/plugins/nim/project/nimcompilercleanstepfactory.h b/src/plugins/nim/project/nimcompilercleanstepfactory.h
index 0ae04e5813..a3b5c3d099 100644
--- a/src/plugins/nim/project/nimcompilercleanstepfactory.h
+++ b/src/plugins/nim/project/nimcompilercleanstepfactory.h
@@ -29,18 +29,12 @@
namespace Nim {
-class NimCompilerCleanStepFactory : public ProjectExplorer::IBuildStepFactory
+class NimCompilerCleanStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- NimCompilerCleanStepFactory(QObject *parent = nullptr);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override;
+ NimCompilerCleanStepFactory();
};
}
diff --git a/src/plugins/nim/project/nimrunconfiguration.cpp b/src/plugins/nim/project/nimrunconfiguration.cpp
index 341eeba5f4..177f3f938b 100644
--- a/src/plugins/nim/project/nimrunconfiguration.cpp
+++ b/src/plugins/nim/project/nimrunconfiguration.cpp
@@ -44,7 +44,7 @@ using namespace Utils;
namespace Nim {
NimRunConfiguration::NimRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, Constants::C_NIMRUNCONFIGURATION_ID)
, m_workingDirectoryAspect(new WorkingDirectoryAspect(this, Nim::Constants::C_NIMRUNCONFIGURATION_WORKINGDIRECTORYASPECT_ID))
, m_argumentAspect(new ArgumentsAspect(this, Nim::Constants::C_NIMRUNCONFIGURATION_ARGUMENTASPECT_ID))
, m_terminalAspect(new TerminalAspect(this, Nim::Constants::C_NIMRUNCONFIGURATION_TERMINALASPECT_ID))
diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp
index 563cc4f97b..bfd7f0ef1d 100644
--- a/src/plugins/projectexplorer/abstractprocessstep.cpp
+++ b/src/plugins/projectexplorer/abstractprocessstep.cpp
@@ -89,11 +89,6 @@ AbstractProcessStep::AbstractProcessStep(BuildStepList *bsl, Core::Id id) :
connect(&m_timer, &QTimer::timeout, this, &AbstractProcessStep::checkForCancel);
}
-AbstractProcessStep::AbstractProcessStep(BuildStepList *bsl,
- AbstractProcessStep *bs) :
- BuildStep(bsl, bs), m_ignoreReturnValue(bs->m_ignoreReturnValue)
-{ }
-
/*!
Deletes all existing output parsers and starts a new chain with the
given parser.
diff --git a/src/plugins/projectexplorer/abstractprocessstep.h b/src/plugins/projectexplorer/abstractprocessstep.h
index d94734469a..1117996506 100644
--- a/src/plugins/projectexplorer/abstractprocessstep.h
+++ b/src/plugins/projectexplorer/abstractprocessstep.h
@@ -65,7 +65,6 @@ public:
protected:
AbstractProcessStep(BuildStepList *bsl, Core::Id id);
- AbstractProcessStep(BuildStepList *bsl, AbstractProcessStep *bs);
virtual void processStarted();
virtual void processFinished(int exitCode, QProcess::ExitStatus status);
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index 44f883f454..b1556595de 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -25,6 +25,7 @@
#include "buildconfiguration.h"
+#include "buildinfo.h"
#include "buildsteplist.h"
#include "projectexplorer.h"
#include "kitmanager.h"
@@ -43,6 +44,8 @@
#include <utils/qtcassert.h>
#include <utils/macroexpander.h>
#include <utils/algorithm.h>
+#include <utils/mimetypes/mimetype.h>
+#include <utils/mimetypes/mimedatabase.h>
#include <QDebug>
@@ -54,57 +57,13 @@ static const char BUILDDIRECTORY_KEY[] = "ProjectExplorer.BuildConfiguration.Bui
namespace ProjectExplorer {
-BuildConfiguration::BuildConfiguration(Target *target, Core::Id id) :
- ProjectConfiguration(target),
- m_clearSystemEnvironment(false)
-{
- initialize(id);
- Q_ASSERT(target);
- auto bsl = new BuildStepList(this, Core::Id(Constants::BUILDSTEPS_BUILD));
- //: Display name of the build build step list. Used as part of the labels in the project window.
- bsl->setDefaultDisplayName(tr("Build"));
- m_stepLists.append(bsl);
- bsl = new BuildStepList(this, Core::Id(Constants::BUILDSTEPS_CLEAN));
- //: Display name of the clean build step list. Used as part of the labels in the project window.
- bsl->setDefaultDisplayName(tr("Clean"));
- m_stepLists.append(bsl);
-
- updateCacheAndEmitEnvironmentChanged();
-
- connect(target, &Target::kitChanged,
- this, &BuildConfiguration::handleKitUpdate);
- connect(this, &BuildConfiguration::environmentChanged,
- this, &BuildConfiguration::emitBuildDirectoryChanged);
-
- ctor();
-}
-
-BuildConfiguration::BuildConfiguration(Target *target, BuildConfiguration *source) :
- ProjectConfiguration(target),
- m_clearSystemEnvironment(source->m_clearSystemEnvironment),
- m_userEnvironmentChanges(source->m_userEnvironmentChanges),
- m_buildDirectory(source->m_buildDirectory)
-{
- copyFrom(source);
- Q_ASSERT(target);
- // Do not clone stepLists here, do that in the derived constructor instead
- // otherwise BuildStepFactories might reject to set up a BuildStep for us
- // since we are not yet the derived class!
-
- updateCacheAndEmitEnvironmentChanged();
-
- connect(target, &Target::kitChanged,
- this, &BuildConfiguration::handleKitUpdate);
-
- ctor();
-}
-
-void BuildConfiguration::ctor()
+BuildConfiguration::BuildConfiguration(Target *target, Core::Id id)
+ : ProjectConfiguration(target, id)
{
Utils::MacroExpander *expander = macroExpander();
expander->setDisplayName(tr("Build Settings"));
expander->setAccumulating(true);
- expander->registerSubProvider([this] { return target()->macroExpander(); });
+ expander->registerSubProvider([target] { return target->macroExpander(); });
expander->registerVariable("buildDir", tr("Build directory"),
[this] { return buildDirectory().toUserOutput(); });
@@ -115,6 +74,12 @@ void BuildConfiguration::ctor()
expander->registerPrefix(Constants::VAR_CURRENTBUILD_ENV,
tr("Variables in the current build environment"),
[this](const QString &var) { return environment().value(var); });
+
+ updateCacheAndEmitEnvironmentChanged();
+ connect(target, &Target::kitChanged,
+ this, &BuildConfiguration::handleKitUpdate);
+ connect(this, &BuildConfiguration::environmentChanged,
+ this, &BuildConfiguration::emitBuildDirectoryChanged);
}
Utils::FileName BuildConfiguration::buildDirectory() const
@@ -136,6 +101,16 @@ void BuildConfiguration::setBuildDirectory(const Utils::FileName &dir)
emitBuildDirectoryChanged();
}
+void BuildConfiguration::initialize(const BuildInfo *info)
+{
+ setDisplayName(info->displayName);
+ setDefaultDisplayName(info->displayName);
+ setBuildDirectory(info->buildDirectory);
+
+ m_stepLists.append(new BuildStepList(this, Constants::BUILDSTEPS_BUILD));
+ m_stepLists.append(new BuildStepList(this, Constants::BUILDSTEPS_CLEAN));
+}
+
QList<NamedWidget *> BuildConfiguration::createSubConfigWidgets()
{
return QList<NamedWidget *>() << new BuildEnvironmentWidget(this);
@@ -183,16 +158,12 @@ bool BuildConfiguration::fromMap(const QVariantMap &map)
qWarning() << "No data for build step list" << i << "found!";
continue;
}
- auto list = new BuildStepList(this, Core::Id());
+ auto list = new BuildStepList(this, idFromMap(data));
if (!list->fromMap(data)) {
qWarning() << "Failed to restore build step list" << i;
delete list;
return false;
}
- if (list->id() == Constants::BUILDSTEPS_BUILD)
- list->setDefaultDisplayName(tr("Build"));
- else if (list->id() == Constants::BUILDSTEPS_CLEAN)
- list->setDefaultDisplayName(tr("Clean"));
m_stepLists.append(list);
}
@@ -290,19 +261,6 @@ void BuildConfiguration::setUserEnvironmentChanges(const QList<Utils::Environmen
updateCacheAndEmitEnvironmentChanged();
}
-void BuildConfiguration::cloneSteps(BuildConfiguration *source)
-{
- if (source == this)
- return;
- qDeleteAll(m_stepLists);
- m_stepLists.clear();
- foreach (BuildStepList *bsl, source->m_stepLists) {
- auto newBsl = new BuildStepList(this, bsl);
- newBsl->cloneSteps(bsl);
- m_stepLists.append(newBsl);
- }
-}
-
bool BuildConfiguration::isEnabled() const
{
return true;
@@ -360,12 +318,18 @@ void BuildConfiguration::prependCompilerPathToEnvironment(Kit *k, Utils::Environ
// IBuildConfigurationFactory
///
-IBuildConfigurationFactory::IBuildConfigurationFactory(QObject *parent) :
- QObject(parent)
-{ }
+int IBuildConfigurationFactory::priority(const Target *parent) const
+{
+ return canHandle(parent) ? 0 : -1;
+}
-IBuildConfigurationFactory::~IBuildConfigurationFactory()
-{ }
+int IBuildConfigurationFactory::priority(const Kit *k, const QString &projectPath) const
+{
+ QTC_ASSERT(!m_supportedProjectMimeTypeName.isEmpty(), return -1);
+ if (k && Utils::mimeTypeForFile(projectPath).matchesName(m_supportedProjectMimeTypeName))
+ return 0;
+ return -1;
+}
// restore
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, const QVariantMap &map)
@@ -442,4 +406,89 @@ IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, Bui
}
return factory;
}
+
+void IBuildConfigurationFactory::setSupportedProjectType(Core::Id id)
+{
+ m_supportedProjectType = id;
+}
+
+void IBuildConfigurationFactory::setSupportedProjectMimeTypeName(const QString &mimeTypeName)
+{
+ m_supportedProjectMimeTypeName = mimeTypeName;
+}
+
+void IBuildConfigurationFactory::setSupportedTargetDeviceTypes(const QList<Core::Id> &ids)
+{
+ m_supportedTargetDeviceTypes = ids;
+}
+
+bool IBuildConfigurationFactory::canHandle(const Target *target) const
+{
+ if (m_supportedProjectType.isValid() && m_supportedProjectType != target->project()->id())
+ return false;
+
+ if (!target->project()->supportsKit(target->kit()))
+ return false;
+
+ if (!m_supportedTargetDeviceTypes.isEmpty())
+ if (!m_supportedTargetDeviceTypes.contains(
+ DeviceTypeKitInformation::deviceTypeId(target->kit())))
+ return false;
+
+ return true;
+}
+
+BuildConfiguration *IBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
+{
+ if (!canHandle(parent))
+ return nullptr;
+ QTC_ASSERT(m_creator, return nullptr);
+ BuildConfiguration *bc = m_creator(parent);
+ if (!bc)
+ return nullptr;
+ bc->initialize(info);
+ return bc;
+}
+
+bool IBuildConfigurationFactory::canClone(const Target *parent, BuildConfiguration *product) const
+{
+ if (!canHandle(parent))
+ return false;
+ const Core::Id id = product->id();
+ return id == m_buildConfigId;
+}
+
+BuildConfiguration *IBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
+{
+ if (!canRestore(parent, map))
+ return nullptr;
+ QTC_ASSERT(m_creator, return nullptr);
+ BuildConfiguration *bc = m_creator(parent);
+ QTC_ASSERT(bc, return nullptr);
+ if (!bc->fromMap(map)) {
+ delete bc;
+ bc = nullptr;
+ }
+ return bc;
+}
+
+bool IBuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const
+{
+ if (!canHandle(parent))
+ return false;
+ const Core::Id id = idFromMap(map);
+ return id.name().startsWith(m_buildConfigId.name());
+}
+
+BuildConfiguration *IBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *product)
+{
+ QTC_ASSERT(m_creator, return nullptr);
+ if (!canClone(parent, product))
+ return nullptr;
+ BuildConfiguration *bc = m_creator(parent);
+ QVariantMap data = product->toMap();
+ bc->fromMap(data);
+ return bc;
+}
+
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index 08307eae58..3bc718fd51 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -33,7 +33,6 @@
namespace ProjectExplorer {
-class BuildConfiguration;
class BuildInfo;
class NamedWidget;
class BuildStepList;
@@ -45,9 +44,11 @@ class PROJECTEXPLORER_EXPORT BuildConfiguration : public ProjectConfiguration
{
Q_OBJECT
-public:
- // ctors are protected
+protected:
+ friend class IBuildConfigurationFactory;
+ explicit BuildConfiguration(Target *target, Core::Id id);
+public:
Utils::FileName buildDirectory() const;
Utils::FileName rawBuildDirectory() const;
void setBuildDirectory(const Utils::FileName &dir);
@@ -100,19 +101,14 @@ signals:
void buildTypeChanged();
protected:
- BuildConfiguration(Target *target, Core::Id id);
- BuildConfiguration(Target *target, BuildConfiguration *source);
-
- void cloneSteps(BuildConfiguration *source);
+ virtual void initialize(const BuildInfo *info);
void updateCacheAndEmitEnvironmentChanged();
private:
void handleKitUpdate();
void emitBuildDirectoryChanged();
- void ctor();
-
- bool m_clearSystemEnvironment;
+ bool m_clearSystemEnvironment = false;
QList<Utils::EnvironmentItem> m_userEnvironmentChanges;
QList<BuildStepList *> m_stepLists;
Utils::FileName m_buildDirectory;
@@ -124,37 +120,62 @@ class PROJECTEXPLORER_EXPORT IBuildConfigurationFactory : public QObject
{
Q_OBJECT
-public:
- explicit IBuildConfigurationFactory(QObject *parent = nullptr);
- ~IBuildConfigurationFactory() override;
+protected:
+ IBuildConfigurationFactory() = default;
+public:
// The priority is negative if this factory can not create anything for the target.
// It is 0 for the "default" factory that wants to handle the target.
// Add 100 for each specialization.
- virtual int priority(const Target *parent) const = 0;
+ virtual int priority(const Target *parent) const;
// List of build information that can be used to create a new build configuration via
// "Add Build Configuration" button.
virtual QList<BuildInfo *> availableBuilds(const Target *parent) const = 0;
- virtual int priority(const Kit *k, const QString &projectPath) const = 0;
+ virtual int priority(const Kit *k, const QString &projectPath) const;
// List of build information that can be used to initially set up a new build configuration.
virtual QList<BuildInfo *> availableSetups(const Kit *k, const QString &projectPath) const = 0;
- virtual BuildConfiguration *create(Target *parent, const BuildInfo *info) const = 0;
+ BuildConfiguration *create(Target *parent, const BuildInfo *info) const;
// used to recreate the runConfigurations when restoring settings
- virtual bool canRestore(const Target *parent, const QVariantMap &map) const = 0;
- virtual BuildConfiguration *restore(Target *parent, const QVariantMap &map) = 0;
- virtual bool canClone(const Target *parent, BuildConfiguration *product) const = 0;
- virtual BuildConfiguration *clone(Target *parent, BuildConfiguration *product) = 0;
+ bool canRestore(const Target *parent, const QVariantMap &map) const;
+ BuildConfiguration *restore(Target *parent, const QVariantMap &map);
+ bool canClone(const Target *parent, BuildConfiguration *product) const;
+ BuildConfiguration *clone(Target *parent, BuildConfiguration *product);
static IBuildConfigurationFactory *find(Target *parent, const QVariantMap &map);
static IBuildConfigurationFactory *find(const Kit *k, const QString &projectPath);
static IBuildConfigurationFactory *find(Target *parent);
static IBuildConfigurationFactory *find(Target *parent, BuildConfiguration *bc);
+ virtual bool canHandle(const ProjectExplorer::Target *t) const;
+
+protected:
+ void setSupportedProjectType(Core::Id id);
+ void setSupportedProjectMimeTypeName(const QString &mimeTypeName);
+ void setSupportedTargetDeviceTypes(const QList<Core::Id> &ids);
+ void setDefaultDisplayName(const QString &defaultDisplayName);
+
+ using BuildConfigurationCreator = std::function<BuildConfiguration *(Target *)>;
+
+ template <class BuildConfig>
+ void registerBuildConfiguration(Core::Id buildConfigId)
+ {
+ setObjectName(buildConfigId.toString() + "BuildConfigurationFactory");
+ m_creator = [](Target *t) { return new BuildConfig(t); };
+ m_buildConfigId = buildConfigId;
+ }
+
signals:
void availableCreationIdsChanged();
+
+private:
+ BuildConfigurationCreator m_creator;
+ Core::Id m_buildConfigId;
+ Core::Id m_supportedProjectType;
+ QList<Core::Id> m_supportedTargetDeviceTypes;
+ QString m_supportedProjectMimeTypeName;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp
index 40c31f0c9f..ff2bf2bf3f 100644
--- a/src/plugins/projectexplorer/buildstep.cpp
+++ b/src/plugins/projectexplorer/buildstep.cpp
@@ -28,9 +28,12 @@
#include "buildconfiguration.h"
#include "buildsteplist.h"
#include "deployconfiguration.h"
+#include "kitinformation.h"
+#include "project.h"
#include "target.h"
#include <utils/algorithm.h>
+#include <utils/qtcassert.h>
/*!
\class ProjectExplorer::BuildStep
@@ -109,26 +112,10 @@
static const char buildStepEnabledKey[] = "ProjectExplorer.BuildStep.Enabled";
-using namespace ProjectExplorer;
+namespace ProjectExplorer {
BuildStep::BuildStep(BuildStepList *bsl, Core::Id id) :
- ProjectConfiguration(bsl), m_enabled(true)
-{
- initialize(id);
- Q_ASSERT(bsl);
- ctor();
-}
-
-BuildStep::BuildStep(BuildStepList *bsl, BuildStep *bs) :
- ProjectConfiguration(bsl), m_enabled(bs->m_enabled)
-{
- copyFrom(bs);
- Q_ASSERT(bsl);
- setDisplayName(bs->displayName());
- ctor();
-}
-
-void BuildStep::ctor()
+ ProjectConfiguration(bsl, id)
{
Utils::MacroExpander *expander = macroExpander();
expander->setDisplayName(tr("Build Step"));
@@ -225,17 +212,133 @@ bool BuildStep::enabled() const
return m_enabled;
}
-IBuildStepFactory::IBuildStepFactory(QObject *parent) :
- QObject(parent)
+BuildStepFactory::BuildStepFactory()
{ }
-BuildStep *IBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
+bool BuildStepFactory::canHandle(BuildStepList *bsl) const
+{
+ if (!m_supportedStepLists.isEmpty() && !m_supportedStepLists.contains(bsl->id()))
+ return false;
+
+ auto config = qobject_cast<ProjectConfiguration *>(bsl->parent());
+
+ if (!m_supportedDeviceTypes.isEmpty()) {
+ Target *target = bsl->target();
+ QTC_ASSERT(target, return false);
+ Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(target->kit());
+ if (!m_supportedDeviceTypes.contains(deviceType))
+ return false;
+ }
+
+ if (m_supportedProjectType.isValid()) {
+ if (!config)
+ return false;
+ Core::Id projectId = config->project()->id();
+ if (projectId != m_supportedProjectType)
+ return false;
+ }
+
+ if (!m_isRepeatable && bsl->contains(m_info.id))
+ return false;
+
+ if (m_supportedConfiguration.isValid()) {
+ if (!config)
+ return false;
+ Core::Id configId = config->id();
+ if (configId != m_supportedConfiguration)
+ return false;
+ }
+
+ return true;
+}
+
+void BuildStepFactory::setDisplayName(const QString &displayName)
+{
+ m_info.displayName = displayName;
+}
+
+void BuildStepFactory::setFlags(BuildStepInfo::Flags flags)
+{
+ m_info.flags = flags;
+}
+
+void BuildStepFactory::setSupportedStepList(Core::Id id)
+{
+ m_supportedStepLists = {id};
+}
+
+void BuildStepFactory::setSupportedStepLists(const QList<Core::Id> &ids)
+{
+ m_supportedStepLists = ids;
+}
+
+void BuildStepFactory::setSupportedConfiguration(Core::Id id)
+{
+ m_supportedConfiguration = id;
+}
+
+void BuildStepFactory::setSupportedProjectType(Core::Id id)
+{
+ m_supportedProjectType = id;
+}
+
+void BuildStepFactory::setSupportedDeviceType(Core::Id id)
+{
+ m_supportedDeviceTypes = {id};
+}
+
+void BuildStepFactory::setSupportedDeviceTypes(const QList<Core::Id> &ids)
+{
+ m_supportedDeviceTypes = ids;
+}
+
+BuildStepInfo BuildStepFactory::stepInfo() const
+{
+ return m_info;
+}
+
+Core::Id BuildStepFactory::stepId() const
+{
+ return m_info.id;
+}
+
+BuildStep *BuildStepFactory::create(BuildStepList *parent, Core::Id id)
+{
+ BuildStep *bs = nullptr;
+ if (id == m_info.id)
+ bs = m_info.creator(parent);
+ return bs;
+}
+
+BuildStep *BuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
+{
+ BuildStep *bs = m_info.creator(parent);
+ if (!bs)
+ return nullptr;
+ if (!bs->fromMap(map)) {
+ QTC_CHECK(false);
+ delete bs;
+ return nullptr;
+ }
+ return bs;
+}
+
+BuildStep *BuildStepFactory::clone(BuildStepList *parent, BuildStep *product)
{
- const Core::Id id = idFromMap(map);
- BuildStep *bs = create(parent, id);
- if (bs->fromMap(map))
- return bs;
- delete bs;
- return nullptr;
+ if ((m_info.flags & BuildStepInfo::Unclonable) != 0)
+ return nullptr;
+ if (m_info.id != product->id())
+ return nullptr;
+ BuildStep *bs = m_info.creator(parent);
+ if (!bs)
+ return nullptr;
+ const QVariantMap map = product->toMap();
+ if (!bs->fromMap(map)) {
+ QTC_CHECK(false);
+ delete bs;
+ return nullptr;
+ }
+ return bs;
}
+} // ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h
index 2fe6ee1960..adc9192060 100644
--- a/src/plugins/projectexplorer/buildstep.h
+++ b/src/plugins/projectexplorer/buildstep.h
@@ -28,17 +28,20 @@
#include "projectconfiguration.h"
#include "projectexplorer_export.h"
+#include <utils/qtcassert.h>
+
#include <QFutureInterface>
#include <QWidget>
namespace ProjectExplorer {
-class Task;
+
class BuildConfiguration;
+class BuildStepConfigWidget;
+class BuildStepFactory;
class BuildStepList;
class DeployConfiguration;
class Target;
-
-class BuildStepConfigWidget;
+class Task;
// Documentation inside.
class PROJECTEXPLORER_EXPORT BuildStep : public ProjectConfiguration
@@ -46,14 +49,12 @@ class PROJECTEXPLORER_EXPORT BuildStep : public ProjectConfiguration
Q_OBJECT
protected:
- BuildStep(BuildStepList *bsl, Core::Id id);
- BuildStep(BuildStepList *bsl, BuildStep *bs);
+ friend class BuildStepFactory;
+ explicit BuildStep(BuildStepList *bsl, Core::Id id);
public:
virtual bool init(QList<const BuildStep *> &earlierSteps) = 0;
-
virtual void run(QFutureInterface<bool> &fi) = 0;
-
virtual BuildStepConfigWidget *createConfigWidget() = 0;
virtual bool immutable() const;
@@ -97,8 +98,6 @@ signals:
void enabledChanged();
private:
- void ctor();
-
bool m_enabled = true;
};
@@ -111,27 +110,58 @@ public:
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)
- {}
+ using BuildStepCreator = std::function<BuildStep *(BuildStepList *)>;
Core::Id id;
QString displayName;
Flags flags = Flags();
+ BuildStepCreator creator;
};
-class PROJECTEXPLORER_EXPORT IBuildStepFactory : public QObject
+class PROJECTEXPLORER_EXPORT BuildStepFactory : public QObject
{
Q_OBJECT
public:
- explicit IBuildStepFactory(QObject *parent = nullptr);
+ BuildStepFactory();
+
+ BuildStepInfo stepInfo() const;
+ Core::Id stepId() const;
+ BuildStep *create(BuildStepList *parent, Core::Id id);
+ BuildStep *restore(BuildStepList *parent, const QVariantMap &map);
+ BuildStep *clone(BuildStepList *parent, BuildStep *product);
+
+ virtual bool canHandle(BuildStepList *bsl) const;
+
+protected:
+ using BuildStepCreator = std::function<BuildStep *(BuildStepList *)>;
+
+ template <class BuildStepType>
+ void registerStep(Core::Id id)
+ {
+ QTC_CHECK(!m_info.creator);
+ m_info.id = id;
+ m_info.creator = [](BuildStepList *bsl) { return new BuildStepType(bsl); };
+ }
+
+ void setSupportedStepList(Core::Id id);
+ void setSupportedStepLists(const QList<Core::Id> &ids);
+ void setSupportedConfiguration(Core::Id id);
+ void setSupportedProjectType(Core::Id id);
+ void setSupportedDeviceType(Core::Id id);
+ void setSupportedDeviceTypes(const QList<Core::Id> &ids);
+ void setRepeatable(bool on) { m_isRepeatable = on; }
+ void setDisplayName(const QString &displayName);
+ void setFlags(BuildStepInfo::Flags flags);
+
+private:
+ BuildStepInfo m_info;
- virtual QList<BuildStepInfo> availableSteps(BuildStepList *parent) const = 0;
- virtual BuildStep *create(BuildStepList *parent, Core::Id id) = 0;
- virtual BuildStep *restore(BuildStepList *parent, const QVariantMap &map);
- virtual BuildStep *clone(BuildStepList *parent, BuildStep *product) = 0;
+ Core::Id m_supportedProjectType;
+ QList<Core::Id> m_supportedDeviceTypes;
+ QList<Core::Id> m_supportedStepLists;
+ Core::Id m_supportedConfiguration;
+ bool m_isRepeatable = true;
};
class PROJECTEXPLORER_EXPORT BuildStepConfigWidget : public QWidget
diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp
index 0cb7e618a5..1d1ffab0d6 100644
--- a/src/plugins/projectexplorer/buildsteplist.cpp
+++ b/src/plugins/projectexplorer/buildsteplist.cpp
@@ -44,27 +44,27 @@ const char STEPS_PREFIX[] = "ProjectExplorer.BuildStepList.Step.";
} // namespace
-BuildStepList::BuildStepList(QObject *parent, Core::Id id) :
- ProjectConfiguration(parent)
-{
- Q_ASSERT(parent);
- initialize(id);
+BuildStepList::BuildStepList(QObject *parent, Core::Id id)
+ : ProjectConfiguration(parent, id)
+{
+ if (id == Constants::BUILDSTEPS_BUILD) {
+ //: Display name of the clean build step list. Used as part of the labels in the project window.
+ setDefaultDisplayName(tr("Build"));
+ } else if (id == Constants::BUILDSTEPS_CLEAN) {
+ //: Display name of the build build step list. Used as part of the labels in the project window.
+ setDefaultDisplayName(tr("Clean"));
+ }
}
-BuildStepList::BuildStepList(QObject *parent, BuildStepList *source) :
- ProjectConfiguration(parent)
+BuildStepList::~BuildStepList()
{
- copyFrom(source);
- setDisplayName(source->displayName());
- Q_ASSERT(parent);
- // do not clone the steps here:
- // The BC is not fully set up yet and thus some of the buildstepfactories
- // will fail to clone the buildsteps!
+ clear();
}
-BuildStepList::~BuildStepList()
+void BuildStepList::clear()
{
qDeleteAll(m_steps);
+ m_steps.clear();
}
QVariantMap BuildStepList::toMap() const
@@ -95,29 +95,6 @@ bool BuildStepList::contains(Core::Id id) const
});
}
-void BuildStepList::cloneSteps(BuildStepList *source)
-{
- Q_ASSERT(source);
- const QList<IBuildStepFactory *> factories
- = ExtensionSystem::PluginManager::getObjects<IBuildStepFactory>();
- foreach (BuildStep *originalbs, source->steps()) {
- foreach (IBuildStepFactory *factory, factories) {
- const QList<BuildStepInfo> 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).";
- }
- }
- }
-}
-
bool BuildStepList::isActive() const
{
return qobject_cast<ProjectConfiguration *>(parent())->isActive();
@@ -125,12 +102,14 @@ bool BuildStepList::isActive() const
bool BuildStepList::fromMap(const QVariantMap &map)
{
+ clear();
+
// We need the ID set before trying to restore the steps!
if (!ProjectConfiguration::fromMap(map))
return false;
- const QList<IBuildStepFactory *> factories
- = ExtensionSystem::PluginManager::getObjects<IBuildStepFactory>();
+ const QList<BuildStepFactory *> factories
+ = ExtensionSystem::PluginManager::getObjects<BuildStepFactory>();
int maxSteps = map.value(QString::fromLatin1(STEPS_COUNT_KEY), 0).toInt();
for (int i = 0; i < maxSteps; ++i) {
@@ -139,17 +118,21 @@ bool BuildStepList::fromMap(const QVariantMap &map)
qWarning() << "No step data found for" << i << "(continuing).";
continue;
}
- foreach (IBuildStepFactory *factory, factories) {
- const QList<BuildStepInfo> 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;
+ bool handled = false;
+ Core::Id stepId = idFromMap(bsData);
+ for (BuildStepFactory *factory : factories) {
+ if (factory->stepId() == stepId) {
+ if (factory->canHandle(this)) {
+ if (BuildStep *bs = factory->restore(this, bsData)) {
+ appendStep(bs);
+ handled = true;
+ } else {
+ qWarning() << "Restoration of step" << i << "failed (continuing).";
+ }
}
- qWarning() << "Restoration of step" << i << "failed (continuing).";
}
}
+ QTC_CHECK(handled);
}
return true;
}
diff --git a/src/plugins/projectexplorer/buildsteplist.h b/src/plugins/projectexplorer/buildsteplist.h
index 8a1c6659bc..80ef5e5310 100644
--- a/src/plugins/projectexplorer/buildsteplist.h
+++ b/src/plugins/projectexplorer/buildsteplist.h
@@ -41,10 +41,11 @@ class PROJECTEXPLORER_EXPORT BuildStepList : public ProjectConfiguration
Q_OBJECT
public:
- BuildStepList(QObject *parent, Core::Id id);
- BuildStepList(QObject *parent, BuildStepList *source);
+ explicit BuildStepList(QObject *parent, Core::Id id);
~BuildStepList() override;
+ void clear();
+
QList<BuildStep *> steps() const;
QList<BuildStep *> steps(const std::function<bool(const BuildStep *)> &filter) const;
template <class BS> BS *firstOfType() {
@@ -82,7 +83,6 @@ public:
virtual QVariantMap toMap() const override;
virtual bool fromMap(const QVariantMap &map) override;
- void cloneSteps(BuildStepList *source);
bool isActive() const override;
diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp
index 64610a7b3e..d835b3f609 100644
--- a/src/plugins/projectexplorer/buildstepspage.cpp
+++ b/src/plugins/projectexplorer/buildstepspage.cpp
@@ -286,12 +286,12 @@ void BuildStepListWidget::init(BuildStepList *bsl)
void BuildStepListWidget::updateAddBuildStepMenu()
{
- QMap<QString, QPair<Core::Id, IBuildStepFactory *> > map;
+ QMap<QString, QPair<Core::Id, BuildStepFactory *> > map;
//Build up a list of possible steps and save map the display names to the (internal) name and factories.
- QList<IBuildStepFactory *> factories = ExtensionSystem::PluginManager::getObjects<IBuildStepFactory>();
- foreach (IBuildStepFactory *factory, factories) {
- const QList<BuildStepInfo> infos = factory->availableSteps(m_buildStepList);
- for (const BuildStepInfo &info : infos) {
+ QList<BuildStepFactory *> factories = ExtensionSystem::PluginManager::getObjects<BuildStepFactory>();
+ foreach (BuildStepFactory *factory, factories) {
+ if (factory->canHandle(m_buildStepList)) {
+ const BuildStepInfo &info = factory->stepInfo();
if (info.flags & BuildStepInfo::Uncreatable)
continue;
if ((info.flags & BuildStepInfo::UniqueStep) && m_buildStepList->contains(info.id))
@@ -304,11 +304,11 @@ void BuildStepListWidget::updateAddBuildStepMenu()
QMenu *menu = m_addButton->menu();
menu->clear();
if (!map.isEmpty()) {
- QMap<QString, QPair<Core::Id, IBuildStepFactory *> >::const_iterator it, end;
+ QMap<QString, QPair<Core::Id, BuildStepFactory *> >::const_iterator it, end;
end = map.constEnd();
for (it = map.constBegin(); it != end; ++it) {
QAction *action = menu->addAction(it.key());
- IBuildStepFactory *factory = it.value().second;
+ BuildStepFactory *factory = it.value().second;
Core::Id id = it.value().first;
connect(action, &QAction::triggered, [id, factory, this]() {
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 7f357fc774..3e732af2e4 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -83,24 +83,13 @@ private:
};
CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, CUSTOM_EXECUTABLE_ID)
{
addExtraAspect(new LocalEnvironmentAspect(this, LocalEnvironmentAspect::BaseEnvironmentModifier()));
addExtraAspect(new ArgumentsAspect(this, "ProjectExplorer.CustomExecutableRunConfiguration.Arguments"));
addExtraAspect(new TerminalAspect(this, "ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal"));
}
-void CustomExecutableRunConfiguration::initialize(Core::Id)
-{
- RunConfiguration::initialize(CUSTOM_EXECUTABLE_ID);
- if (target()->activeBuildConfiguration())
- m_workingDirectory = Constants::DEFAULT_WORKING_DIR;
- else
- m_workingDirectory = Constants::DEFAULT_WORKING_DIR_ALTERNATE;
-
- setDefaultDisplayName(defaultDisplayName());
-}
-
// Note: Qt4Project deletes all empty customexecrunconfigs for which isConfigured() == false.
CustomExecutableRunConfiguration::~CustomExecutableRunConfiguration()
{
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
index 483954e7af..925af00358 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
@@ -65,14 +65,10 @@ public:
signals:
void changed();
-protected:
- void initialize(Core::Id) override;
+private:
bool fromMap(const QVariantMap &map) override;
QString defaultDisplayName() const;
-private:
- void ctor();
-
void configurationDialogFinished();
void setExecutable(const QString &executable);
QString rawExecutable() const;
diff --git a/src/plugins/projectexplorer/deployconfiguration.cpp b/src/plugins/projectexplorer/deployconfiguration.cpp
index 6f44d135b1..1c3967442d 100644
--- a/src/plugins/projectexplorer/deployconfiguration.cpp
+++ b/src/plugins/projectexplorer/deployconfiguration.cpp
@@ -34,62 +34,51 @@
#include <extensionsystem/pluginmanager.h>
+#include <utils/algorithm.h>
+
namespace ProjectExplorer {
const char BUILD_STEP_LIST_COUNT[] = "ProjectExplorer.BuildConfiguration.BuildStepListCount";
const char BUILD_STEP_LIST_PREFIX[] = "ProjectExplorer.BuildConfiguration.BuildStepList.";
const char DEFAULT_DEPLOYCONFIGURATION_ID[] = "ProjectExplorer.DefaultDeployConfiguration";
-DeployConfiguration::DeployConfiguration(Target *target, Core::Id id) :
- ProjectConfiguration(target)
+DeployConfiguration::DeployConfiguration(Target *target, Core::Id id)
+ : ProjectConfiguration(target, id),
+ m_stepList(this, Constants::BUILDSTEPS_DEPLOY)
{
- ProjectConfiguration::initialize(id);
- Q_ASSERT(target);
- m_stepList = new BuildStepList(this, Core::Id(Constants::BUILDSTEPS_DEPLOY));
+ Utils::MacroExpander *expander = macroExpander();
+ expander->setDisplayName(tr("Deploy Settings"));
+ expander->setAccumulating(true);
+ expander->registerSubProvider([target] {
+ BuildConfiguration *bc = target->activeBuildConfiguration();
+ return bc ? bc->macroExpander() : target->macroExpander();
+ });
+
//: Display name of the deploy build step list. Used as part of the labels in the project window.
- m_stepList->setDefaultDisplayName(tr("Deploy"));
+ m_stepList.setDefaultDisplayName(tr("Deploy"));
//: Default DeployConfiguration display name
setDefaultDisplayName(tr("Deploy locally"));
- ctor();
}
-DeployConfiguration::DeployConfiguration(Target *target, DeployConfiguration *source) :
- ProjectConfiguration(target)
+void DeployConfiguration::initialize()
{
- ProjectConfiguration::copyFrom(source);
- Q_ASSERT(target);
- // Do not clone stepLists here, do that in the derived constructor instead
- // otherwise BuildStepFactories might reject to set up a BuildStep for us
- // since we are not yet the derived class!
- ctor();
}
-void DeployConfiguration::ctor()
+BuildStepList *DeployConfiguration::stepList()
{
- Utils::MacroExpander *expander = macroExpander();
- expander->setDisplayName(tr("Deploy Settings"));
- expander->setAccumulating(true);
- expander->registerSubProvider([this]() -> Utils::MacroExpander * {
- BuildConfiguration *bc = target()->activeBuildConfiguration();
- return bc ? bc->macroExpander() : target()->macroExpander();
- });
+ return &m_stepList;
}
-DeployConfiguration::~DeployConfiguration()
+const BuildStepList *DeployConfiguration::stepList() const
{
- delete m_stepList;
-}
-
-BuildStepList *DeployConfiguration::stepList() const
-{
- return m_stepList;
+ return &m_stepList;
}
QVariantMap DeployConfiguration::toMap() const
{
QVariantMap map(ProjectConfiguration::toMap());
map.insert(QLatin1String(BUILD_STEP_LIST_COUNT), 1);
- map.insert(QLatin1String(BUILD_STEP_LIST_PREFIX) + QLatin1Char('0'), m_stepList->toMap());
+ map.insert(QLatin1String(BUILD_STEP_LIST_PREFIX) + QLatin1Char('0'), m_stepList.toMap());
return map;
}
@@ -118,23 +107,18 @@ bool DeployConfiguration::fromMap(const QVariantMap &map)
return false;
QVariantMap data = map.value(QLatin1String(BUILD_STEP_LIST_PREFIX) + QLatin1Char('0')).toMap();
if (!data.isEmpty()) {
- delete m_stepList;
- m_stepList = new BuildStepList(this, Core::Id());
- if (!m_stepList->fromMap(data)) {
+ m_stepList.clear();
+ if (!m_stepList.fromMap(data)) {
qWarning() << "Failed to restore deploy step list";
- delete m_stepList;
- m_stepList = 0;
+ m_stepList.clear();
return false;
}
- m_stepList->setDefaultDisplayName(tr("Deploy"));
+ m_stepList.setDefaultDisplayName(tr("Deploy"));
} else {
qWarning() << "No data for deploy step list found!";
return false;
}
- // We assume that we hold the deploy list
- Q_ASSERT(m_stepList && m_stepList->id() == Constants::BUILDSTEPS_DEPLOY);
-
return true;
}
@@ -153,129 +137,185 @@ bool DeployConfiguration::isActive() const
return target()->isActive() && target()->activeDeployConfiguration() == this;
}
-void DeployConfiguration::cloneSteps(DeployConfiguration *source)
-{
- if (source == this)
- return;
- delete m_stepList;
- m_stepList = new BuildStepList(this, source->stepList());
- m_stepList->cloneSteps(source->stepList());
-}
///
-// DefaultDeployConfiguration
+// DeployConfigurationFactory
///
-DefaultDeployConfiguration::DefaultDeployConfiguration(Target *target, Core::Id id)
- : DeployConfiguration(target, id)
-{
-}
-
-DefaultDeployConfiguration::DefaultDeployConfiguration(Target *target, DeployConfiguration *source)
- : DeployConfiguration(target, source)
+DeployConfigurationFactory::DeployConfigurationFactory()
{
- cloneSteps(source);
+ setObjectName("DeployConfigurationFactory");
}
-///
-// DeployConfigurationFactory
-///
-
-DeployConfigurationFactory::DeployConfigurationFactory(QObject *parent) :
- QObject(parent)
-{ setObjectName(QLatin1String("DeployConfigurationFactory")); }
-
-DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, const QVariantMap &map)
+QList<Core::Id> DeployConfigurationFactory::availableCreationIds(Target *parent) const
{
- return ExtensionSystem::PluginManager::getObject<DeployConfigurationFactory>(
- [&parent, &map](DeployConfigurationFactory *factory) {
- return factory->canRestore(parent, map);
- });
+ if (!canHandle(parent))
+ return {};
+ return Utils::transform(availableBuildTargets(parent), [this](const QString &suffix) {
+ return m_deployConfigBaseId.withSuffix(suffix);
+ });
}
-QList<DeployConfigurationFactory *> DeployConfigurationFactory::find(Target *parent)
+QList<QString> DeployConfigurationFactory::availableBuildTargets(Target *) const
{
- return ExtensionSystem::PluginManager::getObjects<DeployConfigurationFactory>(
- [&parent](DeployConfigurationFactory *factory) {
- return !factory->availableCreationIds(parent).isEmpty();
- });
+ return {QString()};
}
-DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, DeployConfiguration *dc)
+QString DeployConfigurationFactory::displayNameForBuildTarget(const QString &) const
{
- return ExtensionSystem::PluginManager::getObject<DeployConfigurationFactory>(
- [&parent, &dc](DeployConfigurationFactory *factory) {
- return factory->canClone(parent, dc);
- });
+ return m_defaultDisplayName;
}
-///
-// DefaultDeployConfigurationFactory
-///
-
-QList<Core::Id> DefaultDeployConfigurationFactory::availableCreationIds(Target *parent) const
+QString DeployConfigurationFactory::displayNameForId(Core::Id id) const
{
- if (!canHandle(parent))
- return QList<Core::Id>();
- return QList<Core::Id>() << Core::Id(DEFAULT_DEPLOYCONFIGURATION_ID);
+ return displayNameForBuildTarget(id.suffixAfter(m_deployConfigBaseId));
}
-QString DefaultDeployConfigurationFactory::displayNameForId(Core::Id id) const
+bool DeployConfigurationFactory::canHandle(Target *target) const
{
- if (id == DEFAULT_DEPLOYCONFIGURATION_ID)
- //: Display name of the default deploy configuration
- return DeployConfigurationFactory::tr("Deploy Configuration");
- return QString();
+ if (m_supportedProjectType.isValid()) {
+ if (target->project()->id() != m_supportedProjectType)
+ return false;
+ }
+
+ if (!target->project()->supportsKit(target->kit()))
+ return false;
+
+ if (!m_supportedTargetDeviceTypes.isEmpty()) {
+ if (!m_supportedTargetDeviceTypes.contains(
+ DeviceTypeKitInformation::deviceTypeId(target->kit())))
+ return false;
+ }
+
+ return true;
}
-bool DefaultDeployConfigurationFactory::canCreate(Target *parent, Core::Id id) const
+bool DeployConfigurationFactory::canCreate(Target *parent, Core::Id id) const
{
if (!canHandle(parent))
return false;
- return id == DEFAULT_DEPLOYCONFIGURATION_ID;
+ if (!id.name().startsWith(m_deployConfigBaseId.name()))
+ return false;
+ return true;
}
-DeployConfiguration *DefaultDeployConfigurationFactory::create(Target *parent, Core::Id id)
+DeployConfiguration *DeployConfigurationFactory::create(Target *parent, Core::Id id)
{
if (!canCreate(parent, id))
return nullptr;
- return new DefaultDeployConfiguration(parent, id);
+ QTC_ASSERT(m_creator, return nullptr);
+ DeployConfiguration *dc = m_creator(parent);
+ if (!dc)
+ return nullptr;
+ dc->initialize();
+ return dc;
}
-bool DefaultDeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
+bool DeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *product) const
{
- return canCreate(parent, idFromMap(map));
+ if (!canHandle(parent))
+ return false;
+ const Core::Id id = product->id();
+ if (!id.name().startsWith(m_deployConfigBaseId.name()))
+ return false;
+ return true;
}
-DeployConfiguration *DefaultDeployConfigurationFactory::restore(Target *parent, const QVariantMap &map)
+DeployConfiguration *DeployConfigurationFactory::clone(Target *parent, DeployConfiguration *product)
+{
+ QTC_ASSERT(m_creator, return nullptr);
+ if (!canClone(parent, product))
+ return nullptr;
+ DeployConfiguration *dc = m_creator(parent);
+ QVariantMap data = product->toMap();
+ dc->fromMap(data);
+ return dc;
+}
+
+DeployConfiguration *DeployConfigurationFactory::restore(Target *parent, const QVariantMap &map)
{
if (!canRestore(parent, map))
return nullptr;
- auto dc = new DefaultDeployConfiguration(parent, idFromMap(map));
+ QTC_ASSERT(m_creator, return nullptr);
+ DeployConfiguration *dc = m_creator(parent);
+ QTC_ASSERT(dc, return nullptr);
if (!dc->fromMap(map)) {
delete dc;
- return nullptr;
+ dc = nullptr;
}
return dc;
}
-bool DefaultDeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *product) const
+bool DeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
{
- return canCreate(parent, product->id());
+ if (!canHandle(parent))
+ return false;
+ const Core::Id id = idFromMap(map);
+ return id.name().startsWith(m_deployConfigBaseId.name());
}
-DeployConfiguration *DefaultDeployConfigurationFactory::clone(Target *parent, DeployConfiguration *product)
+DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, const QVariantMap &map)
{
- if (!canClone(parent, product))
- return nullptr;
- return new DefaultDeployConfiguration(parent, product);
+ return ExtensionSystem::PluginManager::getObject<DeployConfigurationFactory>(
+ [&parent, &map](DeployConfigurationFactory *factory) {
+ return factory->canRestore(parent, map);
+ });
+}
+
+QList<DeployConfigurationFactory *> DeployConfigurationFactory::find(Target *parent)
+{
+ return ExtensionSystem::PluginManager::getObjects<DeployConfigurationFactory>(
+ [&parent](DeployConfigurationFactory *factory) {
+ return !factory->availableCreationIds(parent).isEmpty();
+ });
+}
+
+DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, DeployConfiguration *dc)
+{
+ return ExtensionSystem::PluginManager::getObject<DeployConfigurationFactory>(
+ [&parent, &dc](DeployConfigurationFactory *factory) {
+ return factory->canClone(parent, dc);
+ });
+}
+
+void DeployConfigurationFactory::setSupportedTargetDeviceTypes(const QList<Core::Id> &ids)
+{
+ m_supportedTargetDeviceTypes = ids;
+}
+
+void DeployConfigurationFactory::setDefaultDisplayName(const QString &defaultDisplayName)
+{
+ m_defaultDisplayName = defaultDisplayName;
+}
+
+void DeployConfigurationFactory::setSupportedProjectType(Core::Id id)
+{
+ m_supportedProjectType = id;
+}
+
+///
+// DefaultDeployConfigurationFactory
+///
+
+DefaultDeployConfigurationFactory::DefaultDeployConfigurationFactory()
+{
+ struct DefaultDeployConfiguration : DeployConfiguration
+ {
+ DefaultDeployConfiguration(Target *t)
+ : DeployConfiguration(t, DEFAULT_DEPLOYCONFIGURATION_ID)
+ {}
+ };
+
+ registerDeployConfiguration<DefaultDeployConfiguration>(DEFAULT_DEPLOYCONFIGURATION_ID);
+ setSupportedTargetDeviceTypes({Constants::DESKTOP_DEVICE_TYPE});
+ //: Display name of the default deploy configuration
+ setDefaultDisplayName(DeployConfigurationFactory::tr("Deploy Configuration"));
}
bool DefaultDeployConfigurationFactory::canHandle(Target *parent) const
{
- if (!parent->project()->supportsKit(parent->kit()) || parent->project()->needsSpecialDeployment())
- return false;
- return DeviceTypeKitInformation::deviceTypeId(parent->kit()) == Constants::DESKTOP_DEVICE_TYPE;
+ return DeployConfigurationFactory::canHandle(parent)
+ && !parent->project()->needsSpecialDeployment();
}
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/deployconfiguration.h b/src/plugins/projectexplorer/deployconfiguration.h
index db3b37c5c3..4e42e5e00f 100644
--- a/src/plugins/projectexplorer/deployconfiguration.h
+++ b/src/plugins/projectexplorer/deployconfiguration.h
@@ -27,12 +27,9 @@
#include "projectexplorer_export.h"
+#include "buildsteplist.h"
#include "projectconfiguration.h"
-#include <QString>
-
-QT_FORWARD_DECLARE_CLASS(QStringList)
-
namespace ProjectExplorer {
class BuildStepList;
@@ -44,11 +41,16 @@ class PROJECTEXPLORER_EXPORT DeployConfiguration : public ProjectConfiguration
{
Q_OBJECT
+protected:
+ friend class DeployConfigurationFactory;
+ explicit DeployConfiguration(Target *target, Core::Id id);
+
public:
- // ctors are protected
- ~DeployConfiguration() override;
+ ~DeployConfiguration() override = default;
+ virtual void initialize();
- BuildStepList *stepList() const;
+ BuildStepList *stepList();
+ const BuildStepList *stepList() const;
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
@@ -66,26 +68,8 @@ public:
signals:
void enabledChanged();
-protected:
- DeployConfiguration(Target *target, Core::Id id);
- DeployConfiguration(Target *target, DeployConfiguration *source);
-
- void cloneSteps(DeployConfiguration *source);
-
private:
- void ctor();
-
- BuildStepList *m_stepList = nullptr;
-};
-
-class PROJECTEXPLORER_EXPORT DefaultDeployConfiguration : public DeployConfiguration
-{
- Q_OBJECT
- friend class DefaultDeployConfigurationFactory; // for the ctors
-
-protected:
- DefaultDeployConfiguration(Target *target, Core::Id id);
- DefaultDeployConfiguration(Target *target, DeployConfiguration *source);
+ BuildStepList m_stepList;
};
class PROJECTEXPLORER_EXPORT DeployConfigurationFactory : public QObject
@@ -93,43 +77,66 @@ class PROJECTEXPLORER_EXPORT DeployConfigurationFactory : public QObject
Q_OBJECT
public:
- explicit DeployConfigurationFactory(QObject *parent = nullptr);
+ DeployConfigurationFactory();
// used to show the list of possible additons to a target, returns a list of types
- virtual QList<Core::Id> availableCreationIds(Target *parent) const = 0;
+ QList<Core::Id> availableCreationIds(Target *parent) const;
// used to translate the types to names to display to the user
- virtual QString displayNameForId(Core::Id id) const = 0;
+ QString displayNameForId(Core::Id id) const;
- virtual bool canCreate(Target *parent, Core::Id id) const = 0;
- virtual DeployConfiguration *create(Target *parent, Core::Id id) = 0;
+ virtual bool canHandle(ProjectExplorer::Target *target) const;
+
+ bool canCreate(Target *parent, Core::Id id) const;
+ virtual DeployConfiguration *create(Target *parent, Core::Id id);
// used to recreate the runConfigurations when restoring settings
- virtual bool canRestore(Target *parent, const QVariantMap &map) const = 0;
- virtual DeployConfiguration *restore(Target *parent, const QVariantMap &map) = 0;
- virtual bool canClone(Target *parent, DeployConfiguration *product) const = 0;
- virtual DeployConfiguration *clone(Target *parent, DeployConfiguration *product) = 0;
+ bool canRestore(Target *parent, const QVariantMap &map) const;
+ DeployConfiguration *restore(Target *parent, const QVariantMap &map);
+ bool canClone(Target *parent, DeployConfiguration *product) const;
+ DeployConfiguration *clone(Target *parent, DeployConfiguration *product);
static DeployConfigurationFactory *find(Target *parent, const QVariantMap &map);
static QList<DeployConfigurationFactory *> find(Target *parent);
static DeployConfigurationFactory *find(Target *parent, DeployConfiguration *dc);
+ void setSupportedTargetDeviceTypes(const QList<Core::Id> &ids);
+ void setDefaultDisplayName(const QString &defaultDisplayName);
+ void setSupportedProjectType(Core::Id id);
+
+protected:
+ virtual QList<QString> availableBuildTargets(Target *parent) const;
+ virtual QString displayNameForBuildTarget(const QString &buildTarget) const;
+
+ using DeployConfigurationCreator = std::function<DeployConfiguration *(Target *)>;
+
+ template <class DeployConfig>
+ void registerDeployConfiguration(Core::Id deployConfigBaseId)
+ {
+ m_creator = [this](Target *t) {
+ auto dc = new DeployConfig(t);
+ dc->setDefaultDisplayName(m_defaultDisplayName);
+ return dc;
+ };
+ m_deployConfigBaseId = deployConfigBaseId;
+ }
+
signals:
void availableCreationIdsChanged();
+
+private:
+ DeployConfigurationCreator m_creator;
+ Core::Id m_deployConfigBaseId;
+ Core::Id m_supportedProjectType;
+ QList<Core::Id> m_supportedTargetDeviceTypes;
+ QString m_defaultDisplayName;
};
class DefaultDeployConfigurationFactory : public DeployConfigurationFactory
{
public:
- QList<Core::Id> availableCreationIds(Target *parent) const override;
- // used to translate the types to names to display to the user
- QString displayNameForId(Core::Id id) const override;
- bool canCreate(Target *parent, Core::Id id) const override;
- DeployConfiguration *create(Target *parent, Core::Id id) override;
- bool canRestore(Target *parent, const QVariantMap &map) const override;
- DeployConfiguration *restore(Target *parent, const QVariantMap &map) override;
- bool canClone(Target *parent, DeployConfiguration *product) const override;
- DeployConfiguration *clone(Target *parent, DeployConfiguration *product) override;
+ DefaultDeployConfigurationFactory();
+
private:
- bool canHandle(Target *parent) const;
+ bool canHandle(Target *parent) const override;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.cpp b/src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.cpp
index a978543354..2d6164c9ae 100644
--- a/src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.cpp
@@ -35,14 +35,8 @@
using namespace ProjectExplorer;
-DeviceCheckBuildStep::DeviceCheckBuildStep(BuildStepList *bsl, Core::Id id)
- : BuildStep(bsl, id)
-{
- setDefaultDisplayName(stepDisplayName());
-}
-
-DeviceCheckBuildStep::DeviceCheckBuildStep(BuildStepList *bsl, DeviceCheckBuildStep *bs)
- : BuildStep(bsl, bs)
+DeviceCheckBuildStep::DeviceCheckBuildStep(BuildStepList *bsl)
+ : BuildStep(bsl, stepId())
{
setDefaultDisplayName(stepDisplayName());
}
diff --git a/src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.h b/src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.h
index b56f12f078..7886a9e8ab 100644
--- a/src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.h
+++ b/src/plugins/projectexplorer/devicesupport/devicecheckbuildstep.h
@@ -36,8 +36,7 @@ class PROJECTEXPLORER_EXPORT DeviceCheckBuildStep : public BuildStep
{
Q_OBJECT
public:
- DeviceCheckBuildStep(BuildStepList *bsl, Core::Id id);
- DeviceCheckBuildStep(BuildStepList *bsl, DeviceCheckBuildStep *bs);
+ explicit DeviceCheckBuildStep(BuildStepList *bsl);
bool init(QList<const BuildStep *> &earlierSteps) override;
diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp
index ae7b2a31a0..afe2f9ada4 100644
--- a/src/plugins/projectexplorer/processstep.cpp
+++ b/src/plugins/projectexplorer/processstep.cpp
@@ -46,20 +46,8 @@ const char PROCESS_WORKINGDIRECTORY_KEY[] = "ProjectExplorer.ProcessStep.Working
const char PROCESS_ARGUMENTS_KEY[] = "ProjectExplorer.ProcessStep.Arguments";
}
-ProcessStep::ProcessStep(BuildStepList *bsl) : AbstractProcessStep(bsl, Core::Id(PROCESS_STEP_ID))
-{
- ctor();
-}
-
-ProcessStep::ProcessStep(BuildStepList *bsl, ProcessStep *bs) : AbstractProcessStep(bsl, bs),
- m_command(bs->m_command),
- m_arguments(bs->m_arguments),
- m_workingDirectory(bs->m_workingDirectory)
-{
- ctor();
-}
-
-void ProcessStep::ctor()
+ProcessStep::ProcessStep(BuildStepList *bsl)
+ : AbstractProcessStep(bsl, PROCESS_STEP_ID)
{
//: Default ProcessStep display name
setDefaultDisplayName(tr("Custom Process Step"));
@@ -156,21 +144,13 @@ bool ProcessStep::fromMap(const QVariantMap &map)
// ProcessStepFactory
//*******
-QList<BuildStepInfo> ProcessStepFactory::availableSteps(BuildStepList *parent) const
-{
- Q_UNUSED(parent);
- return {{PROCESS_STEP_ID, ProcessStep::tr("Custom Process Step", "item in combobox")}};
-}
-
-BuildStep *ProcessStepFactory::create(BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id);
- return new ProcessStep(parent);
-}
-
-BuildStep *ProcessStepFactory::clone(BuildStepList *parent, BuildStep *bs)
+ProcessStepFactory::ProcessStepFactory()
{
- return new ProcessStep(parent, static_cast<ProcessStep *>(bs));
+ registerStep<ProcessStep>(PROCESS_STEP_ID);
+ setDisplayName(ProcessStep::tr("Custom Process Step", "item in combobox"));
+ setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_BUILD,
+ ProjectExplorer::Constants::BUILDSTEPS_CLEAN,
+ ProjectExplorer::Constants::BUILDSTEPS_DEPLOY});
}
//*******
diff --git a/src/plugins/projectexplorer/processstep.h b/src/plugins/projectexplorer/processstep.h
index 8d92fca092..7da9f4ec09 100644
--- a/src/plugins/projectexplorer/processstep.h
+++ b/src/plugins/projectexplorer/processstep.h
@@ -29,19 +29,14 @@
#include "abstractprocessstep.h"
namespace ProjectExplorer {
-
namespace Internal {
-class ProcessStepFactory : public IBuildStepFactory
+class ProcessStepFactory : public BuildStepFactory
{
Q_OBJECT
public:
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- BuildStep *create(BuildStepList *parent, Core::Id id) override;
- BuildStep *clone(BuildStepList *parent, BuildStep *product) override;
+ ProcessStepFactory();
};
class ProcessStep : public AbstractProcessStep
@@ -68,13 +63,8 @@ public:
QVariantMap toMap() const override;
-protected:
- ProcessStep(BuildStepList *bsl, ProcessStep *bs);
-
- bool fromMap(const QVariantMap &map) override;
-
private:
- void ctor();
+ bool fromMap(const QVariantMap &map) override;
QString m_command;
QString m_arguments;
diff --git a/src/plugins/projectexplorer/projectconfiguration.cpp b/src/plugins/projectexplorer/projectconfiguration.cpp
index 0362c747c9..3ab01fba2f 100644
--- a/src/plugins/projectexplorer/projectconfiguration.cpp
+++ b/src/plugins/projectexplorer/projectconfiguration.cpp
@@ -25,33 +25,34 @@
#include "projectconfiguration.h"
+#include <utils/qtcassert.h>
+
using namespace ProjectExplorer;
const char CONFIGURATION_ID_KEY[] = "ProjectExplorer.ProjectConfiguration.Id";
const char DISPLAY_NAME_KEY[] = "ProjectExplorer.ProjectConfiguration.DisplayName";
const char DEFAULT_DISPLAY_NAME_KEY[] = "ProjectExplorer.ProjectConfiguration.DefaultDisplayName";
-ProjectConfiguration::ProjectConfiguration(QObject *parent)
- : QObject(parent)
-{}
-
-void ProjectConfiguration::initialize(Core::Id id)
+ProjectConfiguration::ProjectConfiguration(QObject *parent, Core::Id id)
+ : QObject(parent), m_id(id)
{
- m_id = id;
+ QTC_CHECK(id.isValid());
setObjectName(id.toString());
}
-void ProjectConfiguration::copyFrom(const ProjectConfiguration *source)
+Core::Id ProjectConfiguration::id() const
{
- Q_ASSERT(source);
- m_id = source->m_id;
- m_defaultDisplayName = source->m_defaultDisplayName;
- m_displayName = tr("Clone of %1").arg(source->displayName());
+ return m_id;
}
-Core::Id ProjectConfiguration::id() const
+QString ProjectConfiguration::extraId() const
{
- return m_id;
+ return QString();
+}
+
+QString ProjectConfiguration::settingsIdKey()
+{
+ return QString(CONFIGURATION_ID_KEY);
}
QString ProjectConfiguration::displayName() const
@@ -102,8 +103,9 @@ bool ProjectConfiguration::usesDefaultDisplayName() const
QVariantMap ProjectConfiguration::toMap() const
{
+ QTC_CHECK(m_id.isValid());
QVariantMap map;
- map.insert(QLatin1String(CONFIGURATION_ID_KEY), m_id.toSetting());
+ map.insert(QLatin1String(CONFIGURATION_ID_KEY), m_id.withSuffix(extraId()).toSetting());
map.insert(QLatin1String(DISPLAY_NAME_KEY), m_displayName);
map.insert(QLatin1String(DEFAULT_DISPLAY_NAME_KEY), m_defaultDisplayName);
return map;
@@ -111,12 +113,14 @@ QVariantMap ProjectConfiguration::toMap() const
bool ProjectConfiguration::fromMap(const QVariantMap &map)
{
- m_id = Core::Id::fromSetting(map.value(QLatin1String(CONFIGURATION_ID_KEY)));
+ Core::Id id = Core::Id::fromSetting(map.value(QLatin1String(CONFIGURATION_ID_KEY)));
+ QTC_ASSERT(id.toString().startsWith(m_id.toString()), return false);
+
m_displayName = map.value(QLatin1String(DISPLAY_NAME_KEY), QString()).toString();
m_defaultDisplayName = map.value(QLatin1String(DEFAULT_DISPLAY_NAME_KEY),
m_defaultDisplayName.isEmpty() ?
m_displayName : m_defaultDisplayName).toString();
- return m_id.isValid();
+ return true;
}
Core::Id ProjectExplorer::idFromMap(const QVariantMap &map)
@@ -134,16 +138,10 @@ bool StatefulProjectConfiguration::isEnabled() const
return m_isEnabled;
}
-StatefulProjectConfiguration::StatefulProjectConfiguration(QObject *parent) :
- ProjectConfiguration(parent)
+StatefulProjectConfiguration::StatefulProjectConfiguration(QObject *parent, Core::Id id) :
+ ProjectConfiguration(parent, id)
{ }
-void StatefulProjectConfiguration::copyFrom(const StatefulProjectConfiguration *source)
-{
- ProjectConfiguration::copyFrom(source);
- m_isEnabled = source->m_isEnabled;
-}
-
void StatefulProjectConfiguration::setEnabled(bool enabled)
{
if (enabled == m_isEnabled)
diff --git a/src/plugins/projectexplorer/projectconfiguration.h b/src/plugins/projectexplorer/projectconfiguration.h
index 38fe375e02..ec23948571 100644
--- a/src/plugins/projectexplorer/projectconfiguration.h
+++ b/src/plugins/projectexplorer/projectconfiguration.h
@@ -42,11 +42,14 @@ class PROJECTEXPLORER_EXPORT ProjectConfiguration : public QObject
{
Q_OBJECT
+protected:
+ explicit ProjectConfiguration(QObject *parent, Core::Id id);
+
public:
- // ctors are protected
~ProjectConfiguration() = default;
Core::Id id() const;
+
QString displayName() const;
bool usesDefaultDisplayName() const;
@@ -69,17 +72,17 @@ public:
virtual bool isActive() const = 0;
+ // Used in settings to mangle in build targets in RunConfigurations.
+ virtual QString extraId() const;
+
+ static QString settingsIdKey();
+
signals:
void displayNameChanged();
void toolTipChanged();
-protected:
- ProjectConfiguration(QObject *parent);
- void initialize(Core::Id id);
- void copyFrom(const ProjectConfiguration *source);
-
private:
- Core::Id m_id;
+ const Core::Id m_id;
QString m_displayName;
QString m_defaultDisplayName;
QString m_toolTip;
@@ -101,8 +104,7 @@ signals:
void enabledChanged();
protected:
- StatefulProjectConfiguration(QObject *parent);
- void copyFrom(const StatefulProjectConfiguration *source);
+ StatefulProjectConfiguration(QObject *parent, Core::Id id);
void setEnabled(bool enabled);
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index 512ae87491..83cbdd0249 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -191,11 +191,9 @@ void IRunConfigurationAspect::resetProjectToGlobalSettings()
static std::vector<RunConfiguration::AspectFactory> theAspectFactories;
-RunConfiguration::RunConfiguration(Target *target)
- : StatefulProjectConfiguration(target)
+RunConfiguration::RunConfiguration(Target *target, Core::Id id)
+ : StatefulProjectConfiguration(target, id)
{
- Q_ASSERT(target);
-
connect(target->project(), &Project::parsingStarted,
this, [this]() { updateEnabledState(); });
connect(target->project(), &Project::parsingFinished,
@@ -235,17 +233,6 @@ RunConfiguration::~RunConfiguration()
qDeleteAll(m_aspects);
}
-void RunConfiguration::initialize(Core::Id id)
-{
- StatefulProjectConfiguration::initialize(id);
-}
-
-void RunConfiguration::copyFrom(const RunConfiguration *source)
-{
- QVariantMap data = source->toMap();
- fromMap(data);
-}
-
bool RunConfiguration::isActive() const
{
return target()->isActive() && target()->activeRunConfiguration() == this;
@@ -450,20 +437,17 @@ IRunConfigurationFactory::IRunConfigurationFactory(QObject *parent) :
{
}
-QList<Core::Id> IRunConfigurationFactory::availableCreationIds(Target *parent, CreationMode mode) const
+QList<RunConfigurationCreationInfo>
+ IRunConfigurationFactory::availableCreators(Target *parent, CreationMode mode) const
{
if (!canHandle(parent))
return {};
return Utils::transform(availableBuildTargets(parent, mode), [this](const QString &suffix) {
- return m_runConfigBaseId.withSuffix(suffix);
+ return RunConfigurationCreationInfo{this, m_runConfigBaseId, suffix,
+ this->displayNameForBuildTarget(suffix)};
});
}
-QString IRunConfigurationFactory::displayNameForId(Core::Id id) const
-{
- return displayNameForBuildTarget(id.suffixAfter(m_runConfigBaseId));
-}
-
QString IRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const
{
return buildTarget;
@@ -501,30 +485,30 @@ bool IRunConfigurationFactory::canCreateHelper(Target *, const QString &) const
return true;
}
-bool IRunConfigurationFactory::canCreate(Target *parent, Core::Id id) const
+RunConfiguration *IRunConfigurationFactory::create(Target *parent, Core::Id id, const QString &extra) const
{
if (!canHandle(parent))
- return false;
- if (!id.name().startsWith(m_runConfigBaseId.name()))
- return false;
- return canCreateHelper(parent, id.suffixAfter(m_runConfigBaseId));
-}
-
-RunConfiguration *IRunConfigurationFactory::create(Target *parent, Core::Id id)
-{
- if (!canCreate(parent, id))
return nullptr;
+ if (id != m_runConfigBaseId)
+ return nullptr;
+ if (!canCreateHelper(parent, extra))
+ return nullptr;
+
QTC_ASSERT(m_creator, return nullptr);
RunConfiguration *rc = m_creator(parent);
if (!rc)
return nullptr;
- rc->initialize(id);
- return rc;
-}
-bool IRunConfigurationFactory::canCloneHelper(Target *, RunConfiguration *) const
-{
- return true;
+ // "FIX" ids by mangling in the extra data (build system target etc)
+ // for compatibility for the current format used in settings.
+ if (!extra.isEmpty()) {
+ QVariantMap data = rc->toMap();
+ data[ProjectConfiguration::settingsIdKey()] = id.withSuffix(extra).toString();
+ rc->fromMap(data);
+ QVariantMap data2 = rc->toMap();
+ }
+
+ return rc;
}
bool IRunConfigurationFactory::canClone(Target *parent, RunConfiguration *product) const
@@ -532,19 +516,16 @@ bool IRunConfigurationFactory::canClone(Target *parent, RunConfiguration *produc
if (!canHandle(parent))
return false;
const Core::Id id = product->id();
- if (!id.name().startsWith(m_runConfigBaseId.name()))
- return false;
- return canCloneHelper(parent, product);
+ return id.name().startsWith(m_runConfigBaseId.name());
}
-RunConfiguration *IRunConfigurationFactory::restore(Target *parent, const QVariantMap &map)
+RunConfiguration *IRunConfigurationFactory::restore(Target *parent, const QVariantMap &map) const
{
if (!canRestore(parent, map))
return nullptr;
QTC_ASSERT(m_creator, return nullptr);
RunConfiguration *rc = m_creator(parent);
QTC_ASSERT(rc, return nullptr);
- rc->initialize(idFromMap(map));
if (!rc->fromMap(map)) {
delete rc;
rc = nullptr;
@@ -560,13 +541,16 @@ bool IRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map
return id.name().startsWith(m_runConfigBaseId.name());
}
-RunConfiguration *IRunConfigurationFactory::clone(Target *parent, RunConfiguration *product)
+RunConfiguration *IRunConfigurationFactory::clone(Target *parent, RunConfiguration *product) const
{
QTC_ASSERT(m_creator, return nullptr);
if (!canClone(parent, product))
return nullptr;
RunConfiguration *runConfig = m_creator(parent);
- runConfig->copyFrom(product);
+
+ QVariantMap data = product->toMap();
+ runConfig->fromMap(data);
+
return runConfig;
}
@@ -590,7 +574,7 @@ QList<IRunConfigurationFactory *> IRunConfigurationFactory::find(Target *parent)
{
return ExtensionSystem::PluginManager::getObjects<IRunConfigurationFactory>(
[&parent](IRunConfigurationFactory *factory) {
- return !factory->availableCreationIds(parent).isEmpty();
+ return !factory->availableCreators(parent).isEmpty();
});
}
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index f9166d8312..740e400a40 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -47,6 +47,7 @@ namespace ProjectExplorer {
class Abi;
class BuildConfiguration;
class IRunConfigurationAspect;
+class IRunConfigurationFactory;
class RunConfiguration;
class RunConfigWidget;
class RunControl;
@@ -262,9 +263,7 @@ signals:
protected:
friend class IRunConfigurationFactory;
- RunConfiguration(Target *target);
- virtual void initialize(Core::Id id);
- void copyFrom(const RunConfiguration *source);
+ RunConfiguration(Target *target, Core::Id id);
/// convenience function to get current build configuration.
BuildConfiguration *activeBuildConfiguration() const;
@@ -274,9 +273,24 @@ protected:
private:
static void addAspectFactory(const AspectFactory &aspectFactory);
+ friend class IRunConfigurationFactory;
+
QList<IRunConfigurationAspect *> m_aspects;
};
+class RunConfigurationCreationInfo
+{
+public:
+ RunConfigurationCreationInfo(const IRunConfigurationFactory *factory, Core::Id id,
+ QString extra, QString displayName)
+ : factory(factory) , id(id) , extra(extra) , displayName(displayName) {}
+
+ const IRunConfigurationFactory *factory = nullptr;
+ Core::Id id;
+ QString extra;
+ QString displayName;
+};
+
class PROJECTEXPLORER_EXPORT IRunConfigurationFactory : public QObject
{
Q_OBJECT
@@ -285,17 +299,17 @@ public:
explicit IRunConfigurationFactory(QObject *parent = nullptr);
enum CreationMode {UserCreate, AutoCreate};
- QList<Core::Id> availableCreationIds(Target *parent, CreationMode mode = UserCreate) const;
- QString displayNameForId(Core::Id id) const;
+
+ QList<RunConfigurationCreationInfo> availableCreators(Target *parent,
+ CreationMode mode = UserCreate) const;
virtual bool canHandle(Target *target) const;
- bool canCreate(Target *parent, Core::Id id) const;
- RunConfiguration *create(Target *parent, Core::Id id);
+ RunConfiguration *create(Target *parent, Core::Id id, const QString &extra) const;
bool canRestore(Target *parent, const QVariantMap &map) const;
- RunConfiguration *restore(Target *parent, const QVariantMap &map);
+ RunConfiguration *restore(Target *parent, const QVariantMap &map) const;
bool canClone(Target *parent, RunConfiguration *product) const;
- RunConfiguration *clone(Target *parent, RunConfiguration *product);
+ RunConfiguration *clone(Target *parent, RunConfiguration *product) const;
static IRunConfigurationFactory *find(Target *parent, const QVariantMap &map);
static IRunConfigurationFactory *find(Target *parent, RunConfiguration *rc);
@@ -309,7 +323,6 @@ protected:
virtual QString displayNameForBuildTarget(const QString &buildTarget) const;
virtual bool canCreateHelper(Target *parent, const QString &buildTarget) const;
- virtual bool canCloneHelper(Target *parent, RunConfiguration *product) const;
using RunConfigurationCreator = std::function<RunConfiguration *(Target *)>;
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 7930a78336..5687534756 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -237,19 +237,19 @@ void RunSettingsWidget::aboutToShowAddMenu()
connect(cloneAction, &QAction::triggered,
this, &RunSettingsWidget::cloneRunConfiguration);
}
- QList<IRunConfigurationFactory *> factories =
+ const QList<IRunConfigurationFactory *> factories =
ExtensionSystem::PluginManager::getObjects<IRunConfigurationFactory>();
QList<QAction *> menuActions;
- foreach (IRunConfigurationFactory *factory, factories) {
- QList<Core::Id> ids = factory->availableCreationIds(m_target);
- foreach (Core::Id id, ids) {
- auto action = new QAction(factory->displayNameForId(id), m_addRunMenu);
- connect(action, &QAction::triggered, [factory, id, this]() {
- RunConfiguration *newRC = factory->create(m_target, id);
+ for (IRunConfigurationFactory *factory : factories) {
+ const QList<RunConfigurationCreationInfo> items = factory->availableCreators(m_target);
+ for (const RunConfigurationCreationInfo &item : items) {
+ auto action = new QAction(item.displayName, m_addRunMenu);
+ connect(action, &QAction::triggered, [item, this] {
+ RunConfiguration *newRC = item.factory->create(m_target, item.id, item.extra);
if (!newRC)
return;
- QTC_CHECK(newRC->id() == id);
+ QTC_CHECK(newRC->id() == item.id);
m_target->addRunConfiguration(newRC);
m_target->setActiveRunConfiguration(newRC);
m_removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1);
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index 221a8d55a2..33bd4d83f0 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -115,10 +115,9 @@ QList<DeployConfigurationFactory *> TargetPrivate::deployFactories() const
}
Target::Target(Project *project, Kit *k) :
- ProjectConfiguration(project),
+ ProjectConfiguration(project, k->id()),
d(new TargetPrivate(k))
{
- initialize(k->id());
QTC_CHECK(d->m_kit);
connect(DeviceManager::instance(), &DeviceManager::updated, this, &Target::updateDeviceState);
@@ -547,7 +546,7 @@ void Target::updateDefaultDeployConfigurations()
void Target::updateDefaultRunConfigurations()
{
- QList<IRunConfigurationFactory *> rcFactories = IRunConfigurationFactory::find(this);
+ const QList<IRunConfigurationFactory *> rcFactories = IRunConfigurationFactory::find(this);
if (rcFactories.isEmpty()) {
qWarning("No run configuration factory found for target id '%s'.", qPrintable(id().toString()));
return;
@@ -565,42 +564,46 @@ void Target::updateDefaultRunConfigurations()
int configuredCount = existingConfigured.count();
// find all RC ids that can get created:
- QList<Core::Id> availableFactoryIds;
- foreach (IRunConfigurationFactory *rcFactory, rcFactories)
- availableFactoryIds.append(rcFactory->availableCreationIds(this));
+ QList<RunConfigurationCreationInfo> availableFactories;
+ for (IRunConfigurationFactory *rcFactory : rcFactories)
+ availableFactories.append(rcFactory->availableCreators(this));
- QList<Core::Id> autoCreateFactoryIds;
- foreach (IRunConfigurationFactory *rcFactory, rcFactories)
- autoCreateFactoryIds.append(rcFactory->availableCreationIds(this,
- IRunConfigurationFactory::AutoCreate));
+ QList<RunConfigurationCreationInfo> autoCreateFactories;
+ for (IRunConfigurationFactory *rcFactory : rcFactories)
+ autoCreateFactories.append(rcFactory->availableCreators(this,
+ IRunConfigurationFactory::AutoCreate));
// Put outdated RCs into toRemove, do not bother with factories
// that produce already existing RCs
QList<RunConfiguration *> toRemove;
- QList<Core::Id> toIgnore;
+ QList<RunConfigurationCreationInfo> existing;
foreach (RunConfiguration *rc, existingConfigured) {
- if (availableFactoryIds.contains(rc->id()))
- toIgnore.append(rc->id()); // Already there
- else if (project()->knowsAllBuildExecutables())
- toRemove << rc;
+ bool present = false;
+ for (const RunConfigurationCreationInfo &item : availableFactories) {
+ if (item.id == rc->id() && item.extra == rc->extraId()) {
+ existing.append(item);
+ present = true;
+ }
+ }
+ if (!present && project()->knowsAllBuildExecutables())
+ toRemove.append(rc);
}
- foreach (Core::Id i, toIgnore)
- autoCreateFactoryIds.removeAll(i);
configuredCount -= toRemove.count();
// Create new RCs and put them into newConfigured/newUnconfigured
- foreach (Core::Id id, autoCreateFactoryIds) {
- IRunConfigurationFactory *factory = Utils::findOrDefault(rcFactories,
- [this, id] (IRunConfigurationFactory *i) {
- return i->canCreate(this, id);
- });
- if (!factory)
+ foreach (const RunConfigurationCreationInfo &item, autoCreateFactories) {
+ bool exists = false;
+ for (const RunConfigurationCreationInfo &ex : existing) {
+ if (ex.id == item.id && ex.extra == item.extra)
+ exists = true;
+ }
+ if (exists)
continue;
- RunConfiguration *rc = factory->create(this, id);
+ RunConfiguration *rc = item.factory->create(this, item.id, item.extra);
if (!rc)
continue;
- QTC_CHECK(rc->id() == id);
+ QTC_CHECK(rc->id() == item.id);
if (!rc->isConfigured())
newUnconfigured << rc;
else
@@ -643,7 +646,7 @@ void Target::updateDefaultRunConfigurations()
// Make sure a configured RC will be active after we delete the RCs:
RunConfiguration *active = activeRunConfiguration();
- if (removalList.contains(active) || !active->isEnabled()) {
+ if (active && (removalList.contains(active) || !active->isEnabled())) {
RunConfiguration *newConfiguredDefault = newConfigured.isEmpty() ? nullptr : newConfigured.at(0);
RunConfiguration *rc
@@ -796,7 +799,7 @@ bool Target::fromMap(const QVariantMap &map)
qWarning("Factory '%s' failed to restore deployment configuration!", qPrintable(factory->objectName()));
continue;
}
- QTC_CHECK(dc->id() == ProjectExplorer::idFromMap(valueMap));
+ QTC_CHECK(dc->id().withSuffix(dc->extraId()) == ProjectExplorer::idFromMap(valueMap));
addDeployConfiguration(dc);
if (i == activeConfiguration)
setActiveDeployConfiguration(dc);
@@ -824,7 +827,7 @@ bool Target::fromMap(const QVariantMap &map)
RunConfiguration *rc = factory->restore(this, valueMap);
if (!rc)
continue;
- QTC_CHECK(rc->id() == ProjectExplorer::idFromMap(valueMap));
+ QTC_CHECK(rc->id().withSuffix(rc->extraId()) == ProjectExplorer::idFromMap(valueMap));
addRunConfiguration(rc);
if (i == activeConfiguration)
setActiveRunConfiguration(rc);
diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp
index 051d124495..02ded99c42 100644
--- a/src/plugins/pythoneditor/pythoneditorplugin.cpp
+++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp
@@ -79,11 +79,6 @@ const char PythonProjectContext[] = "PythonProjectContext";
class PythonRunConfiguration;
class PythonProjectFile;
-static QString scriptFromId(Core::Id id)
-{
- return id.suffixAfter(PythonRunConfigurationPrefix);
-}
-
class PythonProject : public Project
{
Q_OBJECT
@@ -162,7 +157,6 @@ public:
private:
friend class ProjectExplorer::IRunConfigurationFactory;
- void initialize(Core::Id id) override;
QString defaultDisplayName() const;
@@ -173,24 +167,17 @@ private:
////////////////////////////////////////////////////////////////
PythonRunConfiguration::PythonRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, PythonRunConfigurationPrefix)
{
addExtraAspect(new LocalEnvironmentAspect(this, LocalEnvironmentAspect::BaseEnvironmentModifier()));
addExtraAspect(new ArgumentsAspect(this, "PythonEditor.RunConfiguration.Arguments"));
addExtraAspect(new TerminalAspect(this, "PythonEditor.RunConfiguration.UseTerminal"));
- setDefaultDisplayName(defaultDisplayName());
-}
-
-void PythonRunConfiguration::initialize(Core::Id id)
-{
- RunConfiguration::initialize(id);
-
- m_mainScript = scriptFromId(id);
- setDisplayName(defaultDisplayName());
Environment sysEnv = Environment::systemEnvironment();
const QString exec = sysEnv.searchInPath("python").toString();
m_interpreter = exec.isEmpty() ? "python" : exec;
+
+ setDefaultDisplayName(defaultDisplayName());
}
QVariantMap PythonRunConfiguration::toMap() const
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index 1b167d74f9..34c328be30 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -52,39 +52,70 @@
#include <QInputDialog>
using namespace ProjectExplorer;
+using namespace Utils;
namespace QbsProjectManager {
namespace Internal {
static QString configNameKey() { return QStringLiteral("Qbs.configName"); }
-const char QBS_BC_ID[] = "Qbs.QbsBuildConfiguration";
+static FileName defaultBuildDirectory(const QString &projectFilePath, const Kit *k,
+ const QString &bcName,
+ BuildConfiguration::BuildType buildType)
+{
+ const QString projectName = QFileInfo(projectFilePath).completeBaseName();
+ ProjectMacroExpander expander(projectFilePath, projectName, k, bcName, buildType);
+ QString projectDir = Project::projectDirectory(FileName::fromString(projectFilePath)).toString();
+ QString buildPath = expander.expand(Core::DocumentManager::buildDirectory());
+ return FileName::fromString(FileUtils::resolvePath(projectDir, buildPath));
+}
// ---------------------------------------------------------------------------
// QbsBuildConfiguration:
// ---------------------------------------------------------------------------
-QbsBuildConfiguration::QbsBuildConfiguration(Target *target) :
- BuildConfiguration(target, Core::Id(QBS_BC_ID)),
- m_isParsing(true),
- m_parsingError(false)
+QbsBuildConfiguration::QbsBuildConfiguration(Target *target)
+ : BuildConfiguration(target, Constants::QBS_BC_ID)
{
connect(project(), &Project::parsingStarted, this, &BuildConfiguration::enabledChanged);
connect(project(), &Project::parsingFinished, this, &BuildConfiguration::enabledChanged);
-
- BuildStepList *bsl = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- connect(bsl, &BuildStepList::stepInserted, this, &QbsBuildConfiguration::buildStepInserted);
}
-QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id) :
- BuildConfiguration(target, id)
-{ }
-
-QbsBuildConfiguration::QbsBuildConfiguration(Target *target, QbsBuildConfiguration *source) :
- BuildConfiguration(target, source)
+void QbsBuildConfiguration::initialize(const BuildInfo *info)
{
- m_configurationName = source->configurationName();
- cloneSteps(source);
+ BuildConfiguration::initialize(info);
+
+ const QbsBuildInfo * const bi = static_cast<const QbsBuildInfo *>(info);
+ QVariantMap configData = bi->config;
+ configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY),
+ (info->buildType == BuildConfiguration::Debug)
+ ? QLatin1String(Constants::QBS_VARIANT_DEBUG)
+ : QLatin1String(Constants::QBS_VARIANT_RELEASE));
+
+ Utils::FileName buildDir = info->buildDirectory;
+ if (buildDir.isEmpty())
+ buildDir = defaultBuildDirectory(target()->project()->projectDirectory().toString(),
+ target()->kit(), info->displayName, info->buildType);
+
+ // Add the build configuration.
+ QVariantMap bd = configData;
+ QString configName = bd.take("configName").toString();
+ if (configName.isEmpty()) {
+ configName = "qtc_" + target()->kit()->fileSystemFriendlyName() + '_'
+ + Utils::FileUtils::fileSystemFriendlyName(info->displayName);
+ }
+ setConfigurationName(configName);
+
+ BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ auto bs = new QbsBuildStep(buildSteps);
+ bs->setQbsConfiguration(bd);
+ buildSteps->appendStep(bs);
+
+ BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
+ cleanSteps->appendStep(new QbsCleanStep(cleanSteps));
+
+ connect(bs, &QbsBuildStep::qbsConfigurationChanged, this, &QbsBuildConfiguration::qbsConfigurationChanged);
+ emit qbsConfigurationChanged();
}
bool QbsBuildConfiguration::fromMap(const QVariantMap &map)
@@ -117,15 +148,6 @@ QVariantMap QbsBuildConfiguration::toMap() const
return map;
}
-void QbsBuildConfiguration::buildStepInserted(int pos)
-{
- QbsBuildStep *step = qobject_cast<QbsBuildStep *>(stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)->at(pos));
- if (step) {
- connect(step, &QbsBuildStep::qbsConfigurationChanged, this, &QbsBuildConfiguration::qbsConfigurationChanged);
- emit qbsConfigurationChanged();
- }
-}
-
NamedWidget *QbsBuildConfiguration::createConfigWidget()
{
return new QbsBuildConfigurationWidget(this);
@@ -366,48 +388,15 @@ QString QbsBuildConfiguration::equivalentCommandLine(const BuildStep *buildStep)
return commandLine;
}
-QbsBuildConfiguration *QbsBuildConfiguration::setup(Target *t,
- const QString &defaultDisplayName,
- const QString &displayName,
- const QVariantMap &buildData,
- const Utils::FileName &directory)
-{
- // Add the build configuration.
- QbsBuildConfiguration *bc = new QbsBuildConfiguration(t);
- bc->setDefaultDisplayName(defaultDisplayName);
- bc->setDisplayName(displayName);
- bc->setBuildDirectory(directory);
- QVariantMap bd = buildData;
- QString configName = bd.take("configName").toString();
- if (configName.isEmpty()) {
- configName = "qtc_" + t->kit()->fileSystemFriendlyName() + QLatin1Char('_')
- + Utils::FileUtils::fileSystemFriendlyName(displayName);
- }
- bc->setConfigurationName(configName);
-
- BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- QbsBuildStep *bs = new QbsBuildStep(buildSteps);
- bs->setQbsConfiguration(bd);
- buildSteps->insertStep(0, bs);
-
- BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
- QbsCleanStep *cs = new QbsCleanStep(cleanSteps);
- cleanSteps->insertStep(0, cs);
-
- return bc;
-}
-
// ---------------------------------------------------------------------------
// QbsBuildConfigurationFactory:
// ---------------------------------------------------------------------------
-QbsBuildConfigurationFactory::QbsBuildConfigurationFactory(QObject *parent) :
- IBuildConfigurationFactory(parent)
-{ }
-
-bool QbsBuildConfigurationFactory::canHandle(const Target *t) const
+QbsBuildConfigurationFactory::QbsBuildConfigurationFactory()
{
- return qobject_cast<Internal::QbsProject *>(t->project());
+ registerBuildConfiguration<QbsBuildConfiguration>(Constants::QBS_BC_ID);
+ setSupportedProjectType(Constants::PROJECT_ID);
+ setSupportedProjectMimeTypeName(Constants::MIME_TYPE);
}
BuildInfo *QbsBuildConfigurationFactory::createBuildInfo(const Kit *k,
@@ -420,37 +409,9 @@ BuildInfo *QbsBuildConfigurationFactory::createBuildInfo(const Kit *k,
return info;
}
-int QbsBuildConfigurationFactory::priority(const Target *parent) const
-{
- return canHandle(parent) ? 0 : -1;
-}
-
QList<BuildInfo *> QbsBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
- QList<BuildInfo *> result;
-
- BuildInfo *info = createBuildInfo(parent->kit(), BuildConfiguration::Debug);
- result << info;
-
- return result;
-}
-
-int QbsBuildConfigurationFactory::priority(const Kit *k, const QString &projectPath) const
-{
- if (k && Utils::mimeTypeForFile(projectPath).matchesName(Constants::MIME_TYPE))
- return 0;
- return -1;
-}
-
-static Utils::FileName defaultBuildDirectory(const QString &projectFilePath, const Kit *k,
- const QString &bcName,
- BuildConfiguration::BuildType buildType)
-{
- const QString projectName = QFileInfo(projectFilePath).completeBaseName();
- ProjectMacroExpander expander(projectFilePath, projectName, k, bcName, buildType);
- QString projectDir = Project::projectDirectory(Utils::FileName::fromString(projectFilePath)).toString();
- QString buildPath = expander.expand(Core::DocumentManager::buildDirectory());
- return Utils::FileName::fromString(Utils::FileUtils::resolvePath(projectDir, buildPath));
+ return {createBuildInfo(parent->kit(), BuildConfiguration::Debug)};
}
QList<BuildInfo *> QbsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
@@ -478,61 +439,5 @@ QList<BuildInfo *> QbsBuildConfigurationFactory::availableSetups(const Kit *k, c
return result;
}
-BuildConfiguration *QbsBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
-{
- QTC_ASSERT(info->factory() == this, return 0);
- QTC_ASSERT(info->kitId == parent->kit()->id(), return 0);
- QTC_ASSERT(!info->displayName.isEmpty(), return 0);
-
- const QbsBuildInfo * const bi = static_cast<const QbsBuildInfo *>(info);
- QVariantMap configData = bi->config;
- configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY),
- (info->buildType == BuildConfiguration::Debug)
- ? QLatin1String(Constants::QBS_VARIANT_DEBUG)
- : QLatin1String(Constants::QBS_VARIANT_RELEASE));
-
- Utils::FileName buildDir = info->buildDirectory;
- if (buildDir.isEmpty())
- buildDir = defaultBuildDirectory(parent->project()->projectDirectory().toString(),
- parent->kit(), info->displayName, info->buildType);
-
- BuildConfiguration *bc
- = QbsBuildConfiguration::setup(parent, info->displayName, info->displayName,
- configData, buildDir);
-
- return bc;
-}
-
-bool QbsBuildConfigurationFactory::canClone(const Target *parent, BuildConfiguration *source) const
-{
- return canHandle(parent) && qobject_cast<QbsBuildConfiguration *>(source);
-}
-
-BuildConfiguration *QbsBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *source)
-{
- if (!canClone(parent, source))
- return 0;
- QbsBuildConfiguration *oldbc(static_cast<QbsBuildConfiguration *>(source));
- return new QbsBuildConfiguration(parent, oldbc);
-}
-
-bool QbsBuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const
-{
- if (!canHandle(parent))
- return false;
- return ProjectExplorer::idFromMap(map) == Core::Id(QBS_BC_ID);
-}
-
-BuildConfiguration *QbsBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
- QbsBuildConfiguration *bc = new QbsBuildConfiguration(parent);
- if (bc->fromMap(map))
- return bc;
- delete bc;
- return 0;
-}
-
} // namespace Internal
} // namespace QbsProjectManager
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
index 1a0248d8f6..3c3fbdf30b 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
@@ -32,16 +32,11 @@
#include <projectexplorer/buildconfiguration.h>
#include <qtsupport/baseqtversion.h>
-namespace ProjectExplorer {
-class BuildStep;
-class FileNode;
-}
+namespace ProjectExplorer { class BuildStep; }
namespace QbsProjectManager {
-
namespace Internal {
-class QbsBuildConfigurationFactory;
class QbsBuildConfigurationWidget;
class QbsBuildStep;
class QbsProject;
@@ -50,9 +45,11 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
Q_OBJECT
-public:
+ friend class ProjectExplorer::IBuildConfigurationFactory;
explicit QbsBuildConfiguration(ProjectExplorer::Target *target);
+public:
+ void initialize(const ProjectExplorer::BuildInfo *info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
QbsBuildStep *qbsStep() const;
@@ -86,29 +83,17 @@ public:
signals:
void qbsConfigurationChanged();
-protected:
- QbsBuildConfiguration(ProjectExplorer::Target *target, QbsBuildConfiguration *source);
- QbsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
+private:
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
-private:
- void buildStepInserted(int pos);
-
- static QbsBuildConfiguration *setup(ProjectExplorer::Target *t,
- const QString &defaultDisplayName,
- const QString &displayName,
- const QVariantMap &buildData,
- const Utils::FileName &directory);
-
- bool m_isParsing;
- bool m_parsingError;
+ bool m_isParsing = true;
+ bool m_parsingError = false;
QStringList m_changedFiles;
QStringList m_activeFileTags;
QStringList m_products;
QString m_configurationName;
- friend class QbsBuildConfigurationFactory;
friend class QbsBuildConfigurationWidget;
};
@@ -117,23 +102,13 @@ class QbsBuildConfigurationFactory : public ProjectExplorer::IBuildConfiguration
Q_OBJECT
public:
- explicit QbsBuildConfigurationFactory(QObject *parent = 0);
+ QbsBuildConfigurationFactory();
- int priority(const ProjectExplorer::Target *parent) const override;
QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override;
- int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override;
QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k,
const QString &projectPath) const override;
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const override;
-
- bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const override;
- ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) override;
- bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
private:
- bool canHandle(const ProjectExplorer::Target *t) const;
ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k,
ProjectExplorer::BuildConfiguration::BuildType type) const;
};
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
index 9474702904..d68cdb93a1 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
@@ -124,18 +124,11 @@ private:
// --------------------------------------------------------------------
QbsBuildStep::QbsBuildStep(ProjectExplorer::BuildStepList *bsl) :
- ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QBS_BUILDSTEP_ID)),
- m_job(0), m_parser(0), m_parsingProject(false)
+ ProjectExplorer::BuildStep(bsl, Constants::QBS_BUILDSTEP_ID)
{
setDisplayName(tr("Qbs Build"));
setQbsConfiguration(QVariantMap());
-}
-
-QbsBuildStep::QbsBuildStep(ProjectExplorer::BuildStepList *bsl, const QbsBuildStep *other) :
- ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QBS_BUILDSTEP_ID)),
- m_qbsBuildOptions(other->m_qbsBuildOptions), m_job(0), m_parser(0), m_parsingProject(false)
-{
- setQbsConfiguration(other->qbsConfiguration(PreserveVariables));
+// setQbsConfiguration(other->qbsConfiguration(PreserveVariables));
}
QbsBuildStep::~QbsBuildStep()
@@ -846,29 +839,13 @@ bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QS
// QbsBuildStepFactory:
// --------------------------------------------------------------------
-QbsBuildStepFactory::QbsBuildStepFactory(QObject *parent) :
- ProjectExplorer::IBuildStepFactory(parent)
-{ }
-
-QList<ProjectExplorer::BuildStepInfo> QbsBuildStepFactory::availableSteps(ProjectExplorer::BuildStepList *parent) const
-{
- if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD
- && qobject_cast<QbsBuildConfiguration *>(parent->parent())
- && qobject_cast<QbsProject *>(parent->target()->project()))
- return {{Constants::QBS_BUILDSTEP_ID, tr("Qbs Build")}};
-
- return {};
-}
-
-ProjectExplorer::BuildStep *QbsBuildStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id);
- return new QbsBuildStep(parent);
-}
-
-ProjectExplorer::BuildStep *QbsBuildStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product)
+QbsBuildStepFactory::QbsBuildStepFactory()
{
- return new QbsBuildStep(parent, static_cast<QbsBuildStep *>(product));
+ registerStep<QbsBuildStep>(Constants::QBS_BUILDSTEP_ID);
+ setDisplayName(tr("Qbs Build"));
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ setSupportedConfiguration(Constants::QBS_BC_ID);
+ setSupportedProjectType(Constants::PROJECT_ID);
}
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h
index 8682347589..652267361a 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h
@@ -52,7 +52,6 @@ public:
};
explicit QbsBuildStep(ProjectExplorer::BuildStepList *bsl);
- QbsBuildStep(ProjectExplorer::BuildStepList *bsl, const QbsBuildStep *other);
~QbsBuildStep() override;
bool init(QList<const BuildStep *> &earlierSteps) override;
@@ -81,14 +80,14 @@ public:
bool isQmlDebuggingEnabled() const;
- bool fromMap(const QVariantMap &map) override;
- QVariantMap toMap() const override;
-
signals:
void qbsConfigurationChanged();
void qbsBuildOptionsChanged();
private:
+ bool fromMap(const QVariantMap &map) override;
+ QVariantMap toMap() const override;
+
void buildingDone(bool success);
void reparsingDone(bool success);
void handleTaskStarted(const QString &desciption, int max);
@@ -124,27 +123,21 @@ private:
QStringList m_products;
QFutureInterface<bool> *m_fi;
- qbs::BuildJob *m_job;
+ qbs::BuildJob *m_job = nullptr;
int m_progressBase;
bool m_lastWasSuccess;
- ProjectExplorer::IOutputParser *m_parser;
- bool m_parsingProject;
+ ProjectExplorer::IOutputParser *m_parser = nullptr;
+ bool m_parsingProject = false;
friend class QbsBuildStepConfigWidget;
};
-class QbsBuildStepFactory : public ProjectExplorer::IBuildStepFactory
+class QbsBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit QbsBuildStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override;
+ QbsBuildStepFactory();
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.cpp b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
index ee1163be3c..7ca3289931 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
@@ -41,10 +41,6 @@
static const char QBS_DRY_RUN[] = "Qbs.DryRun";
static const char QBS_KEEP_GOING[] = "Qbs.DryKeepGoing";
-// --------------------------------------------------------------------
-// Constants:
-// --------------------------------------------------------------------
-
namespace QbsProjectManager {
namespace Internal {
@@ -53,18 +49,11 @@ namespace Internal {
// --------------------------------------------------------------------
QbsCleanStep::QbsCleanStep(ProjectExplorer::BuildStepList *bsl) :
- ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QBS_CLEANSTEP_ID)),
- m_job(0), m_showCompilerOutput(true), m_parser(0)
+ ProjectExplorer::BuildStep(bsl, Constants::QBS_CLEANSTEP_ID)
{
setDisplayName(tr("Qbs Clean"));
}
-QbsCleanStep::QbsCleanStep(ProjectExplorer::BuildStepList *bsl, const QbsCleanStep *other) :
- ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QBS_CLEANSTEP_ID)),
- m_qbsCleanOptions(other->m_qbsCleanOptions), m_job(0),
- m_showCompilerOutput(other->m_showCompilerOutput), m_parser(0)
-{ }
-
QbsCleanStep::~QbsCleanStep()
{
cancel();
@@ -303,27 +292,12 @@ void QbsCleanStepConfigWidget::changeJobCount(int count)
// QbsCleanStepFactory:
// --------------------------------------------------------------------
-QbsCleanStepFactory::QbsCleanStepFactory(QObject *parent) :
- ProjectExplorer::IBuildStepFactory(parent)
-{ }
-
-QList<ProjectExplorer::BuildStepInfo> QbsCleanStepFactory::availableSteps(ProjectExplorer::BuildStepList *parent) const
-{
- if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN
- && qobject_cast<QbsBuildConfiguration *>(parent->parent()))
- return {{Constants::QBS_CLEANSTEP_ID, tr("Qbs Clean")}};
- return {};
-}
-
-ProjectExplorer::BuildStep *QbsCleanStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id);
- return new QbsCleanStep(parent);
-}
-
-ProjectExplorer::BuildStep *QbsCleanStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product)
+QbsCleanStepFactory::QbsCleanStepFactory()
{
- return new QbsCleanStep(parent, static_cast<QbsCleanStep *>(product));
+ registerStep<QbsCleanStep>(Constants::QBS_CLEANSTEP_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
+ setSupportedConfiguration(Constants::QBS_BC_ID);
+ setDisplayName(tr("Qbs Clean"));
}
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.h b/src/plugins/qbsprojectmanager/qbscleanstep.h
index 48292082b6..b7f84a1d5b 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.h
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.h
@@ -43,7 +43,6 @@ class QbsCleanStep : public ProjectExplorer::BuildStep
public:
explicit QbsCleanStep(ProjectExplorer::BuildStepList *bsl);
- QbsCleanStep(ProjectExplorer::BuildStepList *bsl, const QbsCleanStep *other);
~QbsCleanStep() override;
bool init(QList<const BuildStep *> &earlierSteps) override;
@@ -80,11 +79,11 @@ private:
qbs::CleanOptions m_qbsCleanOptions;
QStringList m_products;
- QFutureInterface<bool> *m_fi;
- qbs::CleanJob *m_job;
+ QFutureInterface<bool> *m_fi = nullptr;
+ qbs::CleanJob *m_job = nullptr;
int m_progressBase;
- bool m_showCompilerOutput;
- ProjectExplorer::IOutputParser *m_parser;
+ bool m_showCompilerOutput = true;
+ ProjectExplorer::IOutputParser *m_parser = nullptr;
friend class QbsCleanStepConfigWidget;
};
@@ -113,18 +112,12 @@ private:
QString m_summary;
};
-class QbsCleanStepFactory : public ProjectExplorer::IBuildStepFactory
+class QbsCleanStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit QbsCleanStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override;
+ QbsCleanStepFactory();
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp b/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp
index 5435d5777c..c97e134d96 100644
--- a/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp
+++ b/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.cpp
@@ -25,121 +25,30 @@
#include "qbsdeployconfigurationfactory.h"
+#include "qbsprojectmanagerconstants.h"
#include "qbsinstallstep.h"
#include "qbsproject.h"
#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/kitinformation.h>
#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/target.h>
namespace QbsProjectManager {
namespace Internal {
-// --------------------------------------------------------------------
-// Helpers:
-// --------------------------------------------------------------------
+const char QBS_DEPLOYCONFIG_ID[] = "Qbs.Deploy";
-static QString genericQbsDisplayName() {
- return QCoreApplication::translate("Qbs", "Qbs Install");
-}
-
-static Core::Id genericQbsDeployConfigurationId()
-{
- return "Qbs.Deploy";
-}
-
-// --------------------------------------------------------------------
-// QbsDeployConfiguration:
-// --------------------------------------------------------------------
-
-QbsDeployConfiguration::QbsDeployConfiguration(ProjectExplorer::Target *target, Core::Id id) :
- ProjectExplorer::DeployConfiguration(target, id)
-{ }
-
-QbsDeployConfiguration::QbsDeployConfiguration(ProjectExplorer::Target *target,
- ProjectExplorer::DeployConfiguration *source) :
- ProjectExplorer::DeployConfiguration(target, source)
-{
- cloneSteps(source);
-}
-
-// --------------------------------------------------------------------
-// QbsDeployConfigurationFactory:
-// --------------------------------------------------------------------
-
-QbsDeployConfigurationFactory::QbsDeployConfigurationFactory(QObject *parent) :
- ProjectExplorer::DeployConfigurationFactory(parent)
-{
- setObjectName(QLatin1String("QbsDeployConfiguration"));
-}
-
-QList<Core::Id> QbsDeployConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const
-{
- QList<Core::Id> ids;
- const Core::Id deviceId = ProjectExplorer::DeviceKitInformation::deviceId(parent->kit());
- if (qobject_cast<QbsProject *>(parent->project())
- && deviceId == ProjectExplorer::Constants::DESKTOP_DEVICE_ID) {
- ids << genericQbsDeployConfigurationId();
- }
- return ids;
-}
-
-QString QbsDeployConfigurationFactory::displayNameForId(Core::Id id) const
-{
- if (id == genericQbsDeployConfigurationId())
- return genericQbsDisplayName();
- return QString();
-}
-
-bool QbsDeployConfigurationFactory::canCreate(ProjectExplorer::Target *parent,
- const Core::Id id) const
-{
- return availableCreationIds(parent).contains(id);
-}
-
-ProjectExplorer::DeployConfiguration
-*QbsDeployConfigurationFactory::create(ProjectExplorer::Target *parent, Core::Id id)
-{
- Q_ASSERT(canCreate(parent, id));
-
- QbsDeployConfiguration *dc = new QbsDeployConfiguration(parent, id);
- dc->setDisplayName(genericQbsDisplayName());
- return dc;
-}
-
-bool QbsDeployConfigurationFactory::canRestore(ProjectExplorer::Target *parent,
- const QVariantMap &map) const
-{
- return canCreate(parent, ProjectExplorer::idFromMap(map));
-}
-
-ProjectExplorer::DeployConfiguration
-*QbsDeployConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
- Core::Id id = ProjectExplorer::idFromMap(map);
- QbsDeployConfiguration *dc = new QbsDeployConfiguration(parent, id);
- if (!dc->fromMap(map)) {
- delete dc;
- return 0;
- }
- return dc;
-}
-
-bool QbsDeployConfigurationFactory::canClone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *product) const
+QbsDeployConfiguration::QbsDeployConfiguration(ProjectExplorer::Target *target) :
+ ProjectExplorer::DeployConfiguration(target, QBS_DEPLOYCONFIG_ID)
{
- return canCreate(parent, product->id());
}
-ProjectExplorer::DeployConfiguration
-*QbsDeployConfigurationFactory::clone(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *product)
+QbsDeployConfigurationFactory::QbsDeployConfigurationFactory()
{
- if (!canClone(parent, product))
- return 0;
- return new QbsDeployConfiguration(parent, qobject_cast<QbsDeployConfiguration *>(product));
+ setObjectName("QbsDeployConfiguration");
+ registerDeployConfiguration<QbsDeployConfiguration>(QBS_DEPLOYCONFIG_ID);
+ setSupportedTargetDeviceTypes({ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE});
+ setSupportedProjectType(Constants::PROJECT_ID);
+ setDefaultDisplayName(QCoreApplication::translate("Qbs", "Qbs Install"));
}
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.h b/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.h
index 91ca997e23..beb9d23324 100644
--- a/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.h
+++ b/src/plugins/qbsprojectmanager/qbsdeployconfigurationfactory.h
@@ -28,22 +28,14 @@
#include <projectexplorer/deployconfiguration.h>
namespace QbsProjectManager {
-
-
namespace Internal {
-class QbsDeployConfigurationFactory;
-
class QbsDeployConfiguration : public ProjectExplorer::DeployConfiguration
{
Q_OBJECT
-private:
- QbsDeployConfiguration(ProjectExplorer::Target *target, Core::Id id);
- QbsDeployConfiguration(ProjectExplorer::Target *target,
- ProjectExplorer::DeployConfiguration *source);
-
- friend class QbsDeployConfigurationFactory;
+public:
+ explicit QbsDeployConfiguration(ProjectExplorer::Target *target);
};
class QbsDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
@@ -51,17 +43,7 @@ class QbsDeployConfigurationFactory : public ProjectExplorer::DeployConfiguratio
Q_OBJECT
public:
- explicit QbsDeployConfigurationFactory(QObject *parent = 0);
-
- QList<Core::Id> availableCreationIds(ProjectExplorer::Target *parent) const override;
- QString displayNameForId(Core::Id id) const override;
- bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override;
- ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, Core::Id id) override;
- bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::DeployConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
- bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *product) const override;
- ProjectExplorer::DeployConfiguration *clone(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *product) override;
+ QbsDeployConfigurationFactory();
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
index 8a4e9ad7b9..e196c36277 100644
--- a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
@@ -58,19 +58,17 @@ namespace Internal {
// --------------------------------------------------------------------
QbsInstallStep::QbsInstallStep(ProjectExplorer::BuildStepList *bsl) :
- ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QBS_INSTALLSTEP_ID)),
- m_job(0), m_showCompilerOutput(true), m_parser(0)
+ ProjectExplorer::BuildStep(bsl, Constants::QBS_INSTALLSTEP_ID)
{
setDisplayName(tr("Qbs Install"));
- ctor();
-}
-QbsInstallStep::QbsInstallStep(ProjectExplorer::BuildStepList *bsl, const QbsInstallStep *other) :
- ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QBS_INSTALLSTEP_ID)),
- m_qbsInstallOptions(other->m_qbsInstallOptions), m_job(0),
- m_showCompilerOutput(other->m_showCompilerOutput), m_parser(0)
-{
- ctor();
+ const QbsBuildConfiguration * const bc = buildConfig();
+ connect(bc, &QbsBuildConfiguration::qbsConfigurationChanged,
+ this, &QbsInstallStep::handleBuildConfigChanged);
+ if (bc->qbsStep()) {
+ connect(bc->qbsStep(), &QbsBuildStep::qbsBuildOptionsChanged,
+ this, &QbsInstallStep::handleBuildConfigChanged);
+ }
}
QbsInstallStep::~QbsInstallStep()
@@ -146,17 +144,6 @@ bool QbsInstallStep::keepGoing() const
return m_qbsInstallOptions.keepGoing();
}
-void QbsInstallStep::ctor()
-{
- const QbsBuildConfiguration * const bc = buildConfig();
- connect(bc, &QbsBuildConfiguration::qbsConfigurationChanged,
- this, &QbsInstallStep::handleBuildConfigChanged);
- if (bc->qbsStep()) {
- connect(bc->qbsStep(), &QbsBuildStep::qbsBuildOptionsChanged,
- this, &QbsInstallStep::handleBuildConfigChanged);
- }
-}
-
const QbsBuildConfiguration *QbsInstallStep::buildConfig() const
{
return static_cast<QbsBuildConfiguration *>(
@@ -346,30 +333,13 @@ void QbsInstallStepConfigWidget::changeKeepGoing(bool kg)
// QbsInstallStepFactory:
// --------------------------------------------------------------------
-QbsInstallStepFactory::QbsInstallStepFactory(QObject *parent) :
- ProjectExplorer::IBuildStepFactory(parent)
-{ }
-
-QList<ProjectExplorer::BuildStepInfo> QbsInstallStepFactory::availableSteps(ProjectExplorer::BuildStepList *parent) const
+QbsInstallStepFactory::QbsInstallStepFactory()
{
- if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_DEPLOY
- && qobject_cast<ProjectExplorer::DeployConfiguration *>(parent->parent())
- && qobject_cast<QbsProject *>(parent->target()->project()))
- return {{ Constants::QBS_INSTALLSTEP_ID, tr("Qbs Install") }};
- return {};
-}
-
-ProjectExplorer::BuildStep *QbsInstallStepFactory::create(ProjectExplorer::BuildStepList *parent,
- const Core::Id id)
-{
- Q_UNUSED(id);
- return new QbsInstallStep(parent);
-}
-
-ProjectExplorer::BuildStep *QbsInstallStepFactory::clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *product)
-{
- return new QbsInstallStep(parent, static_cast<QbsInstallStep *>(product));
+ registerStep<QbsInstallStep>(Constants::QBS_INSTALLSTEP_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
+ setSupportedDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
+ setSupportedProjectType(Constants::PROJECT_ID);
+ setDisplayName(tr("Qbs Install"));
}
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.h b/src/plugins/qbsprojectmanager/qbsinstallstep.h
index ff1c5b9b1e..74e930570a 100644
--- a/src/plugins/qbsprojectmanager/qbsinstallstep.h
+++ b/src/plugins/qbsprojectmanager/qbsinstallstep.h
@@ -43,7 +43,6 @@ class QbsInstallStep : public ProjectExplorer::BuildStep
public:
explicit QbsInstallStep(ProjectExplorer::BuildStepList *bsl);
- QbsInstallStep(ProjectExplorer::BuildStepList *bsl, const QbsInstallStep *other);
~QbsInstallStep() override;
bool init(QList<const BuildStep *> &earlierSteps) override;
@@ -68,7 +67,6 @@ signals:
void changed();
private:
- void ctor();
const QbsBuildConfiguration *buildConfig() const;
void installDone(bool success);
void handleTaskStarted(const QString &desciption, int max);
@@ -84,11 +82,11 @@ private:
qbs::InstallOptions m_qbsInstallOptions;
- QFutureInterface<bool> *m_fi;
- qbs::InstallJob *m_job;
+ QFutureInterface<bool> *m_fi = nullptr;
+ qbs::InstallJob *m_job = nullptr;
int m_progressBase;
- bool m_showCompilerOutput;
- ProjectExplorer::IOutputParser *m_parser;
+ bool m_showCompilerOutput = true;
+ ProjectExplorer::IOutputParser *m_parser = nullptr;
friend class QbsInstallStepConfigWidget;
};
@@ -119,18 +117,12 @@ private:
bool m_ignoreChange;
};
-class QbsInstallStepFactory : public ProjectExplorer::IBuildStepFactory
+class QbsInstallStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit QbsInstallStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override;
+ QbsInstallStepFactory();
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h
index 8bc262710c..c55da0f3d7 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h
@@ -58,6 +58,7 @@ const char ACTION_REBUILD_SUBPROJECT[] = "Qbs.RebuildSubproject";
const char QBS_BUILDSTEP_ID[] = "Qbs.BuildStep";
const char QBS_CLEANSTEP_ID[] = "Qbs.CleanStep";
const char QBS_INSTALLSTEP_ID[] = "Qbs.InstallStep";
+const char QBS_BC_ID[] = "Qbs.QbsBuildConfiguration";
// QBS strings:
const char QBS_VARIANT_DEBUG[] = "debug";
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
index 26196dc2e6..1b2c5b324e 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
@@ -72,21 +72,6 @@ const char QBS_RC_PREFIX[] = "Qbs.RunConfiguration:";
static QString rcNameSeparator() { return QLatin1String("---Qbs.RC.NameSeparator---"); }
-static QString uniqueProductNameFromId(Core::Id id)
-{
- const QString suffix = id.suffixAfter(QBS_RC_PREFIX);
- return suffix.left(suffix.indexOf(rcNameSeparator()));
-}
-
-static QString productDisplayNameFromId(Core::Id id)
-{
- const QString suffix = id.suffixAfter(QBS_RC_PREFIX);
- const int sepPos = suffix.indexOf(rcNameSeparator());
- if (sepPos == -1)
- return suffix;
- return suffix.mid(sepPos + rcNameSeparator().count());
-}
-
const qbs::ProductData findProduct(const qbs::ProjectData &pro, const QString &uniqeName)
{
foreach (const qbs::ProductData &product, pro.allProducts()) {
@@ -101,7 +86,7 @@ const qbs::ProductData findProduct(const qbs::ProjectData &pro, const QString &u
// --------------------------------------------------------------------
QbsRunConfiguration::QbsRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, QBS_RC_PREFIX)
{
auto envAspect = new LocalEnvironmentAspect(this,
[](RunConfiguration *rc, Environment &env) {
@@ -138,14 +123,30 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target)
this, &QbsRunConfiguration::installStepChanged);
}
-void QbsRunConfiguration::initialize(Core::Id id)
+bool QbsRunConfiguration::fromMap(const QVariantMap &map)
{
- RunConfiguration::initialize(id);
+ if (!RunConfiguration::fromMap(map))
+ return false;
+
+ QString extraId = ProjectExplorer::idFromMap(map).suffixAfter(id());
+ if (!extraId.isEmpty()) {
+ const int sepPos = extraId.indexOf(rcNameSeparator());
+ m_uniqueProductName = extraId.left(sepPos);
+ m_productDisplayName = sepPos == -1 ? QString() : extraId.mid(sepPos + rcNameSeparator().size());
+ }
setDefaultDisplayName(defaultDisplayName());
installStepChanged();
+
+ return true;
+}
+
+QString QbsRunConfiguration::extraId() const
+{
+ return m_uniqueProductName + rcNameSeparator() + m_productDisplayName;
}
+
QWidget *QbsRunConfiguration::createConfigurationWidget()
{
return new QbsRunConfigurationWidget(this);
@@ -266,17 +267,17 @@ void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
QString QbsRunConfiguration::buildSystemTarget() const
{
- return productDisplayNameFromId(id());
+ return m_productDisplayName;
}
QString QbsRunConfiguration::uniqueProductName() const
{
- return uniqueProductNameFromId(id());
+ return m_uniqueProductName;
}
QString QbsRunConfiguration::defaultDisplayName()
{
- QString defaultName = productDisplayNameFromId(id());
+ QString defaultName = m_productDisplayName;
if (defaultName.isEmpty())
defaultName = tr("Qbs Run Configuration");
return defaultName;
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
index 2d5ac1d263..0566adb590 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
@@ -68,9 +68,9 @@ signals:
void targetInformationChanged();
void usingDyldImageSuffixChanged(bool);
-
private:
- void initialize(Core::Id id) override;
+ bool fromMap(const QVariantMap &map) final;
+ QString extraId() const final;
void installStepChanged();
void installStepToBeRemoved(int pos);
@@ -81,6 +81,8 @@ private:
QbsInstallStep *m_currentInstallStep = nullptr; // We do not take ownership!
ProjectExplorer::BuildStepList *m_currentBuildStepList = nullptr; // We do not take ownership!
+ QString m_uniqueProductName;
+ QString m_productDisplayName;
};
class QbsRunConfigurationWidget : public QWidget
diff --git a/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp b/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp
index 7a36dbbf1b..9e7b27ba49 100644
--- a/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp
+++ b/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.cpp
@@ -28,7 +28,6 @@
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/target.h>
#include <android/androidmanager.h>
using namespace ProjectExplorer;
@@ -36,32 +35,17 @@ using namespace ProjectExplorer;
namespace QmakeAndroidSupport {
namespace Internal {
-AndroidPackageInstallationFactory::AndroidPackageInstallationFactory(QObject *parent)
- : IBuildStepFactory(parent)
+AndroidPackageInstallationFactory::AndroidPackageInstallationFactory()
{
+ registerStep<AndroidPackageInstallationStep>(AndroidPackageInstallationStep::Id);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ setRepeatable(false);
+ setDisplayName(tr("Deploy to device"));
}
-QList<BuildStepInfo> AndroidPackageInstallationFactory::availableSteps(BuildStepList *parent) const
+bool AndroidPackageInstallationFactory::canHandle(BuildStepList *bsl) const
{
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
- return {};
- if (!Android::AndroidManager::supportsAndroid(parent->target()))
- return {};
- if (parent->contains(AndroidPackageInstallationStep::Id))
- return {};
-
- return {{AndroidPackageInstallationStep::Id, tr("Deploy to device"), BuildStepInfo::Uncreatable}};
-}
-
-BuildStep *AndroidPackageInstallationFactory::create(BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id)
- return new AndroidPackageInstallationStep(parent);
-}
-
-BuildStep *AndroidPackageInstallationFactory::clone(BuildStepList *parent, BuildStep *product)
-{
- return new AndroidPackageInstallationStep(parent, static_cast<AndroidPackageInstallationStep*>(product));
+ return BuildStepFactory::canHandle(bsl) && Android::AndroidManager::supportsAndroid(bsl->target());
}
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h b/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h
index b1fe533f97..9b4a2f10d4 100644
--- a/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h
+++ b/src/plugins/qmakeandroidsupport/androidpackageinstallationfactory.h
@@ -30,19 +30,14 @@
namespace QmakeAndroidSupport {
namespace Internal {
-class AndroidPackageInstallationFactory: public ProjectExplorer::IBuildStepFactory
+class AndroidPackageInstallationFactory: public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit AndroidPackageInstallationFactory(QObject *parent = 0);
+ AndroidPackageInstallationFactory();
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *product) override;
+ bool canHandle(ProjectExplorer::BuildStepList *bsl) const override;
};
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/androidpackageinstallationstep.cpp b/src/plugins/qmakeandroidsupport/androidpackageinstallationstep.cpp
index c7d0db210b..b9280cc7e0 100644
--- a/src/plugins/qmakeandroidsupport/androidpackageinstallationstep.cpp
+++ b/src/plugins/qmakeandroidsupport/androidpackageinstallationstep.cpp
@@ -45,17 +45,13 @@ using namespace QmakeAndroidSupport::Internal;
const Core::Id AndroidPackageInstallationStep::Id = Core::Id("Qt4ProjectManager.AndroidPackageInstallationStep");
AndroidPackageInstallationStep::AndroidPackageInstallationStep(ProjectExplorer::BuildStepList *bsl)
- : AbstractProcessStep(bsl, Id)
+ : AbstractProcessStep(bsl, AndroidPackageInstallationStep::Id)
{
const QString name = tr("Copy application data");
setDefaultDisplayName(name);
setDisplayName(name);
}
-AndroidPackageInstallationStep::AndroidPackageInstallationStep(ProjectExplorer::BuildStepList *bc, AndroidPackageInstallationStep *other)
- : AbstractProcessStep(bc, other)
-{ }
-
bool AndroidPackageInstallationStep::init(QList<const BuildStep *> &earlierSteps)
{
ProjectExplorer::BuildConfiguration *bc = buildConfiguration();
diff --git a/src/plugins/qmakeandroidsupport/androidpackageinstallationstep.h b/src/plugins/qmakeandroidsupport/androidpackageinstallationstep.h
index c27d43aa4f..3f163a0e27 100644
--- a/src/plugins/qmakeandroidsupport/androidpackageinstallationstep.h
+++ b/src/plugins/qmakeandroidsupport/androidpackageinstallationstep.h
@@ -44,9 +44,8 @@ public:
bool immutable() const override;
void run(QFutureInterface<bool> &fi) override;
+
private:
- AndroidPackageInstallationStep(ProjectExplorer::BuildStepList *bc,
- AndroidPackageInstallationStep *other);
QStringList m_androidDirsToClean;
static const Core::Id Id;
};
diff --git a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
index 3cb4fa73ba..ef0ccca475 100644
--- a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
+++ b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
@@ -38,6 +38,7 @@
#include <qmakeprojectmanager/qmakebuildinfo.h>
#include <qmakeprojectmanager/qmakeproject.h>
+#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
using namespace Android;
using namespace ProjectExplorer;
@@ -46,9 +47,16 @@ using namespace QmakeProjectManager;
namespace QmakeAndroidSupport {
namespace Internal {
+// AndroidQmakeBuildConfigurationFactory
+
+AndroidQmakeBuildConfigurationFactory::AndroidQmakeBuildConfigurationFactory()
+{
+ registerBuildConfiguration<AndroidQmakeBuildConfiguration>(QmakeProjectManager::Constants::QMAKE_BC_ID);
+}
+
int AndroidQmakeBuildConfigurationFactory::priority(const Kit *k, const QString &projectPath) const
{
- if (QmakeBuildConfigurationFactory::priority(k, projectPath) >= 0
+ if (IBuildConfigurationFactory::priority(k, projectPath) >= 0
&& Android::AndroidManager::supportsAndroid(k))
return 1;
return -1;
@@ -56,44 +64,13 @@ int AndroidQmakeBuildConfigurationFactory::priority(const Kit *k, const QString
int AndroidQmakeBuildConfigurationFactory::priority(const Target *parent) const
{
- if (QmakeBuildConfigurationFactory::priority(parent) >= 0
+ if (IBuildConfigurationFactory::priority(parent) >= 0
&& Android::AndroidManager::supportsAndroid(parent))
return 1;
return -1;
}
-BuildConfiguration *AndroidQmakeBuildConfigurationFactory::create(Target *parent,
- const BuildInfo *info) const
-{
- auto qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
- auto bc = new AndroidQmakeBuildConfiguration(parent);
- configureBuildConfiguration(parent, bc, qmakeInfo);
-
- BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- buildSteps->insertStep(2, new AndroidPackageInstallationStep(buildSteps));
- buildSteps->insertStep(3, new QmakeAndroidBuildApkStep(buildSteps));
- return bc;
-}
-
-BuildConfiguration *AndroidQmakeBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *source)
-{
- if (!canClone(parent, source))
- return 0;
- auto *oldbc = static_cast<AndroidQmakeBuildConfiguration *>(source);
- return new AndroidQmakeBuildConfiguration(parent, oldbc);
-}
-
-BuildConfiguration *AndroidQmakeBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
- auto bc = new AndroidQmakeBuildConfiguration(parent);
- if (bc->fromMap(map))
- return bc;
- delete bc;
- return 0;
-}
-
+// AndroidQmakeBuildConfiguration
AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(Target *target)
: QmakeBuildConfiguration(target)
@@ -109,15 +86,14 @@ AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(Target *target)
connect(this, &AndroidQmakeBuildConfiguration::enabledChanged, this, updateGrade);
}
-AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(Target *target, AndroidQmakeBuildConfiguration *source)
- : QmakeBuildConfiguration(target, source)
+void AndroidQmakeBuildConfiguration::initialize(const BuildInfo *info)
{
- updateCacheAndEmitEnvironmentChanged();
-}
+ QmakeBuildConfiguration::initialize(info);
+
+ BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ buildSteps->appendStep(new AndroidPackageInstallationStep(buildSteps));
+ buildSteps->appendStep(new QmakeAndroidBuildApkStep(buildSteps));
-AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(Target *target, Core::Id id)
- : QmakeBuildConfiguration(target, id)
-{
updateCacheAndEmitEnvironmentChanged();
}
diff --git a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
index 55e68bf719..db2afa8980 100644
--- a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
+++ b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
@@ -33,31 +33,25 @@ namespace Internal {
class AndroidQmakeBuildConfigurationFactory : public QmakeProjectManager::QmakeBuildConfigurationFactory
{
public:
- explicit AndroidQmakeBuildConfigurationFactory(QObject *parent = 0)
- : QmakeBuildConfigurationFactory(parent)
- { }
+ AndroidQmakeBuildConfigurationFactory();
int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override;
int priority(const ProjectExplorer::Target *parent) const override;
-
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const override;
- ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) override;
- ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
};
class AndroidQmakeBuildConfiguration : public QmakeProjectManager::QmakeBuildConfiguration
{
- friend class AndroidQmakeBuildConfigurationFactory;
Q_OBJECT
+
public:
explicit AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target);
- AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, AndroidQmakeBuildConfiguration *source);
- AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
+
+ void initialize(const ProjectExplorer::BuildInfo *info) override;
void addToEnvironment(Utils::Environment &env) const override;
void manifestSaved();
using BuildConfiguration::updateCacheAndEmitEnvironmentChanged;
+
private:
mutable QString m_androidNdkPlatform;
};
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
index fdc9c21020..78d9cfff2a 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
@@ -39,8 +39,10 @@
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/target.h>
#include <qtsupport/qtkitinformation.h>
+
#include <qmakeprojectmanager/qmakenodes.h>
#include <qmakeprojectmanager/qmakeproject.h>
+#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
#include <utils/qtcprocess.h>
@@ -55,42 +57,31 @@ namespace Internal {
const Core::Id ANDROID_BUILD_APK_ID("QmakeProjectManager.AndroidBuildApkStep");
-//////////////////
+
// QmakeAndroidBuildApkStepFactory
-/////////////////
-QmakeAndroidBuildApkStepFactory::QmakeAndroidBuildApkStepFactory(QObject *parent)
- : IBuildStepFactory(parent)
+QmakeAndroidBuildApkStepFactory::QmakeAndroidBuildApkStepFactory()
{
+ registerStep<QmakeAndroidBuildApkStep>(ANDROID_BUILD_APK_ID);
+ setSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ setDisplayName(tr("Build Android APK"));
+ setRepeatable(false);
}
-QList<ProjectExplorer::BuildStepInfo> QmakeAndroidBuildApkStepFactory::availableSteps(ProjectExplorer::BuildStepList *parent) const
+bool QmakeAndroidBuildApkStepFactory::canHandle(ProjectExplorer::BuildStepList *bsl) const
{
- ProjectExplorer::Target *target = parent->target();
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD
- || !target->project()->supportsKit(target->kit())
- || !AndroidManager::supportsAndroid(target)
- || !qobject_cast<QmakeProject *>(target->project())
- || parent->contains(ANDROID_BUILD_APK_ID))
- return {};
-
- return {{ANDROID_BUILD_APK_ID, tr("Build Android APK")}};
+ return BuildStepFactory::canHandle(bsl)
+ && AndroidManager::supportsAndroid(bsl->target());
}
-ProjectExplorer::BuildStep *QmakeAndroidBuildApkStepFactory::create(ProjectExplorer::BuildStepList *parent, const Core::Id id)
-{
- Q_UNUSED(id);
- return new QmakeAndroidBuildApkStep(parent);
-}
-ProjectExplorer::BuildStep *QmakeAndroidBuildApkStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product)
-{
- return new QmakeAndroidBuildApkStep(parent, static_cast<QmakeAndroidBuildApkStep *>(product));
-}
+// QmakeAndroidBuildApkStep
QmakeAndroidBuildApkStep::QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepList *bc)
- :AndroidBuildApkStep(bc, ANDROID_BUILD_APK_ID)
-{ }
+ : AndroidBuildApkStep(bc, ANDROID_BUILD_APK_ID)
+{
+}
Utils::FileName QmakeAndroidBuildApkStep::proFilePathForInputFile() const
{
@@ -100,10 +91,6 @@ Utils::FileName QmakeAndroidBuildApkStep::proFilePathForInputFile() const
return Utils::FileName();
}
-QmakeAndroidBuildApkStep::QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepList *bc, QmakeAndroidBuildApkStep *other)
- : AndroidBuildApkStep(bc, other)
-{ }
-
Utils::FileName QmakeAndroidBuildApkStep::androidPackageSourceDir() const
{
QmakeProjectManager::QmakeProject *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h
index 7706e8091b..0425a567f3 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h
@@ -31,19 +31,13 @@
namespace QmakeAndroidSupport {
namespace Internal {
-class QmakeAndroidBuildApkStepFactory : public ProjectExplorer::IBuildStepFactory
+class QmakeAndroidBuildApkStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit QmakeAndroidBuildApkStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *product) override;
+ QmakeAndroidBuildApkStepFactory();
+ bool canHandle(ProjectExplorer::BuildStepList *bsl) const;
};
class QmakeAndroidBuildApkStep : public Android::AndroidBuildApkStep
@@ -55,12 +49,7 @@ public:
void setProFilePathForInputFile(const QString &path);
protected:
- friend class QmakeAndroidBuildApkStepFactory;
- QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepList *bc, QmakeAndroidBuildApkStep *other);
-
Utils::FileName androidPackageSourceDir() const override;
-
-protected:
bool init(QList<const BuildStep *> &earlierSteps) override;
void run(QFutureInterface<bool> &fi) override;
void processStarted() override;
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp
index aa6deea385..d27ee943bb 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp
@@ -49,32 +49,31 @@ namespace Internal {
static const char ANDROID_RC_ID_PREFIX[] = "Qt4ProjectManager.AndroidRunConfiguration:";
-static Utils::FileName pathFromId(const Core::Id id)
-{
- return Utils::FileName::fromString(id.suffixAfter(ANDROID_RC_ID_PREFIX));
-}
-
QmakeAndroidRunConfiguration::QmakeAndroidRunConfiguration(Target *target)
- : AndroidRunConfiguration(target)
+ : AndroidRunConfiguration(target, ANDROID_RC_ID_PREFIX)
{}
-void QmakeAndroidRunConfiguration::initialize(Core::Id id)
+QString QmakeAndroidRunConfiguration::extraId() const
{
- AndroidRunConfiguration::initialize(id);
- m_proFilePath = pathFromId(id);
-
- setDefaultDisplayName(defaultDisplayName());
- QTC_CHECK(!m_proFilePath.isEmpty());
+ return m_proFilePath.toString();
}
bool QmakeAndroidRunConfiguration::fromMap(const QVariantMap &map)
{
+ if (!AndroidRunConfiguration::fromMap(map))
+ return false;
+
QmakeProject *project = qmakeProject();
QTC_ASSERT(project, return false);
const QDir projectDir = QDir(project->projectDirectory().toString());
m_proFilePath = Utils::FileName::fromUserInput(projectDir.filePath(map.value(PRO_FILE_KEY).toString()));
- return AndroidRunConfiguration::fromMap(map);
+ QString extraId = ProjectExplorer::idFromMap(map).suffixAfter(id());
+ if (!extraId.isEmpty())
+ m_proFilePath = Utils::FileName::fromString(extraId);
+
+ setDefaultDisplayName(defaultDisplayName());
+ return true;
}
QVariantMap QmakeAndroidRunConfiguration::toMap() const
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h
index 7a85d5bbb4..9132006cfd 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h
@@ -29,10 +29,7 @@
#include <utils/fileutils.h>
-namespace QmakeProjectManager {
-class QmakeProFile;
-class QmakeProject;
-} // namespace QmakeProjectManager
+namespace QmakeProjectManager { class QmakeProject; }
namespace QmakeAndroidSupport {
namespace Internal {
@@ -46,14 +43,10 @@ public:
Utils::FileName proFilePath() const;
+private:
QString disabledReason() const override;
-
QString buildSystemTarget() const final;
-
-private:
- friend class ProjectExplorer::IRunConfigurationFactory;
- void initialize(Core::Id id) override;
-
+ QString extraId() const final;
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
QString defaultDisplayName();
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp
index ee5dff0a14..79deb4efc5 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp
@@ -58,11 +58,6 @@ QString QmakeAndroidRunConfigurationFactory::displayNameForBuildTarget(const QSt
return QFileInfo(buildTarget).completeBaseName();
}
-bool QmakeAndroidRunConfigurationFactory::canCreateHelper(Target *parent, const QString &buildTarget) const
-{
- return availableBuildTargets(parent, UserCreate).contains(buildTarget);
-}
-
QList<QString> QmakeAndroidRunConfigurationFactory::availableBuildTargets(Target *parent, CreationMode mode) const
{
auto project = static_cast<QmakeProject *>(parent->project());
@@ -74,18 +69,5 @@ bool QmakeAndroidRunConfigurationFactory::canHandle(Target *t) const
return IRunConfigurationFactory::canHandle(t) && AndroidManager::supportsAndroid(t);
}
-#ifdef Q_CC_GCC
-# warning FIX ME !!!
-#endif
-QList<RunConfiguration *> QmakeAndroidRunConfigurationFactory::runConfigurationsForNode(Target *t, Node *n)
-{
- QList<RunConfiguration *> result;
- foreach (RunConfiguration *rc, t->runConfigurations())
- if (QmakeAndroidRunConfiguration *qt4c = qobject_cast<QmakeAndroidRunConfiguration *>(rc))
- if (qt4c->proFilePath() == n->filePath())
- result << rc;
- return result;
-}
-
} // namespace Internal
} // namespace Android
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h
index a9a1514580..ea5456d45e 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.h
@@ -46,12 +46,6 @@ public:
QList<QString> availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override;
QString displayNameForBuildTarget(const QString &buildTarget) const override;
- bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override;
-
- QList<ProjectExplorer::RunConfiguration *> runConfigurationsForNode(ProjectExplorer::Target *t,
- ProjectExplorer::Node *n);
-
-private:
bool canHandle(ProjectExplorer::Target *t) const override;
};
diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
index ca6abc4af2..20f5b04e01 100644
--- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
@@ -72,7 +72,7 @@ const char USE_LIBRARY_SEARCH_PATH[] = "QmakeProjectManager.QmakeRunConfiguratio
//
DesktopQmakeRunConfiguration::DesktopQmakeRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, QMAKE_RC_PREFIX)
{
addExtraAspect(new LocalEnvironmentAspect(this, [](RunConfiguration *rc, Environment &env) {
static_cast<DesktopQmakeRunConfiguration *>(rc)->addToBaseEnvironment(env);
@@ -88,12 +88,9 @@ DesktopQmakeRunConfiguration::DesktopQmakeRunConfiguration(Target *target)
this, &DesktopQmakeRunConfiguration::proFileEvaluated);
}
-void DesktopQmakeRunConfiguration::initialize(Core::Id id)
+QString DesktopQmakeRunConfiguration::extraId() const
{
- RunConfiguration::initialize(id);
- m_proFilePath = FileName::fromString(id.suffixAfter(QMAKE_RC_PREFIX));
-
- updateTargetInformation();
+ return m_proFilePath.toString();
}
void DesktopQmakeRunConfiguration::proFileEvaluated()
@@ -260,6 +257,10 @@ bool DesktopQmakeRunConfiguration::fromMap(const QVariantMap &map)
m_isUsingDyldImageSuffix = map.value(QLatin1String(USE_DYLD_IMAGE_SUFFIX_KEY), false).toBool();
m_isUsingLibrarySearchPath = map.value(QLatin1String(USE_LIBRARY_SEARCH_PATH), true).toBool();
+ QString extraId = ProjectExplorer::idFromMap(map).suffixAfter(id());
+ if (!extraId.isEmpty())
+ m_proFilePath = FileName::fromString(extraId);
+
return RunConfiguration::fromMap(map);
}
diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h
index b59fa370bd..fe12be10c5 100644
--- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h
+++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h
@@ -52,7 +52,6 @@ class DesktopQmakeRunConfiguration : public ProjectExplorer::RunConfiguration
Q_OBJECT
// to change the display name and arguments and set the userenvironmentchanges
friend class DesktopQmakeRunConfigurationWidget;
- friend class ProjectExplorer::IRunConfigurationFactory;
public:
explicit DesktopQmakeRunConfiguration(ProjectExplorer::Target *target);
@@ -87,8 +86,8 @@ signals:
void effectiveTargetInformationChanged();
protected:
- void initialize(Core::Id id) override;
bool fromMap(const QVariantMap &map) override;
+ QString extraId() const override;
private:
void proFileEvaluated();
diff --git a/src/plugins/qmakeprojectmanager/makestep.cpp b/src/plugins/qmakeprojectmanager/makestep.cpp
index 24c480ffc9..bbcf04fdc8 100644
--- a/src/plugins/qmakeprojectmanager/makestep.cpp
+++ b/src/plugins/qmakeprojectmanager/makestep.cpp
@@ -58,30 +58,13 @@ const char MAKE_COMMAND_KEY[] = "Qt4ProjectManager.MakeStep.MakeCommand";
const char CLEAN_KEY[] = "Qt4ProjectManager.MakeStep.Clean";
}
-MakeStep::MakeStep(BuildStepList *bsl) :
- AbstractProcessStep(bsl, Core::Id(MAKESTEP_BS_ID))
-{
- ctor();
-}
-
-MakeStep::MakeStep(BuildStepList *bsl, MakeStep *bs) :
- AbstractProcessStep(bsl, bs),
- m_clean(bs->m_clean),
- m_userArgs(bs->m_userArgs),
- m_makeCmd(bs->m_makeCmd)
-{
- ctor();
-}
-
-MakeStep::MakeStep(BuildStepList *bsl, Core::Id id) :
- AbstractProcessStep(bsl, id)
-{
- ctor();
-}
-
-void MakeStep::ctor()
+MakeStep::MakeStep(BuildStepList *bsl)
+ : AbstractProcessStep(bsl, MAKESTEP_BS_ID)
{
setDefaultDisplayName(tr("Make", "Qt MakeStep display name."));
+ m_clean = bsl->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN;
+ if (m_clean)
+ m_userArgs = "clean";
}
void MakeStep::setMakeCommand(const QString &make)
@@ -94,16 +77,6 @@ QmakeBuildConfiguration *MakeStep::qmakeBuildConfiguration() const
return static_cast<QmakeBuildConfiguration *>(buildConfiguration());
}
-void MakeStep::setClean(bool clean)
-{
- m_clean = clean;
-}
-
-bool MakeStep::isClean() const
-{
- return m_clean;
-}
-
QString MakeStep::makeCommand() const
{
return m_makeCmd;
@@ -483,40 +456,11 @@ void MakeStepConfigWidget::makeArgumentsLineEdited()
// MakeStepFactory
///
-MakeStepFactory::MakeStepFactory(QObject *parent) :
- IBuildStepFactory(parent)
-{
-}
-
-QList<BuildStepInfo> MakeStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->target()->project()->id() != Constants::QMAKEPROJECT_ID)
- return {};
-
- return {{MAKESTEP_BS_ID, tr("Make")}};
-}
-
-BuildStep *MakeStepFactory::create(BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id);
- MakeStep *step = new MakeStep(parent);
- if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) {
- step->setClean(true);
- step->setUserArguments("clean");
- }
- return step;
-}
-
-BuildStep *MakeStepFactory::clone(BuildStepList *parent, BuildStep *source)
-{
- return new MakeStep(parent, static_cast<MakeStep *>(source));
-}
-
-BuildStep *MakeStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
+MakeStepFactory::MakeStepFactory()
{
- MakeStep *bs(new MakeStep(parent));
- if (bs->fromMap(map))
- return bs;
- delete bs;
- return 0;
+ registerStep<MakeStep>(MAKESTEP_BS_ID);
+ setSupportedProjectType(Constants::QMAKEPROJECT_ID);
+ setDisplayName(tr("Make"));
+ setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_BUILD,
+ ProjectExplorer::Constants::BUILDSTEPS_CLEAN});
}
diff --git a/src/plugins/qmakeprojectmanager/makestep.h b/src/plugins/qmakeprojectmanager/makestep.h
index 72a0b54e2e..075b50e1b7 100644
--- a/src/plugins/qmakeprojectmanager/makestep.h
+++ b/src/plugins/qmakeprojectmanager/makestep.h
@@ -29,11 +29,6 @@
#include <projectexplorer/abstractprocessstep.h>
-namespace ProjectExplorer {
-class BuildStep;
-class IBuildStepFactory;
-}
-
namespace QmakeProjectManager {
class QmakeBuildConfiguration;
@@ -43,19 +38,12 @@ namespace Internal {
namespace Ui { class MakeStep; }
-class MakeStepFactory : public ProjectExplorer::IBuildStepFactory
+class MakeStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit MakeStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) 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;
+ MakeStepFactory();
};
} //namespace Internal
@@ -80,7 +68,6 @@ public:
bool immutable() const override;
QString userArguments();
void setUserArguments(const QString &arguments);
- void setClean(bool clean);
bool isClean() const;
QString makeCommand() const;
@@ -91,13 +78,9 @@ public:
signals:
void userArgumentsChanged();
-protected:
- MakeStep(ProjectExplorer::BuildStepList *bsl, MakeStep *bs);
- MakeStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
+private:
bool fromMap(const QVariantMap &map) override;
-private:
- void ctor();
void setMakeCommand(const QString &make);
QStringList automaticallyAddedArguments() const;
bool m_clean = false;
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
index 5d3332b9cb..8594d89a1d 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
@@ -93,32 +93,71 @@ static FileName defaultBuildDirectory(const QString &projectPath,
suffix, type));
}
-const char QMAKE_BC_ID[] = "Qt4ProjectManager.Qt4BuildConfiguration";
const char USE_SHADOW_BUILD_KEY[] = "Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild";
const char BUILD_CONFIGURATION_KEY[] = "Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration";
enum { debug = 0 };
QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target)
- : QmakeBuildConfiguration(target, Core::Id(QMAKE_BC_ID))
+ : BuildConfiguration(target, Constants::QMAKE_BC_ID)
{
connect(this, &BuildConfiguration::buildDirectoryChanged,
this, &QmakeBuildConfiguration::emitProFileEvaluateNeeded);
+ connect(this, &BuildConfiguration::environmentChanged,
+ this, &QmakeBuildConfiguration::emitProFileEvaluateNeeded);
+ connect(target, &Target::kitChanged,
+ this, &QmakeBuildConfiguration::kitChanged);
+ MacroExpander *expander = macroExpander();
+ expander->registerVariable("Qmake:Makefile", "Qmake makefile", [this]() -> QString {
+ const QString file = makefile();
+ if (!file.isEmpty())
+ return file;
+ return QLatin1String("Makefile");
+ });
+ connect(ToolChainManager::instance(), &ToolChainManager::toolChainUpdated,
+ this, &QmakeBuildConfiguration::toolChainUpdated);
+ connect(QtVersionManager::instance(), &QtVersionManager::qtVersionsChanged,
+ this, &QmakeBuildConfiguration::qtVersionsChanged);
}
-QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id) :
- BuildConfiguration(target, id)
+void QmakeBuildConfiguration::initialize(const BuildInfo *info)
{
- ctor();
-}
+ BuildConfiguration::initialize(info);
-QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, QmakeBuildConfiguration *source) :
- BuildConfiguration(target, source),
- m_shadowBuild(source->m_shadowBuild),
- m_qmakeBuildConfiguration(source->m_qmakeBuildConfiguration)
-{
- cloneSteps(source);
- ctor();
+ BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ auto qmakeStep = new QMakeStep(buildSteps);
+ buildSteps->appendStep(qmakeStep);
+ buildSteps->appendStep(new MakeStep(buildSteps));
+
+ BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
+ cleanSteps->appendStep(new MakeStep(cleanSteps));
+
+ const QmakeBuildInfo *qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
+ BaseQtVersion *version = QtKitInformation::qtVersion(target()->kit());
+
+ BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
+ if (qmakeInfo->buildType == BuildConfiguration::Debug)
+ config |= BaseQtVersion::DebugBuild;
+ else
+ config &= ~BaseQtVersion::DebugBuild;
+
+ QString additionalArguments = qmakeInfo->additionalArguments;
+ if (!additionalArguments.isEmpty())
+ qmakeStep->setUserArguments(additionalArguments);
+ qmakeStep->setLinkQmlDebuggingLibrary(qmakeInfo->config.linkQmlDebuggingQQ2);
+ qmakeStep->setSeparateDebugInfo(qmakeInfo->config.separateDebugInfo);
+ qmakeStep->setUseQtQuickCompiler(qmakeInfo->config.useQtQuickCompiler);
+
+ setQMakeBuildConfiguration(config);
+
+ FileName directory = qmakeInfo->buildDirectory;
+ if (directory.isEmpty()) {
+ directory = defaultBuildDirectory(target()->project()->projectFilePath().toString(),
+ target()->kit(), qmakeInfo->displayName, buildType());
+ }
+
+ setBuildDirectory(directory);
+ updateCacheAndEmitEnvironmentChanged();
}
QmakeBuildConfiguration::~QmakeBuildConfiguration()
@@ -142,31 +181,9 @@ bool QmakeBuildConfiguration::fromMap(const QVariantMap &map)
m_qmakeBuildConfiguration = BaseQtVersion::QmakeBuildConfigs(map.value(QLatin1String(BUILD_CONFIGURATION_KEY)).toInt());
m_lastKitState = LastKitState(target()->kit());
-
- connect(ToolChainManager::instance(), &ToolChainManager::toolChainUpdated,
- this, &QmakeBuildConfiguration::toolChainUpdated);
- connect(QtVersionManager::instance(), &QtVersionManager::qtVersionsChanged,
- this, &QmakeBuildConfiguration::qtVersionsChanged);
return true;
}
-void QmakeBuildConfiguration::ctor()
-{
- updateCacheAndEmitEnvironmentChanged();
-
- connect(this, &BuildConfiguration::environmentChanged,
- this, &QmakeBuildConfiguration::emitProFileEvaluateNeeded);
- connect(target(), &Target::kitChanged,
- this, &QmakeBuildConfiguration::kitChanged);
- MacroExpander *expander = macroExpander();
- expander->registerVariable("Qmake:Makefile", "Qmake makefile", [this]() -> QString {
- const QString file = makefile();
- if (!file.isEmpty())
- return file;
- return QLatin1String("Makefile");
- });
-}
-
void QmakeBuildConfiguration::kitChanged()
{
LastKitState newState = LastKitState(target()->kit());
@@ -529,25 +546,14 @@ void QmakeBuildConfiguration::setEnabled(bool enabled)
\class QmakeBuildConfigurationFactory
*/
-QmakeBuildConfigurationFactory::QmakeBuildConfigurationFactory(QObject *parent) :
- IBuildConfigurationFactory(parent)
+QmakeBuildConfigurationFactory::QmakeBuildConfigurationFactory()
{
- update();
+ registerBuildConfiguration<QmakeBuildConfiguration>(Constants::QMAKE_BC_ID);
+ setSupportedProjectType(Constants::QMAKEPROJECT_ID);
+ setSupportedProjectMimeTypeName(Constants::PROFILE_MIMETYPE);
connect(QtVersionManager::instance(), &QtVersionManager::qtVersionsChanged,
- this, &QmakeBuildConfigurationFactory::update);
-}
-
-void QmakeBuildConfigurationFactory::update()
-{
- emit availableCreationIdsChanged();
-}
-
-bool QmakeBuildConfigurationFactory::canHandle(const Target *t) const
-{
- if (!t->project()->supportsKit(t->kit()))
- return false;
- return qobject_cast<QmakeProject *>(t->project());
+ this, &IBuildConfigurationFactory::availableCreationIdsChanged);
}
QmakeBuildInfo *QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
@@ -604,11 +610,6 @@ QmakeBuildInfo *QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
return info;
}
-int QmakeBuildConfigurationFactory::priority(const Target *parent) const
-{
- return canHandle(parent) ? 0 : -1;
-}
-
static QList<BuildConfiguration::BuildType> availableBuildTypes(const BaseQtVersion *version)
{
QList<BuildConfiguration::BuildType> types = {BuildConfiguration::Debug,
@@ -635,13 +636,6 @@ QList<BuildInfo *> QmakeBuildConfigurationFactory::availableBuilds(const Target
return result;
}
-int QmakeBuildConfigurationFactory::priority(const Kit *k, const QString &projectPath) const
-{
- if (k && Utils::mimeTypeForFile(projectPath).matchesName(Constants::PROFILE_MIMETYPE))
- return 0;
- return -1;
-}
-
QList<BuildInfo *> QmakeBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
{
QList<BuildInfo *> result;
@@ -655,98 +649,6 @@ QList<BuildInfo *> QmakeBuildConfigurationFactory::availableSetups(const Kit *k,
return result;
}
-void QmakeBuildConfigurationFactory::configureBuildConfiguration(Target *parent,
- QmakeBuildConfiguration *bc,
- const QmakeBuildInfo *qmakeInfo) const
-{
- BaseQtVersion *version = QtKitInformation::qtVersion(parent->kit());
-
- BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
- if (qmakeInfo->buildType == BuildConfiguration::Debug)
- config |= BaseQtVersion::DebugBuild;
- else
- config &= ~BaseQtVersion::DebugBuild;
-
- bc->setDefaultDisplayName(qmakeInfo->displayName);
- bc->setDisplayName(qmakeInfo->displayName);
-
- BuildStepList *buildSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
- BuildStepList *cleanSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
- Q_ASSERT(buildSteps);
- Q_ASSERT(cleanSteps);
-
- QMakeStep *qmakeStep = new QMakeStep(buildSteps);
- buildSteps->insertStep(0, qmakeStep);
-
- MakeStep *makeStep = new MakeStep(buildSteps);
- buildSteps->insertStep(1, makeStep);
-
- MakeStep *cleanStep = new MakeStep(cleanSteps);
- cleanStep->setClean(true);
- cleanStep->setUserArguments(QLatin1String("clean"));
- cleanSteps->insertStep(0, cleanStep);
-
- QString additionalArguments = qmakeInfo->additionalArguments;
- if (!additionalArguments.isEmpty())
- qmakeStep->setUserArguments(additionalArguments);
- qmakeStep->setLinkQmlDebuggingLibrary(qmakeInfo->config.linkQmlDebuggingQQ2);
- qmakeStep->setSeparateDebugInfo(qmakeInfo->config.separateDebugInfo);
- qmakeStep->setUseQtQuickCompiler(qmakeInfo->config.useQtQuickCompiler);
-
- bc->setQMakeBuildConfiguration(config);
-
- FileName directory = qmakeInfo->buildDirectory;
- if (directory.isEmpty()) {
- directory = defaultBuildDirectory(parent->project()->projectFilePath().toString(),
- parent->kit(), qmakeInfo->displayName, bc->buildType());
- }
-
- bc->setBuildDirectory(directory);
-}
-
-BuildConfiguration *QmakeBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
-{
- QTC_ASSERT(info->factory() == this, return 0);
- QTC_ASSERT(info->kitId == parent->kit()->id(), return 0);
- QTC_ASSERT(!info->displayName.isEmpty(), return 0);
-
- const QmakeBuildInfo *qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
- QmakeBuildConfiguration *bc = new QmakeBuildConfiguration(parent);
- configureBuildConfiguration(parent, bc, qmakeInfo);
- return bc;
-}
-
-bool QmakeBuildConfigurationFactory::canClone(const Target *parent, BuildConfiguration *source) const
-{
- return canHandle(parent) && qobject_cast<QmakeBuildConfiguration *>(source);
-}
-
-BuildConfiguration *QmakeBuildConfigurationFactory::clone(Target *parent, BuildConfiguration *source)
-{
- if (!canClone(parent, source))
- return 0;
- QmakeBuildConfiguration *oldbc(static_cast<QmakeBuildConfiguration *>(source));
- return new QmakeBuildConfiguration(parent, oldbc);
-}
-
-bool QmakeBuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const
-{
- if (!canHandle(parent))
- return false;
- return ProjectExplorer::idFromMap(map) == QMAKE_BC_ID;
-}
-
-BuildConfiguration *QmakeBuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
- QmakeBuildConfiguration *bc = new QmakeBuildConfiguration(parent);
- if (bc->fromMap(map))
- return bc;
- delete bc;
- return 0;
-}
-
BuildConfiguration::BuildType QmakeBuildConfiguration::buildType() const
{
QMakeStep *qs = qmakeStep();
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
index 36ed928884..bca9a48769 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
@@ -50,6 +50,7 @@ public:
explicit QmakeBuildConfiguration(ProjectExplorer::Target *target);
~QmakeBuildConfiguration();
+ void initialize(const ProjectExplorer::BuildInfo *info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
bool isShadowBuild() const;
@@ -110,18 +111,13 @@ signals:
void qmakeBuildConfigurationChanged();
void shadowBuildChanged();
-private:
- void kitChanged();
- void toolChainUpdated(ProjectExplorer::ToolChain *tc);
- void qtVersionsChanged(const QList<int> &, const QList<int> &, const QList<int> &changed);
-
protected:
- QmakeBuildConfiguration(ProjectExplorer::Target *target, QmakeBuildConfiguration *source);
- QmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
bool fromMap(const QVariantMap &map) override;
private:
- void ctor();
+ void kitChanged();
+ void toolChainUpdated(ProjectExplorer::ToolChain *tc);
+ void qtVersionsChanged(const QList<int> &, const QList<int> &, const QList<int> &changed);
class LastKitState
{
@@ -153,27 +149,12 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeBuildConfigurationFactory : public Project
Q_OBJECT
public:
- explicit QmakeBuildConfigurationFactory(QObject *parent = 0);
+ QmakeBuildConfigurationFactory();
- int priority(const ProjectExplorer::Target *parent) const override;
QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override;
- int priority(const ProjectExplorer::Kit *k, const QString &projectPath) const override;
QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k,
const QString &projectPath) const override;
- ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
- const ProjectExplorer::BuildInfo *info) const override;
-
- bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const override;
- ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) override;
- bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
-protected:
- void configureBuildConfiguration(ProjectExplorer::Target *parent, QmakeBuildConfiguration *bc, const QmakeBuildInfo *info) const;
-
private:
- void update();
-
- bool canHandle(const ProjectExplorer::Target *t) const;
QmakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const QString &projectPath,
ProjectExplorer::BuildConfiguration::BuildType type) const;
};
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h
index 8582f0c38f..adb5a4c9c6 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h
@@ -29,12 +29,7 @@
#include <qtsupport/qtprojectimporter.h>
-namespace QtSupport { class BaseQtVersion; }
-
namespace QmakeProjectManager {
-
-class QmakeProject;
-
namespace Internal {
// Documentation inside.
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerconstants.h b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerconstants.h
index fcb102589b..03f3fd368e 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerconstants.h
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerconstants.h
@@ -63,6 +63,8 @@ const char PROFILE_EVALUATE[] = "Qt4ProjectManager.ProFileEvaluate";
// Project
const char QMAKEPROJECT_ID[] = "Qt4ProjectManager.Qt4Project";
+const char QMAKE_BC_ID[] = "Qt4ProjectManager.Qt4BuildConfiguration";
+
// ICONS
const char ICON_QTQUICK_APP[] = ":/wizards/images/qtquickapp.png";
diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp
index dd5fa50979..f6dd003d55 100644
--- a/src/plugins/qmakeprojectmanager/qmakestep.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp
@@ -72,31 +72,7 @@ const char QMAKE_QMLDEBUGLIBAUTO_KEY[] = "QtProjectManager.QMakeBuildStep.LinkQm
const char QMAKE_QMLDEBUGLIB_KEY[] = "QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary";
}
-QMakeStep::QMakeStep(BuildStepList *bsl) :
- AbstractProcessStep(bsl, Core::Id(QMAKE_BS_ID))
-{
- ctor();
-}
-
-QMakeStep::QMakeStep(BuildStepList *bsl, Core::Id id) :
- AbstractProcessStep(bsl, id)
-{
- ctor();
-}
-
-QMakeStep::QMakeStep(BuildStepList *bsl, QMakeStep *bs) :
- AbstractProcessStep(bsl, bs),
- m_userArgs(bs->m_userArgs),
- m_extraArgs(bs->m_extraArgs),
- m_forced(bs->m_forced),
- m_linkQmlDebuggingLibrary(bs->m_linkQmlDebuggingLibrary),
- m_useQtQuickCompiler(bs->m_useQtQuickCompiler),
- m_separateDebugInfo(bs->m_separateDebugInfo)
-{
- ctor();
-}
-
-void QMakeStep::ctor()
+QMakeStep::QMakeStep(BuildStepList *bsl) : AbstractProcessStep(bsl, QMAKE_BS_ID)
{
//: QMakeStep default display name
setDefaultDisplayName(tr("qmake"));
@@ -881,30 +857,13 @@ void QMakeStepConfigWidget::setSummaryText(const QString &text)
// QMakeStepFactory
////
-QMakeStepFactory::QMakeStepFactory(QObject *parent) :
- ProjectExplorer::IBuildStepFactory(parent)
-{
-}
-
-QList<BuildStepInfo> QMakeStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
- return {};
- if (!qobject_cast<QmakeBuildConfiguration *>(parent->parent()))
- return {};
-
- return {{QMAKE_BS_ID, tr("qmake"), BuildStepInfo::UniqueStep}};
-}
-
-ProjectExplorer::BuildStep *QMakeStepFactory::create(BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id)
- return new QMakeStep(parent);
-}
-
-ProjectExplorer::BuildStep *QMakeStepFactory::clone(BuildStepList *parent, ProjectExplorer::BuildStep *source)
+QMakeStepFactory::QMakeStepFactory()
{
- return new QMakeStep(parent, qobject_cast<QMakeStep *>(source));
+ registerStep<QMakeStep>(QMAKE_BS_ID);
+ setSupportedConfiguration(Constants::QMAKE_BC_ID);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ setDisplayName(tr("qmake"));
+ setFlags(BuildStepInfo::UniqueStep);
}
QMakeStepConfig::TargetArchConfig QMakeStepConfig::targetArchFor(const Abi &targetAbi, const BaseQtVersion *version)
diff --git a/src/plugins/qmakeprojectmanager/qmakestep.h b/src/plugins/qmakeprojectmanager/qmakestep.h
index caf12b129a..f6488cfaa0 100644
--- a/src/plugins/qmakeprojectmanager/qmakestep.h
+++ b/src/plugins/qmakeprojectmanager/qmakestep.h
@@ -36,7 +36,7 @@ namespace Utils { class FileName; }
namespace ProjectExplorer {
class Abi;
class BuildStep;
-class IBuildStepFactory;
+class BuildStepFactory;
class Project;
} // namespace ProjectExplorer
@@ -50,18 +50,12 @@ namespace Internal {
namespace Ui { class QMakeStep; }
-class QMakeStepFactory : public ProjectExplorer::IBuildStepFactory
+class QMakeStepFactory : public ProjectExplorer::BuildStepFactory
{
Q_OBJECT
public:
- explicit QMakeStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *bs) override;
+ QMakeStepFactory();
};
} // namespace Internal
@@ -160,17 +154,13 @@ signals:
void separateDebugInfoChanged();
protected:
- QMakeStep(ProjectExplorer::BuildStepList *parent, QMakeStep *source);
- QMakeStep(ProjectExplorer::BuildStepList *parent, Core::Id id);
bool fromMap(const QVariantMap &map) override;
-
void processStartupFailed() override;
bool processSucceeded(int exitCode, QProcess::ExitStatus status) override;
private:
void startOneCommand(const QString &command, const QString &args);
void runNextCommand();
- void ctor();
QString m_qmakeExecutable;
QString m_qmakeArguments;
diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h b/src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h
index 9d08d5d59a..595daeb522 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectmanagerconstants.h
@@ -30,7 +30,6 @@
namespace QmlProjectManager {
namespace Constants {
-const char QML_RC_ID[] = "QmlProjectManager.QmlRunConfiguration";
const char QML_SCENE_RC_ID[] = "QmlProjectManager.QmlRunConfiguration.QmlScene";
const char QML_VIEWER_ARGUMENTS_KEY[] = "QmlProjectManager.QmlRunConfiguration.QDeclarativeViewerArguments";
const char QML_VIEWER_TARGET_DISPLAY_NAME[] = "QML Viewer";
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
index bd49f9f093..12fe2c33f8 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
@@ -52,7 +52,7 @@ namespace QmlProjectManager {
const char M_CURRENT_FILE[] = "CurrentFile";
QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, Constants::QML_SCENE_RC_ID)
{
addExtraAspect(new QmlProjectEnvironmentAspect(this));
@@ -64,13 +64,6 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target)
connect(target, &Target::kitChanged,
this, &QmlProjectRunConfiguration::updateEnabledState);
-}
-
-void QmlProjectRunConfiguration::initialize(Id id)
-{
- QTC_ASSERT(id == Constants::QML_SCENE_RC_ID, return);
-
- RunConfiguration::initialize(id);
m_scriptFile = M_CURRENT_FILE;
setDisplayName(tr("QML Scene", "QMLRunConfiguration display name."));
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
index 7c9aa78596..c2647b4711 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
@@ -29,10 +29,6 @@
#include <projectexplorer/runnables.h>
-#include <QPointer>
-
-QT_FORWARD_DECLARE_CLASS(QStringListModel)
-
namespace Core { class IEditor; }
namespace QtSupport { class BaseQtVersion; }
@@ -73,11 +69,11 @@ public:
QVariantMap toMap() const override;
ProjectExplorer::Abi abi() const override;
+
signals:
void scriptSourceChanged();
private:
- void initialize(Core::Id id) override;
bool fromMap(const QVariantMap &map) override;
void changeCurrentFile(Core::IEditor* = 0);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp
index 1e1ee2ad8f..18157dbeb6 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp
@@ -28,50 +28,28 @@
#include "qmlproject.h"
#include "qmlprojectrunconfiguration.h"
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/runconfiguration.h>
-#include <projectexplorer/target.h>
-#include <qtsupport/qtkitinformation.h>
-
namespace QmlProjectManager {
namespace Internal {
-const char QML_SCENE_SUFFIX[] = ".QmlScene";
-
QmlProjectRunConfigurationFactory::QmlProjectRunConfigurationFactory(QObject *parent) :
ProjectExplorer::IRunConfigurationFactory(parent)
{
setObjectName("QmlProjectRunConfigurationFactory");
- registerRunConfiguration<QmlProjectRunConfiguration>(Constants::QML_RC_ID);
+ registerRunConfiguration<QmlProjectRunConfiguration>(Constants::QML_SCENE_RC_ID);
setSupportedProjectType<QmlProject>();
setSupportedTargetDeviceTypes({ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE});
}
-QList<QString> QmlProjectRunConfigurationFactory::availableBuildTargets(ProjectExplorer::Target *parent, CreationMode) const
+QList<QString> QmlProjectRunConfigurationFactory::availableBuildTargets(ProjectExplorer::Target *, CreationMode) const
{
- QtSupport::BaseQtVersion *version
- = QtSupport::QtKitInformation::qtVersion(parent->kit());
-
- return (version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0))
- ? QList<QString>({QML_SCENE_SUFFIX}) : QList<QString>();
+ return {QString()};
}
-QString QmlProjectRunConfigurationFactory::displayNameForBuildTarget(const QString &buildTarget) const
+QString QmlProjectRunConfigurationFactory::displayNameForBuildTarget(const QString &) const
{
- QTC_ASSERT(buildTarget == QML_SCENE_SUFFIX, return QString());
return tr("QML Scene");
}
-bool QmlProjectRunConfigurationFactory::canCreateHelper(ProjectExplorer::Target *parent,
- const QString &buildTarget) const
-{
- QTC_ASSERT(buildTarget == QML_SCENE_SUFFIX, return false);
-
- const QtSupport::BaseQtVersion *version
- = QtSupport::QtKitInformation::qtVersion(parent->kit());
- return version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0);
-}
-
} // namespace Internal
} // namespace QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h
index 3dd422f00a..837e422a79 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h
@@ -39,8 +39,6 @@ public:
QList<QString> availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override;
QString displayNameForBuildTarget(const QString &buildTarget) const override;
-
- bool canCreateHelper(ProjectExplorer::Target *parent, const QString &suffix) const override;
};
} // namespace Internal
diff --git a/src/plugins/qnx/qnx.pro b/src/plugins/qnx/qnx.pro
index 30708de764..cd24ea1f7f 100644
--- a/src/plugins/qnx/qnx.pro
+++ b/src/plugins/qnx/qnx.pro
@@ -10,8 +10,6 @@ SOURCES += qnxplugin.cpp \
qnxrunconfiguration.cpp \
qnxanalyzesupport.cpp \
qnxdebugsupport.cpp \
- qnxdeploystepfactory.cpp \
- qnxdeployconfigurationfactory.cpp \
qnxrunconfigurationfactory.cpp \
qnxqtversionfactory.cpp \
qnxqtversion.cpp \
@@ -40,8 +38,6 @@ HEADERS += qnxplugin.h\
qnxrunconfiguration.h \
qnxanalyzesupport.h \
qnxdebugsupport.h \
- qnxdeploystepfactory.h \
- qnxdeployconfigurationfactory.h \
qnxrunconfigurationfactory.h \
qnxqtversionfactory.h \
qnxqtversion.h \
diff --git a/src/plugins/qnx/qnx.qbs b/src/plugins/qnx/qnx.qbs
index 0ffc887fdf..d3b29d7ef4 100644
--- a/src/plugins/qnx/qnx.qbs
+++ b/src/plugins/qnx/qnx.qbs
@@ -35,10 +35,6 @@ QtcPlugin {
"qnxdebugsupport.h",
"qnxdeployconfiguration.cpp",
"qnxdeployconfiguration.h",
- "qnxdeployconfigurationfactory.cpp",
- "qnxdeployconfigurationfactory.h",
- "qnxdeploystepfactory.cpp",
- "qnxdeploystepfactory.h",
"qnxdevice.cpp",
"qnxdevice.h",
"qnxdevicefactory.cpp",
diff --git a/src/plugins/qnx/qnxdeployconfiguration.cpp b/src/plugins/qnx/qnxdeployconfiguration.cpp
index 9cc2520515..8c2e4ec38a 100644
--- a/src/plugins/qnx/qnxdeployconfiguration.cpp
+++ b/src/plugins/qnx/qnxdeployconfiguration.cpp
@@ -25,16 +25,44 @@
#include "qnxdeployconfiguration.h"
-using namespace Qnx;
-using namespace Qnx::Internal;
+#include "qnxconstants.h"
+#include "qnxdevicefactory.h"
-QnxDeployConfiguration::QnxDeployConfiguration(ProjectExplorer::Target *target, Core::Id id, const QString &defaultDisplayName)
- : RemoteLinux::RemoteLinuxDeployConfiguration(target, id, defaultDisplayName)
+#include <projectexplorer/devicesupport/devicecheckbuildstep.h>
+#include <projectexplorer/deploymentdataview.h>
+
+#include <remotelinux/genericdirectuploadstep.h>
+#include <remotelinux/remotelinuxcheckforfreediskspacestep.h>
+
+using namespace ProjectExplorer;
+using namespace RemoteLinux;
+
+namespace Qnx {
+namespace Internal {
+
+QnxDeployConfiguration::QnxDeployConfiguration(Target *target)
+ : DeployConfiguration(target, Constants::QNX_QNX_DEPLOYCONFIGURATION_ID)
{
}
-QnxDeployConfiguration::QnxDeployConfiguration(ProjectExplorer::Target *target, QnxDeployConfiguration *source)
- : RemoteLinux::RemoteLinuxDeployConfiguration(target, source)
+void QnxDeployConfiguration::initialize()
{
- cloneSteps(source);
+ stepList()->appendStep(new DeviceCheckBuildStep(stepList()));
+ stepList()->appendStep(new RemoteLinuxCheckForFreeDiskSpaceStep(stepList()));
+ stepList()->appendStep(new GenericDirectUploadStep(stepList()));
}
+
+NamedWidget *QnxDeployConfiguration::createConfigWidget()
+{
+ return new DeploymentDataView(target());
+}
+
+QnxDeployConfigurationFactory::QnxDeployConfigurationFactory()
+{
+ registerDeployConfiguration<QnxDeployConfiguration>(Constants::QNX_QNX_DEPLOYCONFIGURATION_ID);
+ setDefaultDisplayName(tr("Deploy to QNX Device"));
+ setSupportedTargetDeviceTypes({QnxDeviceFactory::deviceType()});
+}
+
+} // namespace Internal
+} // namespace Qnx
diff --git a/src/plugins/qnx/qnxdeployconfiguration.h b/src/plugins/qnx/qnxdeployconfiguration.h
index 0af2552c0d..e9c569969a 100644
--- a/src/plugins/qnx/qnxdeployconfiguration.h
+++ b/src/plugins/qnx/qnxdeployconfiguration.h
@@ -25,23 +25,27 @@
#pragma once
-#include <remotelinux/remotelinuxdeployconfiguration.h>
+#include <projectexplorer/deployconfiguration.h>
namespace Qnx {
namespace Internal {
-class QnxDeployConfiguration : public RemoteLinux::RemoteLinuxDeployConfiguration
+class QnxDeployConfiguration : public ProjectExplorer::DeployConfiguration
{
Q_OBJECT
+
public:
- QnxDeployConfiguration(ProjectExplorer::Target *target, Core::Id id,
- const QString &defaultDisplayName);
+ explicit QnxDeployConfiguration(ProjectExplorer::Target *target);
+ void initialize() override;
+ ProjectExplorer::NamedWidget *createConfigWidget() override;
+};
- QnxDeployConfiguration(ProjectExplorer::Target *target,
- QnxDeployConfiguration *source);
-private:
- friend class QnxDeployConfigurationFactory;
+class QnxDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
+{
+ Q_OBJECT
+public:
+ QnxDeployConfigurationFactory();
};
} // namespace Internal
diff --git a/src/plugins/qnx/qnxdeployconfigurationfactory.cpp b/src/plugins/qnx/qnxdeployconfigurationfactory.cpp
deleted file mode 100644
index b35787b3c4..0000000000
--- a/src/plugins/qnx/qnxdeployconfigurationfactory.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BlackBerry Limited. All rights reserved.
-** Contact: KDAB (info@kdab.com)
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "qnxdeployconfigurationfactory.h"
-
-#include "qnxconstants.h"
-#include "qnxdeployconfiguration.h"
-#include "qnxdevicefactory.h"
-
-#include <projectexplorer/devicesupport/devicecheckbuildstep.h>
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/target.h>
-#include <remotelinux/genericdirectuploadstep.h>
-
-namespace Qnx {
-namespace Internal {
-
-QnxDeployConfigurationFactory::QnxDeployConfigurationFactory(QObject *parent)
- : ProjectExplorer::DeployConfigurationFactory(parent)
-{
-}
-
-QList<Core::Id> QnxDeployConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const
-{
- QList<Core::Id> ids;
-
- if (canHandle(parent))
- ids << Core::Id(Constants::QNX_QNX_DEPLOYCONFIGURATION_ID);
-
- return ids;
-}
-
-QString QnxDeployConfigurationFactory::displayNameForId(Core::Id id) const
-{
- if (id.name().startsWith(Constants::QNX_QNX_DEPLOYCONFIGURATION_ID))
- return tr("Deploy to QNX Device");
-
- return QString();
-}
-
-bool QnxDeployConfigurationFactory::canCreate(ProjectExplorer::Target *parent, Core::Id id) const
-{
- return canHandle(parent) && id.name().startsWith(Constants::QNX_QNX_DEPLOYCONFIGURATION_ID);
-}
-
-ProjectExplorer::DeployConfiguration *QnxDeployConfigurationFactory::create(ProjectExplorer::Target *parent, Core::Id id)
-{
- if (!canCreate(parent, id))
- return 0;
-
- ProjectExplorer::DeployConfiguration * const dc = new QnxDeployConfiguration(parent, id,
- displayNameForId(id));
- dc->stepList()->insertStep(0, new ProjectExplorer::DeviceCheckBuildStep(dc->stepList(),
- ProjectExplorer::DeviceCheckBuildStep::stepId()));
- dc->stepList()->insertStep(1, new RemoteLinux::GenericDirectUploadStep(dc->stepList(),
- RemoteLinux::GenericDirectUploadStep::stepId()));
- return dc;
-}
-
-bool QnxDeployConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const
-{
- return canCreate(parent, ProjectExplorer::idFromMap(map));
-}
-
-ProjectExplorer::DeployConfiguration *QnxDeployConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
- Core::Id id = ProjectExplorer::idFromMap(map);
- QnxDeployConfiguration * const dc = new QnxDeployConfiguration(parent, id, displayNameForId(id));
- if (!dc->fromMap(map)) {
- delete dc;
- return 0;
- }
- return dc;
-}
-
-bool QnxDeployConfigurationFactory::canClone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *source) const
-{
- return canCreate(parent, source->id());
-}
-
-ProjectExplorer::DeployConfiguration *QnxDeployConfigurationFactory::clone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *source)
-{
- if (!canClone(parent, source))
- return 0;
- return new QnxDeployConfiguration(parent, qobject_cast<QnxDeployConfiguration *>(source));
-}
-
-bool QnxDeployConfigurationFactory::canHandle(ProjectExplorer::Target *t) const
-{
- Core::Id deviceType = ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(t->kit());
- if (deviceType != QnxDeviceFactory::deviceType())
- return false;
-
- return true;
-}
-
-} // namespace Internal
-} // namespace Qnx
diff --git a/src/plugins/qnx/qnxdeployconfigurationfactory.h b/src/plugins/qnx/qnxdeployconfigurationfactory.h
deleted file mode 100644
index 6564470c19..0000000000
--- a/src/plugins/qnx/qnxdeployconfigurationfactory.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BlackBerry Limited. All rights reserved.
-** Contact: KDAB (info@kdab.com)
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <projectexplorer/deployconfiguration.h>
-
-namespace Qnx {
-namespace Internal {
-
-class QnxDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
-{
- Q_OBJECT
-public:
- explicit QnxDeployConfigurationFactory(QObject *parent = 0);
-
- QList<Core::Id> availableCreationIds(ProjectExplorer::Target *parent) const override;
- QString displayNameForId(Core::Id id) const override;
-
- bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override;
- ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, Core::Id id) override;
-
- bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::DeployConfiguration *restore(ProjectExplorer::Target *parent,
- const QVariantMap &map) override;
-
- bool canClone(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *source) const override;
- ProjectExplorer::DeployConfiguration *clone(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *source) override;
-private:
- bool canHandle(ProjectExplorer::Target *t) const;
-};
-
-} // namespace Internal
-} // namespace Qnx
diff --git a/src/plugins/qnx/qnxdeploystepfactory.cpp b/src/plugins/qnx/qnxdeploystepfactory.cpp
deleted file mode 100644
index c275481e3f..0000000000
--- a/src/plugins/qnx/qnxdeploystepfactory.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BlackBerry Limited. All rights reserved.
-** Contact: KDAB (info@kdab.com)
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "qnxdeploystepfactory.h"
-#include "qnxconstants.h"
-#include "qnxdevicefactory.h"
-
-#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/devicesupport/devicecheckbuildstep.h>
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/target.h>
-#include <remotelinux/genericdirectuploadstep.h>
-
-using namespace ProjectExplorer;
-
-namespace Qnx {
-namespace Internal {
-
-QnxDeployStepFactory::QnxDeployStepFactory()
- : ProjectExplorer::IBuildStepFactory()
-{
-}
-
-QList<BuildStepInfo> QnxDeployStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
- return {};
-
- Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(parent->target()->kit());
- if (deviceType != QnxDeviceFactory::deviceType())
- return {};
-
- return {{RemoteLinux::GenericDirectUploadStep::stepId(),
- RemoteLinux::GenericDirectUploadStep::displayName()},
- {DeviceCheckBuildStep::stepId(),
- DeviceCheckBuildStep::stepDisplayName()}};
-}
-
-ProjectExplorer::BuildStep *QnxDeployStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id)
-{
- if (id == RemoteLinux::GenericDirectUploadStep::stepId())
- return new RemoteLinux::GenericDirectUploadStep(parent, id);
- else if (id == ProjectExplorer::DeviceCheckBuildStep::stepId())
- return new ProjectExplorer::DeviceCheckBuildStep(parent, id);
- return 0;
-}
-
-ProjectExplorer::BuildStep *QnxDeployStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product)
-{
- if (RemoteLinux::GenericDirectUploadStep * const other = qobject_cast<RemoteLinux::GenericDirectUploadStep*>(product))
- return new RemoteLinux::GenericDirectUploadStep(parent, other);
- else if (ProjectExplorer::DeviceCheckBuildStep * const other = qobject_cast<ProjectExplorer::DeviceCheckBuildStep*>(product))
- return new ProjectExplorer::DeviceCheckBuildStep(parent, other);
-
- return 0;
-}
-
-} // namespace Internal
-} // namespace Qnx
diff --git a/src/plugins/qnx/qnxdeploystepfactory.h b/src/plugins/qnx/qnxdeploystepfactory.h
deleted file mode 100644
index e7f97f5ad5..0000000000
--- a/src/plugins/qnx/qnxdeploystepfactory.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BlackBerry Limited. All rights reserved.
-** Contact: KDAB (info@kdab.com)
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <projectexplorer/buildstep.h>
-
-namespace Qnx {
-namespace Internal {
-
-class QnxDeployStepFactory : public ProjectExplorer::IBuildStepFactory
-{
- Q_OBJECT
-public:
- explicit QnxDeployStepFactory();
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *product) override;
-};
-
-} // namespace Internal
-} // namespace Qnx
diff --git a/src/plugins/qnx/qnxplugin.cpp b/src/plugins/qnx/qnxplugin.cpp
index 07306e81e3..c5fb91e2bd 100644
--- a/src/plugins/qnx/qnxplugin.cpp
+++ b/src/plugins/qnx/qnxplugin.cpp
@@ -29,8 +29,7 @@
#include "qnxconfigurationmanager.h"
#include "qnxconstants.h"
#include "qnxdebugsupport.h"
-#include "qnxdeployconfigurationfactory.h"
-#include "qnxdeploystepfactory.h"
+#include "qnxdeployconfiguration.h"
#include "qnxdevice.h"
#include "qnxdevicefactory.h"
#include "qnxqtversion.h"
@@ -77,7 +76,6 @@ bool QnxPlugin::initialize(const QStringList &arguments, QString *errorString)
addAutoReleasedObject(new QnxConfigurationManager);
addAutoReleasedObject(new QnxQtVersionFactory);
addAutoReleasedObject(new QnxDeviceFactory);
- addAutoReleasedObject(new QnxDeployStepFactory);
addAutoReleasedObject(new QnxDeployConfigurationFactory);
addAutoReleasedObject(new QnxRunConfigurationFactory);
addAutoReleasedObject(new QnxSettingsPage);
diff --git a/src/plugins/qnx/qnxrunconfiguration.cpp b/src/plugins/qnx/qnxrunconfiguration.cpp
index 0a50793e75..1a2559ecd3 100644
--- a/src/plugins/qnx/qnxrunconfiguration.cpp
+++ b/src/plugins/qnx/qnxrunconfiguration.cpp
@@ -48,25 +48,9 @@ namespace Internal {
const char QtLibPathKey[] = "Qt4ProjectManager.QnxRunConfiguration.QtLibPath";
QnxRunConfiguration::QnxRunConfiguration(Target *target)
- : RemoteLinuxRunConfiguration(target)
+ : RemoteLinuxRunConfiguration(target, Constants::QNX_QNX_RUNCONFIGURATION_PREFIX)
{}
-void QnxRunConfiguration::initialize(Core::Id id)
-{
- const QString projectFilePath = id.suffixAfter(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX);
- auto project = qobject_cast<QmakeProjectManager::QmakeProject *>(target()->project());
- QTC_ASSERT(project, return);
- for (const QmakeProjectManager::QmakeProFile *file : project->applicationProFiles()) {
- if (file->filePath().toString() == projectFilePath) {
- // Circumvent RemoteLinux's initialize() FIXME: Ugly.
- RunConfiguration::initialize(id);
- setTargetName(file->targetInformation().target);
- return;
- }
- }
- RemoteLinuxRunConfiguration::initialize(id);
-}
-
Runnable QnxRunConfiguration::runnable() const
{
auto r = RemoteLinuxRunConfiguration::runnable().as<StandardRunnable>();
diff --git a/src/plugins/qnx/qnxrunconfiguration.h b/src/plugins/qnx/qnxrunconfiguration.h
index 0db88e481f..639badc999 100644
--- a/src/plugins/qnx/qnxrunconfiguration.h
+++ b/src/plugins/qnx/qnxrunconfiguration.h
@@ -37,8 +37,6 @@ class QnxRunConfiguration : public RemoteLinux::RemoteLinuxRunConfiguration
public:
explicit QnxRunConfiguration(ProjectExplorer::Target *target);
- void initialize(Core::Id id) override;
-
private:
ProjectExplorer::Runnable runnable() const override;
QWidget *createConfigurationWidget() override;
diff --git a/src/plugins/remotelinux/abstractpackagingstep.cpp b/src/plugins/remotelinux/abstractpackagingstep.cpp
index aa45cf15f2..72df1a7fc7 100644
--- a/src/plugins/remotelinux/abstractpackagingstep.cpp
+++ b/src/plugins/remotelinux/abstractpackagingstep.cpp
@@ -53,17 +53,6 @@ public:
AbstractPackagingStep::AbstractPackagingStep(BuildStepList *bsl, Core::Id id)
: BuildStep(bsl, id)
{
- ctor();
-}
-
-AbstractPackagingStep::AbstractPackagingStep(BuildStepList *bsl, AbstractPackagingStep *other)
- : BuildStep(bsl, other)
-{
- ctor();
-}
-
-void AbstractPackagingStep::ctor()
-{
d = new Internal::AbstractPackagingStepPrivate;
connect(target(), &Target::activeBuildConfigurationChanged,
this, &AbstractPackagingStep::handleBuildConfigurationChanged);
diff --git a/src/plugins/remotelinux/abstractpackagingstep.h b/src/plugins/remotelinux/abstractpackagingstep.h
index b278fd772e..c4857256eb 100644
--- a/src/plugins/remotelinux/abstractpackagingstep.h
+++ b/src/plugins/remotelinux/abstractpackagingstep.h
@@ -30,7 +30,6 @@
#include <projectexplorer/buildstep.h>
namespace RemoteLinux {
-class RemoteLinuxDeployConfiguration;
namespace Internal { class AbstractPackagingStepPrivate; }
@@ -39,8 +38,7 @@ class REMOTELINUX_EXPORT AbstractPackagingStep : public ProjectExplorer::BuildSt
Q_OBJECT
public:
- AbstractPackagingStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
- AbstractPackagingStep(ProjectExplorer::BuildStepList *bsl, AbstractPackagingStep *other);
+ explicit AbstractPackagingStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
~AbstractPackagingStep() override;
QString packageFilePath() const;
@@ -69,8 +67,6 @@ private:
virtual QString packageFileName() const = 0;
- void ctor();
-
Internal::AbstractPackagingStepPrivate *d;
};
diff --git a/src/plugins/remotelinux/abstractremotelinuxdeploystep.cpp b/src/plugins/remotelinux/abstractremotelinuxdeploystep.cpp
index e70ac3e76b..71744b5724 100644
--- a/src/plugins/remotelinux/abstractremotelinuxdeploystep.cpp
+++ b/src/plugins/remotelinux/abstractremotelinuxdeploystep.cpp
@@ -50,12 +50,6 @@ AbstractRemoteLinuxDeployStep::AbstractRemoteLinuxDeployStep(BuildStepList *bsl,
{
}
-AbstractRemoteLinuxDeployStep::AbstractRemoteLinuxDeployStep(BuildStepList *bsl,
- AbstractRemoteLinuxDeployStep *other)
- : BuildStep(bsl, other), d(new Internal::AbstractRemoteLinuxDeployStepPrivate)
-{
-}
-
AbstractRemoteLinuxDeployStep::~AbstractRemoteLinuxDeployStep()
{
delete d;
diff --git a/src/plugins/remotelinux/abstractremotelinuxdeploystep.h b/src/plugins/remotelinux/abstractremotelinuxdeploystep.h
index b0148aa2e0..8f885f9ad3 100644
--- a/src/plugins/remotelinux/abstractremotelinuxdeploystep.h
+++ b/src/plugins/remotelinux/abstractremotelinuxdeploystep.h
@@ -55,9 +55,7 @@ public:
virtual AbstractRemoteLinuxDeployService *deployService() const = 0;
protected:
- AbstractRemoteLinuxDeployStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
- AbstractRemoteLinuxDeployStep(ProjectExplorer::BuildStepList *bsl,
- AbstractRemoteLinuxDeployStep *other);
+ explicit AbstractRemoteLinuxDeployStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
virtual bool initInternal(QString *error = 0) = 0;
private:
diff --git a/src/plugins/remotelinux/genericdirectuploadstep.cpp b/src/plugins/remotelinux/genericdirectuploadstep.cpp
index b0890c6ba6..e6fd038453 100644
--- a/src/plugins/remotelinux/genericdirectuploadstep.cpp
+++ b/src/plugins/remotelinux/genericdirectuploadstep.cpp
@@ -92,16 +92,11 @@ public:
} // namespace Internal
-GenericDirectUploadStep::GenericDirectUploadStep(BuildStepList *bsl, Core::Id id)
- : AbstractRemoteLinuxDeployStep(bsl, id)
+GenericDirectUploadStep::GenericDirectUploadStep(BuildStepList *bsl)
+ : AbstractRemoteLinuxDeployStep(bsl, stepId())
{
- ctor();
-}
-
-GenericDirectUploadStep::GenericDirectUploadStep(BuildStepList *bsl, GenericDirectUploadStep *other)
- : AbstractRemoteLinuxDeployStep(bsl, other)
-{
- ctor();
+ d = new Internal::GenericDirectUploadStepPrivate;
+ setDefaultDisplayName(displayName());
}
GenericDirectUploadStep::~GenericDirectUploadStep()
@@ -144,12 +139,6 @@ QVariantMap GenericDirectUploadStep::toMap() const
return map;
}
-void GenericDirectUploadStep::ctor()
-{
- setDefaultDisplayName(displayName());
- d = new Internal::GenericDirectUploadStepPrivate;
-}
-
void GenericDirectUploadStep::setIncrementalDeployment(bool incremental)
{
d->incremental = incremental;
diff --git a/src/plugins/remotelinux/genericdirectuploadstep.h b/src/plugins/remotelinux/genericdirectuploadstep.h
index 2ed99b2c18..ed35921618 100644
--- a/src/plugins/remotelinux/genericdirectuploadstep.h
+++ b/src/plugins/remotelinux/genericdirectuploadstep.h
@@ -37,8 +37,7 @@ class REMOTELINUX_EXPORT GenericDirectUploadStep : public AbstractRemoteLinuxDep
Q_OBJECT
public:
- GenericDirectUploadStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
- GenericDirectUploadStep(ProjectExplorer::BuildStepList *bsl, GenericDirectUploadStep *other);
+ explicit GenericDirectUploadStep(ProjectExplorer::BuildStepList *bsl);
~GenericDirectUploadStep() override;
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
@@ -58,8 +57,6 @@ private:
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
- void ctor();
-
Internal::GenericDirectUploadStepPrivate *d;
};
diff --git a/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.cpp b/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.cpp
deleted file mode 100644
index 29c7170a6e..0000000000
--- a/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "genericremotelinuxdeploystepfactory.h"
-
-#include "genericdirectuploadstep.h"
-#include "remotelinuxcheckforfreediskspacestep.h"
-#include "remotelinuxdeployconfiguration.h"
-#include "remotelinuxcustomcommanddeploymentstep.h"
-#include "tarpackagecreationstep.h"
-#include "uploadandinstalltarpackagestep.h"
-
-using namespace ProjectExplorer;
-
-namespace RemoteLinux {
-namespace Internal {
-
-GenericRemoteLinuxDeployStepFactory::GenericRemoteLinuxDeployStepFactory(QObject *parent)
- : IBuildStepFactory(parent)
-{
-}
-
-QList<BuildStepInfo> GenericRemoteLinuxDeployStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (!qobject_cast<RemoteLinuxDeployConfiguration *>(parent->parent()))
- return {};
-
- 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)
-{
- if (id == TarPackageCreationStep::stepId())
- return new TarPackageCreationStep(parent);
- if (id == UploadAndInstallTarPackageStep::stepId())
- return new UploadAndInstallTarPackageStep(parent);
- if (id == GenericDirectUploadStep::stepId())
- return new GenericDirectUploadStep(parent, GenericDirectUploadStep::stepId());
- if (id == GenericRemoteLinuxCustomCommandDeploymentStep::stepId())
- return new GenericRemoteLinuxCustomCommandDeploymentStep(parent);
- if (id == RemoteLinuxCheckForFreeDiskSpaceStep::stepId())
- return new RemoteLinuxCheckForFreeDiskSpaceStep(parent);
- return 0;
-}
-
-BuildStep *GenericRemoteLinuxDeployStepFactory::clone(BuildStepList *parent, BuildStep *product)
-{
- if (TarPackageCreationStep * const other = qobject_cast<TarPackageCreationStep *>(product))
- return new TarPackageCreationStep(parent, other);
- if (UploadAndInstallTarPackageStep * const other = qobject_cast<UploadAndInstallTarPackageStep*>(product))
- return new UploadAndInstallTarPackageStep(parent, other);
- if (GenericDirectUploadStep * const other = qobject_cast<GenericDirectUploadStep *>(product))
- return new GenericDirectUploadStep(parent, other);
- if (GenericRemoteLinuxCustomCommandDeploymentStep * const other = qobject_cast<GenericRemoteLinuxCustomCommandDeploymentStep *>(product))
- return new GenericRemoteLinuxCustomCommandDeploymentStep(parent, other);
- if (RemoteLinuxCheckForFreeDiskSpaceStep * const other = qobject_cast<RemoteLinuxCheckForFreeDiskSpaceStep *>(product))
- return new RemoteLinuxCheckForFreeDiskSpaceStep(parent, other);
- return 0;
-}
-
-} // namespace Internal
-} // namespace RemoteLinux
diff --git a/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.h b/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.h
deleted file mode 100644
index af92564fdb..0000000000
--- a/src/plugins/remotelinux/genericremotelinuxdeploystepfactory.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <projectexplorer/buildstep.h>
-
-namespace RemoteLinux {
-namespace Internal {
-
-class GenericRemoteLinuxDeployStepFactory : public ProjectExplorer::IBuildStepFactory
-{
- Q_OBJECT
-
-public:
- GenericRemoteLinuxDeployStepFactory(QObject *parent = 0);
-
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
-
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *product) override;
-};
-
-} // namespace Internal
-} // namespace RemoteLinux
diff --git a/src/plugins/remotelinux/remotelinux.pro b/src/plugins/remotelinux/remotelinux.pro
index e1a43cb21f..e1b755a4b0 100644
--- a/src/plugins/remotelinux/remotelinux.pro
+++ b/src/plugins/remotelinux/remotelinux.pro
@@ -25,8 +25,6 @@ HEADERS += \
abstractuploadandinstallpackageservice.h \
genericdirectuploadservice.h \
remotelinuxdeployconfiguration.h \
- remotelinuxdeployconfigurationfactory.h \
- genericremotelinuxdeploystepfactory.h \
abstractpackagingstep.h \
tarpackagecreationstep.h \
remotelinuxpackageinstaller.h \
@@ -70,8 +68,6 @@ SOURCES += \
abstractuploadandinstallpackageservice.cpp \
genericdirectuploadservice.cpp \
remotelinuxdeployconfiguration.cpp \
- remotelinuxdeployconfigurationfactory.cpp \
- genericremotelinuxdeploystepfactory.cpp \
abstractpackagingstep.cpp \
tarpackagecreationstep.cpp \
remotelinuxpackageinstaller.cpp \
diff --git a/src/plugins/remotelinux/remotelinux.qbs b/src/plugins/remotelinux/remotelinux.qbs
index a7ee122f4f..8fb3cae837 100644
--- a/src/plugins/remotelinux/remotelinux.qbs
+++ b/src/plugins/remotelinux/remotelinux.qbs
@@ -45,8 +45,6 @@ Project {
"genericlinuxdeviceconfigurationwizardpages.cpp",
"genericlinuxdeviceconfigurationwizardpages.h",
"genericlinuxdeviceconfigurationwizardsetuppage.ui",
- "genericremotelinuxdeploystepfactory.cpp",
- "genericremotelinuxdeploystepfactory.h",
"linuxdevice.cpp",
"linuxdevice.h",
"linuxdeviceprocess.cpp",
@@ -76,8 +74,6 @@ Project {
"remotelinuxdebugsupport.h",
"remotelinuxdeployconfiguration.cpp",
"remotelinuxdeployconfiguration.h",
- "remotelinuxdeployconfigurationfactory.cpp",
- "remotelinuxdeployconfigurationfactory.h",
"remotelinuxenvironmentaspect.cpp",
"remotelinuxenvironmentaspect.h",
"remotelinuxenvironmentaspectwidget.cpp",
diff --git a/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp b/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp
index fa2e323987..8361eb3240 100644
--- a/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp
+++ b/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp
@@ -91,33 +91,20 @@ public:
} // namespace Internal
-RemoteLinuxCheckForFreeDiskSpaceStep::RemoteLinuxCheckForFreeDiskSpaceStep(BuildStepList *bsl, Core::Id id)
- : AbstractRemoteLinuxDeployStep(bsl, id)
+RemoteLinuxCheckForFreeDiskSpaceStep::RemoteLinuxCheckForFreeDiskSpaceStep(BuildStepList *bsl)
+ : AbstractRemoteLinuxDeployStep(bsl, stepId())
{
- ctor();
- setPathToCheck(QLatin1String("/"));
+ d = new Internal::RemoteLinuxCheckForFreeDiskSpaceStepPrivate;
+ setDefaultDisplayName(displayName());
+ setPathToCheck("/");
setRequiredSpaceInBytes(5*1024*1024);
}
-RemoteLinuxCheckForFreeDiskSpaceStep::RemoteLinuxCheckForFreeDiskSpaceStep(BuildStepList *bsl,
- RemoteLinuxCheckForFreeDiskSpaceStep *other) : AbstractRemoteLinuxDeployStep(bsl, other)
-{
- ctor();
- setPathToCheck(other->pathToCheck());
- setRequiredSpaceInBytes(other->requiredSpaceInBytes());
-}
-
RemoteLinuxCheckForFreeDiskSpaceStep::~RemoteLinuxCheckForFreeDiskSpaceStep()
{
delete d;
}
-void RemoteLinuxCheckForFreeDiskSpaceStep::ctor()
-{
- d = new Internal::RemoteLinuxCheckForFreeDiskSpaceStepPrivate;
- setDefaultDisplayName(stepDisplayName());
-}
-
void RemoteLinuxCheckForFreeDiskSpaceStep::setPathToCheck(const QString &path)
{
d->pathToCheck = path;
@@ -178,7 +165,7 @@ Core::Id RemoteLinuxCheckForFreeDiskSpaceStep::stepId()
return "RemoteLinux.CheckForFreeDiskSpaceStep";
}
-QString RemoteLinuxCheckForFreeDiskSpaceStep::stepDisplayName()
+QString RemoteLinuxCheckForFreeDiskSpaceStep::displayName()
{
return tr("Check for free disk space");
}
diff --git a/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.h b/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.h
index 102e494be9..f102c93c62 100644
--- a/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.h
+++ b/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.h
@@ -34,10 +34,7 @@ class REMOTELINUX_EXPORT RemoteLinuxCheckForFreeDiskSpaceStep : public AbstractR
{
Q_OBJECT
public:
- explicit RemoteLinuxCheckForFreeDiskSpaceStep(ProjectExplorer::BuildStepList *bsl,
- Core::Id id = stepId());
- RemoteLinuxCheckForFreeDiskSpaceStep(ProjectExplorer::BuildStepList *bsl,
- RemoteLinuxCheckForFreeDiskSpaceStep *other);
+ explicit RemoteLinuxCheckForFreeDiskSpaceStep(ProjectExplorer::BuildStepList *bsl);
~RemoteLinuxCheckForFreeDiskSpaceStep() override;
void setPathToCheck(const QString &path);
@@ -47,7 +44,7 @@ public:
quint64 requiredSpaceInBytes() const;
static Core::Id stepId();
- static QString stepDisplayName();
+ static QString displayName();
protected:
bool fromMap(const QVariantMap &map) override;
@@ -58,8 +55,6 @@ protected:
AbstractRemoteLinuxDeployService *deployService() const override;
private:
- void ctor();
-
Internal::RemoteLinuxCheckForFreeDiskSpaceStepPrivate *d;
};
diff --git a/src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.cpp b/src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.cpp
index 3e269831b4..c1c25c76fa 100644
--- a/src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.cpp
+++ b/src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.cpp
@@ -90,18 +90,11 @@ public:
using namespace Internal;
-AbstractRemoteLinuxCustomCommandDeploymentStep::AbstractRemoteLinuxCustomCommandDeploymentStep(BuildStepList *bsl,
- const Core::Id id)
+AbstractRemoteLinuxCustomCommandDeploymentStep::AbstractRemoteLinuxCustomCommandDeploymentStep
+ (BuildStepList *bsl, Core::Id id)
: AbstractRemoteLinuxDeployStep(bsl, id)
{
- ctor();
-}
-
-AbstractRemoteLinuxCustomCommandDeploymentStep::AbstractRemoteLinuxCustomCommandDeploymentStep(BuildStepList *bsl,
- AbstractRemoteLinuxCustomCommandDeploymentStep *other)
- : AbstractRemoteLinuxDeployStep(bsl, other)
-{
- ctor();
+ d = new AbstractRemoteLinuxCustomCommandDeploymentStepPrivate;
}
AbstractRemoteLinuxCustomCommandDeploymentStep::~AbstractRemoteLinuxCustomCommandDeploymentStep()
@@ -109,11 +102,6 @@ AbstractRemoteLinuxCustomCommandDeploymentStep::~AbstractRemoteLinuxCustomComman
delete d;
}
-void AbstractRemoteLinuxCustomCommandDeploymentStep::ctor()
-{
- d = new AbstractRemoteLinuxCustomCommandDeploymentStepPrivate;
-}
-
bool AbstractRemoteLinuxCustomCommandDeploymentStep::fromMap(const QVariantMap &map)
{
if (!AbstractRemoteLinuxDeployStep::fromMap(map))
@@ -154,14 +142,8 @@ BuildStepConfigWidget *AbstractRemoteLinuxCustomCommandDeploymentStep::createCon
GenericRemoteLinuxCustomCommandDeploymentStep::GenericRemoteLinuxCustomCommandDeploymentStep(BuildStepList *bsl)
: AbstractRemoteLinuxCustomCommandDeploymentStep(bsl, stepId())
{
- ctor();
-}
-
-GenericRemoteLinuxCustomCommandDeploymentStep::GenericRemoteLinuxCustomCommandDeploymentStep(BuildStepList *bsl,
- GenericRemoteLinuxCustomCommandDeploymentStep *other)
- : AbstractRemoteLinuxCustomCommandDeploymentStep(bsl, other)
-{
- ctor();
+ d = new GenericRemoteLinuxCustomCommandDeploymentStepPrivate;
+ setDefaultDisplayName(displayName());
}
GenericRemoteLinuxCustomCommandDeploymentStep::~GenericRemoteLinuxCustomCommandDeploymentStep()
@@ -169,12 +151,6 @@ GenericRemoteLinuxCustomCommandDeploymentStep::~GenericRemoteLinuxCustomCommandD
delete d;
}
-void GenericRemoteLinuxCustomCommandDeploymentStep::ctor()
-{
- d = new GenericRemoteLinuxCustomCommandDeploymentStepPrivate;
- setDefaultDisplayName(stepDisplayName());
-}
-
RemoteLinuxCustomCommandDeployService *GenericRemoteLinuxCustomCommandDeploymentStep::deployService() const
{
return &d->service;
@@ -185,7 +161,7 @@ Core::Id GenericRemoteLinuxCustomCommandDeploymentStep::stepId()
return "RemoteLinux.GenericRemoteLinuxCustomCommandDeploymentStep";
}
-QString GenericRemoteLinuxCustomCommandDeploymentStep::stepDisplayName()
+QString GenericRemoteLinuxCustomCommandDeploymentStep::displayName()
{
return tr("Run custom remote command");
}
diff --git a/src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.h b/src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.h
index fd2ca29e87..47ff761962 100644
--- a/src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.h
+++ b/src/plugins/remotelinux/remotelinuxcustomcommanddeploymentstep.h
@@ -50,14 +50,10 @@ public:
protected:
AbstractRemoteLinuxCustomCommandDeploymentStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
- AbstractRemoteLinuxCustomCommandDeploymentStep(ProjectExplorer::BuildStepList *bsl,
- AbstractRemoteLinuxCustomCommandDeploymentStep *other);
bool initInternal(QString *error = 0) override;
private:
- void ctor();
-
RemoteLinuxCustomCommandDeployService *deployService() const override = 0;
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
@@ -71,16 +67,13 @@ class REMOTELINUX_EXPORT GenericRemoteLinuxCustomCommandDeploymentStep
Q_OBJECT
public:
explicit GenericRemoteLinuxCustomCommandDeploymentStep(ProjectExplorer::BuildStepList *bsl);
- GenericRemoteLinuxCustomCommandDeploymentStep(ProjectExplorer::BuildStepList *bsl,
- GenericRemoteLinuxCustomCommandDeploymentStep *other);
~GenericRemoteLinuxCustomCommandDeploymentStep() override;
static Core::Id stepId();
- static QString stepDisplayName();
+ static QString displayName();
private:
RemoteLinuxCustomCommandDeployService *deployService() const override;
- void ctor();
Internal::GenericRemoteLinuxCustomCommandDeploymentStepPrivate *d;
};
diff --git a/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp
index 2bd5c1196f..64f4f67ce1 100644
--- a/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp
+++ b/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp
@@ -97,15 +97,9 @@ private:
};
RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, runConfigId())
{
addExtraAspect(new RemoteLinuxEnvironmentAspect(this));
-}
-
-void RemoteLinuxCustomRunConfiguration::initialize(Core::Id)
-{
- RunConfiguration::initialize(runConfigId());
-
setDefaultDisplayName(runConfigDefaultDisplayName());
}
diff --git a/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.h b/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.h
index 2d176755b6..22f943efd9 100644
--- a/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.h
+++ b/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.h
@@ -36,8 +36,6 @@ class RemoteLinuxCustomRunConfiguration : public ProjectExplorer::RunConfigurati
public:
explicit RemoteLinuxCustomRunConfiguration(ProjectExplorer::Target *target);
- void initialize(Core::Id) override;
-
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
diff --git a/src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp b/src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp
index 929f3558b0..fe33f4fe27 100644
--- a/src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp
+++ b/src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp
@@ -25,7 +25,16 @@
#include "remotelinuxdeployconfiguration.h"
+#include "genericdirectuploadstep.h"
+#include "remotelinuxcheckforfreediskspacestep.h"
+#include "remotelinux_constants.h"
+
+#include <projectexplorer/abi.h>
#include <projectexplorer/deploymentdataview.h>
+#include <projectexplorer/project.h>
+#include <projectexplorer/target.h>
+
+#include <QCoreApplication>
using namespace ProjectExplorer;
@@ -33,21 +42,37 @@ namespace RemoteLinux {
using namespace Internal;
-RemoteLinuxDeployConfiguration::RemoteLinuxDeployConfiguration(Target *target,
- const Core::Id id, const QString &defaultDisplayName)
- : DeployConfiguration(target, id)
+RemoteLinuxDeployConfiguration::RemoteLinuxDeployConfiguration(Target *target)
+ : DeployConfiguration(target, genericDeployConfigurationId())
+{}
+
+void RemoteLinuxDeployConfiguration::initialize()
{
- setDefaultDisplayName(defaultDisplayName);
+ stepList()->insertStep(0, new RemoteLinuxCheckForFreeDiskSpaceStep(stepList()));
+ stepList()->insertStep(1, new GenericDirectUploadStep(stepList()));
}
-RemoteLinuxDeployConfiguration::RemoteLinuxDeployConfiguration(Target *target,
- RemoteLinuxDeployConfiguration *source)
- : DeployConfiguration(target, source)
-{ }
-
NamedWidget *RemoteLinuxDeployConfiguration::createConfigWidget()
{
return new DeploymentDataView(target());
}
+Core::Id RemoteLinuxDeployConfiguration::genericDeployConfigurationId()
+{
+ return "DeployToGenericLinux";
+}
+
+namespace Internal {
+
+RemoteLinuxDeployConfigurationFactory::RemoteLinuxDeployConfigurationFactory()
+{
+ setObjectName("RemoteLinuxDeployConfiguration");
+ registerDeployConfiguration<RemoteLinuxDeployConfiguration>
+ (RemoteLinuxDeployConfiguration::genericDeployConfigurationId());
+ setSupportedTargetDeviceTypes({RemoteLinux::Constants::GenericLinuxOsType});
+ setDefaultDisplayName(QCoreApplication::translate("RemoteLinux",
+ "Deploy to Remote Linux Host"));
+}
+
+} // namespace Internal
} // namespace RemoteLinux
diff --git a/src/plugins/remotelinux/remotelinuxdeployconfiguration.h b/src/plugins/remotelinux/remotelinuxdeployconfiguration.h
index 409113ee2a..6b8a1a3525 100644
--- a/src/plugins/remotelinux/remotelinuxdeployconfiguration.h
+++ b/src/plugins/remotelinux/remotelinuxdeployconfiguration.h
@@ -31,7 +31,6 @@
#include <projectexplorer/deployconfiguration.h>
namespace RemoteLinux {
-namespace Internal { class RemoteLinuxDeployConfigurationFactory; }
class REMOTELINUX_EXPORT RemoteLinuxDeployConfiguration
: public ProjectExplorer::DeployConfiguration
@@ -39,10 +38,9 @@ class REMOTELINUX_EXPORT RemoteLinuxDeployConfiguration
Q_OBJECT
public:
- RemoteLinuxDeployConfiguration(ProjectExplorer::Target *target, Core::Id id,
- const QString &defaultDisplayName);
- RemoteLinuxDeployConfiguration(ProjectExplorer::Target *target,
- RemoteLinuxDeployConfiguration *source);
+ explicit RemoteLinuxDeployConfiguration(ProjectExplorer::Target *target);
+
+ static Core::Id genericDeployConfigurationId();
ProjectExplorer::NamedWidget *createConfigWidget() override;
@@ -58,8 +56,18 @@ public:
return 0;
}
-private:
- friend class Internal::RemoteLinuxDeployConfigurationFactory;
+ void initialize() override;
+};
+
+namespace Internal {
+
+class RemoteLinuxDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
+{
+ Q_OBJECT
+
+public:
+ RemoteLinuxDeployConfigurationFactory();
};
+} // namespace Internal
} // namespace RemoteLinux
diff --git a/src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.cpp b/src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.cpp
deleted file mode 100644
index 477be3b104..0000000000
--- a/src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "remotelinuxdeployconfigurationfactory.h"
-
-#include "genericdirectuploadstep.h"
-#include "remotelinuxcheckforfreediskspacestep.h"
-#include "remotelinux_constants.h"
-#include "remotelinuxdeployconfiguration.h"
-
-#include <projectexplorer/abi.h>
-#include <projectexplorer/toolchain.h>
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/project.h>
-#include <projectexplorer/target.h>
-
-#include <QCoreApplication>
-
-using namespace ProjectExplorer;
-
-namespace RemoteLinux {
-namespace Internal {
-namespace {
-QString genericLinuxDisplayName() {
- return QCoreApplication::translate("RemoteLinux", "Deploy to Remote Linux Host");
-}
-} // anonymous namespace
-
-RemoteLinuxDeployConfigurationFactory::RemoteLinuxDeployConfigurationFactory(QObject *parent)
- : DeployConfigurationFactory(parent)
-{ setObjectName(QLatin1String("RemoteLinuxDeployConfiguration"));}
-
-QList<Core::Id> RemoteLinuxDeployConfigurationFactory::availableCreationIds(Target *target) const
-{
- QList<Core::Id> ids;
- if (!target->project()->supportsKit(target->kit()))
- return ids;
-
- const Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(target->kit());
- if (deviceType != RemoteLinux::Constants::GenericLinuxOsType)
- return ids;
-
- ids << genericDeployConfigurationId();
- return ids;
-}
-
-QString RemoteLinuxDeployConfigurationFactory::displayNameForId(Core::Id id) const
-{
- if (id == genericDeployConfigurationId())
- return genericLinuxDisplayName();
- return QString();
-}
-
-bool RemoteLinuxDeployConfigurationFactory::canCreate(Target *parent, Core::Id id) const
-{
- return availableCreationIds(parent).contains(id);
-}
-
-DeployConfiguration *RemoteLinuxDeployConfigurationFactory::create(Target *parent,
- const Core::Id id)
-{
- Q_ASSERT(canCreate(parent, id));
-
- DeployConfiguration * const dc = new RemoteLinuxDeployConfiguration(parent, id,
- genericLinuxDisplayName());
- dc->stepList()->insertStep(0, new RemoteLinuxCheckForFreeDiskSpaceStep(dc->stepList()));
- dc->stepList()->insertStep(1, new GenericDirectUploadStep(dc->stepList(),
- GenericDirectUploadStep::stepId()));
- return dc;
-}
-
-bool RemoteLinuxDeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
-{
- return canCreate(parent, idFromMap(map));
-}
-
-DeployConfiguration *RemoteLinuxDeployConfigurationFactory::restore(Target *parent,
- const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
- Core::Id id = idFromMap(map);
- RemoteLinuxDeployConfiguration * const dc = new RemoteLinuxDeployConfiguration(parent, id,
- genericLinuxDisplayName());
- if (!dc->fromMap(map)) {
- delete dc;
- return 0;
- }
- return dc;
-}
-
-bool RemoteLinuxDeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *product) const
-{
- return canCreate(parent, product->id());
-}
-
-DeployConfiguration *RemoteLinuxDeployConfigurationFactory::clone(Target *parent,
- DeployConfiguration *product)
-{
- if (!canClone(parent, product))
- return 0;
- return new RemoteLinuxDeployConfiguration(parent,
- qobject_cast<RemoteLinuxDeployConfiguration *>(product));
-}
-
-Core::Id RemoteLinuxDeployConfigurationFactory::genericDeployConfigurationId()
-{
- return "DeployToGenericLinux";
-}
-
-} // namespace Internal
-} // namespace RemoteLinux
diff --git a/src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.h b/src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.h
deleted file mode 100644
index 762d981f2a..0000000000
--- a/src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <projectexplorer/deployconfiguration.h>
-
-namespace RemoteLinux {
-namespace Internal {
-
-class RemoteLinuxDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
-{
- Q_OBJECT
-
-public:
- explicit RemoteLinuxDeployConfigurationFactory(QObject *parent = 0);
-
- QList<Core::Id> availableCreationIds(ProjectExplorer::Target *target) const override;
- QString displayNameForId(Core::Id id) const override;
- bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override;
- ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, Core::Id id) override;
- bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::DeployConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
- bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *product) const override;
- ProjectExplorer::DeployConfiguration *clone(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *product) override;
-
- static Core::Id genericDeployConfigurationId();
-};
-
-} // namespace Internal
-} // namespace RemoteLinux
diff --git a/src/plugins/remotelinux/remotelinuxplugin.cpp b/src/plugins/remotelinux/remotelinuxplugin.cpp
index b7d71997d7..a72bfc5e94 100644
--- a/src/plugins/remotelinux/remotelinuxplugin.cpp
+++ b/src/plugins/remotelinux/remotelinuxplugin.cpp
@@ -27,19 +27,38 @@
#include "embeddedlinuxqtversionfactory.h"
#include "genericlinuxdeviceconfigurationfactory.h"
-#include "genericremotelinuxdeploystepfactory.h"
#include "remotelinuxqmltoolingsupport.h"
#include "remotelinuxcustomrunconfiguration.h"
#include "remotelinuxdebugsupport.h"
-#include "remotelinuxdeployconfigurationfactory.h"
+#include "remotelinuxdeployconfiguration.h"
#include "remotelinuxrunconfiguration.h"
#include "remotelinuxrunconfigurationfactory.h"
+#include "genericdirectuploadstep.h"
+#include "remotelinuxcheckforfreediskspacestep.h"
+#include "remotelinuxdeployconfiguration.h"
+#include "remotelinuxcustomcommanddeploymentstep.h"
+#include "tarpackagecreationstep.h"
+#include "uploadandinstalltarpackagestep.h"
+
#include <QtPlugin>
namespace RemoteLinux {
namespace Internal {
+template <class Step>
+class GenericLinuxDeployStepFactory : public ProjectExplorer::BuildStepFactory
+{
+public:
+ GenericLinuxDeployStepFactory()
+ {
+ registerStep<Step>(Step::stepId());
+ setDisplayName(Step::displayName());
+ setSupportedConfiguration(RemoteLinuxDeployConfiguration::genericDeployConfigurationId());
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
+ }
+};
+
RemoteLinuxPlugin::RemoteLinuxPlugin()
{
setObjectName(QLatin1String("RemoteLinuxPlugin"));
@@ -69,7 +88,12 @@ bool RemoteLinuxPlugin::initialize(const QStringList &arguments,
addAutoReleasedObject(new RemoteLinuxRunConfigurationFactory);
addAutoReleasedObject(new RemoteLinuxCustomRunConfigurationFactory);
addAutoReleasedObject(new RemoteLinuxDeployConfigurationFactory);
- addAutoReleasedObject(new GenericRemoteLinuxDeployStepFactory);
+ addAutoReleasedObject(new GenericLinuxDeployStepFactory<TarPackageCreationStep>);
+ addAutoReleasedObject(new GenericLinuxDeployStepFactory<UploadAndInstallTarPackageStep>);
+ addAutoReleasedObject(new GenericLinuxDeployStepFactory<GenericDirectUploadStep>);
+ addAutoReleasedObject(new GenericLinuxDeployStepFactory
+ <GenericRemoteLinuxCustomCommandDeploymentStep>);
+ addAutoReleasedObject(new GenericLinuxDeployStepFactory<RemoteLinuxCheckForFreeDiskSpaceStep>);
addAutoReleasedObject(new EmbeddedLinuxQtVersionFactory);
diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp
index c16c6371c4..0f5eb89a86 100644
--- a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp
+++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp
@@ -66,7 +66,12 @@ public:
using namespace Internal;
RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target)
- : RunConfiguration(target), d(new RemoteLinuxRunConfigurationPrivate)
+ : RemoteLinuxRunConfiguration(target, IdPrefix)
+{
+}
+
+RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Core::Id id)
+ : RunConfiguration(target, id), d(new RemoteLinuxRunConfigurationPrivate)
{
addExtraAspect(new RemoteLinuxEnvironmentAspect(this));
@@ -79,18 +84,9 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target)
this, &RemoteLinuxRunConfiguration::handleBuildSystemDataUpdated);
}
-void RemoteLinuxRunConfiguration::initialize(Core::Id id)
-{
- RunConfiguration::initialize(id);
-
- d->targetName = id.suffixAfter(RemoteLinuxRunConfiguration::IdPrefix);
- setDefaultDisplayName(defaultDisplayName());
-}
-
-void RemoteLinuxRunConfiguration::setTargetName(const QString &targetName)
+QString RemoteLinuxRunConfiguration::extraId() const
{
- d->targetName = targetName;
- setDefaultDisplayName(defaultDisplayName());
+ return d->targetName;
}
RemoteLinuxRunConfiguration::~RemoteLinuxRunConfiguration()
@@ -120,7 +116,7 @@ Runnable RemoteLinuxRunConfiguration::runnable() const
QVariantMap RemoteLinuxRunConfiguration::toMap() const
{
- QVariantMap map(RunConfiguration::toMap());
+ QVariantMap map = RunConfiguration::toMap();
map.insert(QLatin1String(ArgumentsKey), d->arguments);
map.insert(QLatin1String(TargetNameKey), d->targetName);
map.insert(QLatin1String(UseAlternateExeKey), d->useAlternateRemoteExecutable);
@@ -149,8 +145,13 @@ bool RemoteLinuxRunConfiguration::fromMap(const QVariantMap &map)
d->alternateRemoteExecutable = map.value(QLatin1String(AlternateExeKey)).toString();
d->workingDirectory = map.value(QLatin1String(WorkingDirectoryKey)).toString();
- setDefaultDisplayName(defaultDisplayName());
+ // Hack for old-style mangled ids. FIXME: Remove.
+ if (d->targetName.isEmpty()) {
+ QString extra = ProjectExplorer::idFromMap(map).suffixAfter(id());
+ d->targetName = extra;
+ }
+ setDefaultDisplayName(defaultDisplayName());
return true;
}
diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.h b/src/plugins/remotelinux/remotelinuxrunconfiguration.h
index 0aa730e868..466ae3432b 100644
--- a/src/plugins/remotelinux/remotelinuxrunconfiguration.h
+++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.h
@@ -40,7 +40,6 @@ class REMOTELINUX_EXPORT RemoteLinuxRunConfiguration : public ProjectExplorer::R
{
Q_OBJECT
friend class RemoteLinuxRunConfigurationWidget;
- friend class ProjectExplorer::IRunConfigurationFactory;
public:
explicit RemoteLinuxRunConfiguration(ProjectExplorer::Target *target);
@@ -74,13 +73,14 @@ signals:
void targetInformationChanged() const;
protected:
- void initialize(Core::Id id) override;
- void setTargetName(const QString &targetName);
+ // FIXME: Used by QNX, remove.
+ RemoteLinuxRunConfiguration(ProjectExplorer::Target *target, Core::Id id);
bool fromMap(const QVariantMap &map) override;
- QString defaultDisplayName();
+ QString extraId() const override;
private:
+ QString defaultDisplayName();
void handleBuildSystemDataUpdated();
Internal::RemoteLinuxRunConfigurationPrivate * const d;
diff --git a/src/plugins/remotelinux/tarpackagecreationstep.cpp b/src/plugins/remotelinux/tarpackagecreationstep.cpp
index 327cbf02d6..65b7c8e80e 100644
--- a/src/plugins/remotelinux/tarpackagecreationstep.cpp
+++ b/src/plugins/remotelinux/tarpackagecreationstep.cpp
@@ -132,17 +132,6 @@ struct TarFileHeader {
TarPackageCreationStep::TarPackageCreationStep(BuildStepList *bsl)
: AbstractPackagingStep(bsl, stepId())
{
- ctor();
-}
-
-TarPackageCreationStep::TarPackageCreationStep(BuildStepList *bsl, TarPackageCreationStep *other)
- : AbstractPackagingStep(bsl, other)
-{
- ctor();
-}
-
-void TarPackageCreationStep::ctor()
-{
setDefaultDisplayName(displayName());
m_ignoreMissingFiles = false;
}
diff --git a/src/plugins/remotelinux/tarpackagecreationstep.h b/src/plugins/remotelinux/tarpackagecreationstep.h
index a2639ab686..b464a1e522 100644
--- a/src/plugins/remotelinux/tarpackagecreationstep.h
+++ b/src/plugins/remotelinux/tarpackagecreationstep.h
@@ -43,7 +43,6 @@ class REMOTELINUX_EXPORT TarPackageCreationStep : public AbstractPackagingStep
Q_OBJECT
public:
TarPackageCreationStep(ProjectExplorer::BuildStepList *bsl);
- TarPackageCreationStep(ProjectExplorer::BuildStepList *bsl, TarPackageCreationStep *other);
static Core::Id stepId();
static QString displayName();
@@ -69,7 +68,6 @@ private:
QString packageFileName() const override;
- void ctor();
bool doPackage(QFutureInterface<bool> &fi);
bool appendFile(QFile &tarFile, const QFileInfo &fileInfo,
const QString &remoteFilePath, const QFutureInterface<bool> &fi);
diff --git a/src/plugins/remotelinux/uploadandinstalltarpackagestep.cpp b/src/plugins/remotelinux/uploadandinstalltarpackagestep.cpp
index e188e6a573..a2b00a3f49 100644
--- a/src/plugins/remotelinux/uploadandinstalltarpackagestep.cpp
+++ b/src/plugins/remotelinux/uploadandinstalltarpackagestep.cpp
@@ -64,18 +64,6 @@ AbstractRemoteLinuxPackageInstaller *UploadAndInstallTarPackageService::packageI
UploadAndInstallTarPackageStep::UploadAndInstallTarPackageStep(BuildStepList *bsl)
: AbstractRemoteLinuxDeployStep(bsl, stepId())
{
- ctor();
-}
-
-UploadAndInstallTarPackageStep::UploadAndInstallTarPackageStep(BuildStepList *bsl,
- UploadAndInstallTarPackageStep *other)
- : AbstractRemoteLinuxDeployStep(bsl, other)
-{
- ctor();
-}
-
-void UploadAndInstallTarPackageStep::ctor()
-{
m_deployService = new UploadAndInstallTarPackageService(this);
setDefaultDisplayName(displayName());
}
diff --git a/src/plugins/remotelinux/uploadandinstalltarpackagestep.h b/src/plugins/remotelinux/uploadandinstalltarpackagestep.h
index 5ac669de4a..edcdeff9cd 100644
--- a/src/plugins/remotelinux/uploadandinstalltarpackagestep.h
+++ b/src/plugins/remotelinux/uploadandinstalltarpackagestep.h
@@ -54,8 +54,6 @@ class REMOTELINUX_EXPORT UploadAndInstallTarPackageStep : public AbstractRemoteL
public:
explicit UploadAndInstallTarPackageStep(ProjectExplorer::BuildStepList *bsl);
- UploadAndInstallTarPackageStep(ProjectExplorer::BuildStepList *bsl,
- UploadAndInstallTarPackageStep *other);
bool initInternal(QString *error = 0) override;
@@ -67,8 +65,6 @@ public:
private:
AbstractRemoteLinuxDeployService *deployService() const override { return m_deployService; }
- void ctor();
-
UploadAndInstallTarPackageService *m_deployService;
};
diff --git a/src/plugins/winrt/winrtdeployconfiguration.cpp b/src/plugins/winrt/winrtdeployconfiguration.cpp
index 66b8917b1c..2a801c7ff0 100644
--- a/src/plugins/winrt/winrtdeployconfiguration.cpp
+++ b/src/plugins/winrt/winrtdeployconfiguration.cpp
@@ -31,7 +31,6 @@
#include <projectexplorer/target.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
-#include <qtsupport/qtkitinformation.h>
#include <QCoreApplication>
@@ -40,142 +39,59 @@ using namespace ProjectExplorer;
namespace WinRt {
namespace Internal {
-static const char appxDeployConfigurationC[] = "WinRTAppxDeployConfiguration";
-static const char phoneDeployConfigurationC[] = "WinRTPhoneDeployConfiguration";
-static const char emulatorDeployConfigurationC[] = "WinRTEmulatorDeployConfiguration";
+const char appxDeployConfigurationC[] = "WinRTAppxDeployConfiguration";
+const char phoneDeployConfigurationC[] = "WinRTPhoneDeployConfiguration";
+const char emulatorDeployConfigurationC[] = "WinRTEmulatorDeployConfiguration";
-static QString msgDeployConfigurationDisplayName(Core::Id id)
+struct WinRtAppDeployConfiguration : DeployConfiguration
{
- if (id == appxDeployConfigurationC) {
- return QCoreApplication::translate("WinRt::Internal::WinRtDeployConfiguration",
- "Run windeployqt");
- }
- if (id == phoneDeployConfigurationC) {
- return QCoreApplication::translate("WinRt::Internal::WinRtDeployConfiguration",
- "Deploy to Windows Phone");
- }
- if (id == emulatorDeployConfigurationC) {
- return QCoreApplication::translate("WinRt::Internal::WinRtDeployConfiguration",
- "Deploy to Windows Phone Emulator");
- }
- return QString();
-}
-
-WinRtDeployConfigurationFactory::WinRtDeployConfigurationFactory(QObject *parent)
- : DeployConfigurationFactory(parent)
-{
-}
-
-QString WinRtDeployConfigurationFactory::displayNameForId(Core::Id id) const
-{
- return msgDeployConfigurationDisplayName(id);
-}
-
-QList<Core::Id> WinRtDeployConfigurationFactory::availableCreationIds(Target *parent) const
-{
- if (!parent->project()->supportsKit(parent->kit()))
- return QList<Core::Id>();
-
- IDevice::ConstPtr device = DeviceKitInformation::device(parent->kit());
- if (!device)
- return QList<Core::Id>();
-
- if (device->type() == Constants::WINRT_DEVICE_TYPE_LOCAL)
- return QList<Core::Id>() << Core::Id(appxDeployConfigurationC);
-
- if (device->type() == Constants::WINRT_DEVICE_TYPE_PHONE)
- return QList<Core::Id>() << Core::Id(phoneDeployConfigurationC);
-
- if (device->type() == Constants::WINRT_DEVICE_TYPE_EMULATOR)
- return QList<Core::Id>() << Core::Id(emulatorDeployConfigurationC);
-
- return QList<Core::Id>();
-}
-
-bool WinRtDeployConfigurationFactory::canCreate(Target *parent, Core::Id id) const
-{
- return availableCreationIds(parent).contains(id);
-}
+ WinRtAppDeployConfiguration(Target *target) : DeployConfiguration(target, appxDeployConfigurationC) {}
+ void initialize() { stepList()->appendStep(new WinRtPackageDeploymentStep(stepList())); }
+};
-DeployConfiguration *WinRtDeployConfigurationFactory::create(Target *parent, Core::Id id)
+WinRtAppDeployConfigurationFactory::WinRtAppDeployConfigurationFactory()
{
- if (id == appxDeployConfigurationC
- || id == phoneDeployConfigurationC
- || id == emulatorDeployConfigurationC) {
- return new WinRtDeployConfiguration(parent, id);
- }
- return 0;
+ registerDeployConfiguration<WinRtAppDeployConfiguration>(appxDeployConfigurationC);
+ setDefaultDisplayName(QCoreApplication::translate("WinRt::Internal::WinRtDeployConfiguration",
+ "Run windeployqt"));
+ setSupportedTargetDeviceTypes({Constants::WINRT_DEVICE_TYPE_LOCAL});
}
-bool WinRtDeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
+struct WinRtPhoneDeployConfiguration : DeployConfiguration
{
- return canCreate(parent, idFromMap(map));
-}
+ WinRtPhoneDeployConfiguration(Target *target) : DeployConfiguration(target, phoneDeployConfigurationC) {}
+ void initialize() { stepList()->appendStep(new WinRtPackageDeploymentStep(stepList())); }
+};
-DeployConfiguration *WinRtDeployConfigurationFactory::restore(Target *parent,
- const QVariantMap &map)
+WinRtPhoneDeployConfigurationFactory::WinRtPhoneDeployConfigurationFactory()
{
- WinRtDeployConfiguration *dc = new WinRtDeployConfiguration(parent, idFromMap(map));
- if (!dc->fromMap(map)) {
- delete dc;
- return 0;
- }
- return dc;
+ registerDeployConfiguration<WinRtPhoneDeployConfiguration>(phoneDeployConfigurationC);
+ setDefaultDisplayName(QCoreApplication::translate("WinRt::Internal::WinRtDeployConfiguration",
+ "Deploy to Windows Phone"));
+ setSupportedTargetDeviceTypes({Constants::WINRT_DEVICE_TYPE_PHONE});
}
-bool WinRtDeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *source) const
+struct WinRtEmulatorDeployConfiguration : DeployConfiguration
{
- return availableCreationIds(parent).contains(source->id());
-}
+ WinRtEmulatorDeployConfiguration(Target *target) : DeployConfiguration(target, emulatorDeployConfigurationC) {}
+ void initialize() { stepList()->appendStep(new WinRtPackageDeploymentStep(stepList())); }
+};
-DeployConfiguration *WinRtDeployConfigurationFactory::clone(Target *parent,
- DeployConfiguration *source)
+WinRtEmulatorDeployConfigurationFactory::WinRtEmulatorDeployConfigurationFactory()
{
- if (source->id() == appxDeployConfigurationC
- || source->id() == phoneDeployConfigurationC
- || source->id() == emulatorDeployConfigurationC) {
- return new WinRtDeployConfiguration(parent, source);
- }
- return 0;
-}
-
-QList<BuildStepInfo> WinRtDeployStepFactory::availableSteps(BuildStepList *parent) const
-{
- if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY
- || !parent->target()->project()->supportsKit(parent->target()->kit())
- || parent->contains(Constants::WINRT_BUILD_STEP_DEPLOY))
- return {};
-
- return {{Constants::WINRT_BUILD_STEP_DEPLOY,
- QCoreApplication::translate("WinRt::Internal::WinRtDeployStepFactory", "Run windeployqt"),
- BuildStepInfo::Unclonable}};
-}
-
-BuildStep *WinRtDeployStepFactory::create(BuildStepList *parent, Core::Id id)
-{
- Q_UNUSED(id)
- return new WinRtPackageDeploymentStep(parent);
-}
-
-BuildStep *WinRtDeployStepFactory::clone(BuildStepList *parent, BuildStep *source)
-{
- Q_UNUSED(parent);
- Q_UNUSED(source);
- return 0;
-}
-
-WinRtDeployConfiguration::WinRtDeployConfiguration(Target *target, Core::Id id)
- : DeployConfiguration(target, id)
-{
- setDefaultDisplayName(msgDeployConfigurationDisplayName(id));
-
- stepList()->insertStep(0, new WinRtPackageDeploymentStep(stepList()));
+ registerDeployConfiguration<WinRtEmulatorDeployConfiguration>(emulatorDeployConfigurationC);
+ setDefaultDisplayName(QCoreApplication::translate("WinRt::Internal::WinRtDeployConfiguration",
+ "Deploy to Windows Phone Emulator"));
+ setSupportedTargetDeviceTypes({Constants::WINRT_DEVICE_TYPE_EMULATOR});
}
-WinRtDeployConfiguration::WinRtDeployConfiguration(Target *target, DeployConfiguration *source)
- : DeployConfiguration(target, source)
+WinRtDeployStepFactory::WinRtDeployStepFactory()
{
- cloneSteps(source);
+ registerStep<WinRtPackageDeploymentStep>(Constants::WINRT_BUILD_STEP_DEPLOY);
+ setDisplayName(QCoreApplication::translate("WinRt::Internal::WinRtDeployStepFactory", "Run windeployqt"));
+ setFlags(BuildStepInfo::Unclonable);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
+ setRepeatable(false);
}
} // namespace Internal
diff --git a/src/plugins/winrt/winrtdeployconfiguration.h b/src/plugins/winrt/winrtdeployconfiguration.h
index 6e036ad7d0..906679ea6d 100644
--- a/src/plugins/winrt/winrtdeployconfiguration.h
+++ b/src/plugins/winrt/winrtdeployconfiguration.h
@@ -31,39 +31,28 @@
namespace WinRt {
namespace Internal {
-class WinRtDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
+class WinRtAppDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
{
public:
- explicit WinRtDeployConfigurationFactory(QObject *parent = 0);
- QString displayNameForId(Core::Id id) const override;
- QList<Core::Id> availableCreationIds(ProjectExplorer::Target *parent) const override;
- bool canCreate(ProjectExplorer::Target *parent, Core::Id id) const override;
- ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, Core::Id id) override;
- bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const override;
- ProjectExplorer::DeployConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map) override;
- bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *source) const override;
- ProjectExplorer::DeployConfiguration *clone(ProjectExplorer::Target *parent,
- ProjectExplorer::DeployConfiguration *source) override;
+ WinRtAppDeployConfigurationFactory();
};
-class WinRtDeployStepFactory : public ProjectExplorer::IBuildStepFactory
+class WinRtPhoneDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
{
public:
- QList<ProjectExplorer::BuildStepInfo>
- availableSteps(ProjectExplorer::BuildStepList *parent) const override;
+ WinRtPhoneDeployConfigurationFactory();
+};
- ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
- ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
- ProjectExplorer::BuildStep *source) override;
+class WinRtEmulatorDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
+{
+public:
+ WinRtEmulatorDeployConfigurationFactory();
};
-class WinRtDeployConfiguration : public ProjectExplorer::DeployConfiguration
+class WinRtDeployStepFactory : public ProjectExplorer::BuildStepFactory
{
-private:
- friend class WinRtDeployConfigurationFactory;
- explicit WinRtDeployConfiguration(ProjectExplorer::Target *target, Core::Id id);
- explicit WinRtDeployConfiguration(ProjectExplorer::Target *target,
- ProjectExplorer::DeployConfiguration *source);
+public:
+ WinRtDeployStepFactory();
};
} // namespace Internal
diff --git a/src/plugins/winrt/winrtpackagedeploymentstep.cpp b/src/plugins/winrt/winrtpackagedeploymentstep.cpp
index 2725a3cf38..5b9da4f611 100644
--- a/src/plugins/winrt/winrtpackagedeploymentstep.cpp
+++ b/src/plugins/winrt/winrtpackagedeploymentstep.cpp
@@ -50,7 +50,6 @@ namespace Internal {
WinRtPackageDeploymentStep::WinRtPackageDeploymentStep(BuildStepList *bsl)
: AbstractProcessStep(bsl, Constants::WINRT_BUILD_STEP_DEPLOY)
- , m_createMappingFile(false)
{
setDisplayName(tr("Run windeployqt"));
m_args = defaultWinDeployQtArguments();
diff --git a/src/plugins/winrt/winrtpackagedeploymentstep.h b/src/plugins/winrt/winrtpackagedeploymentstep.h
index f7a2cecfbf..55d6d01203 100644
--- a/src/plugins/winrt/winrtpackagedeploymentstep.h
+++ b/src/plugins/winrt/winrtpackagedeploymentstep.h
@@ -33,8 +33,10 @@ namespace Internal {
class WinRtPackageDeploymentStep : public ProjectExplorer::AbstractProcessStep
{
Q_OBJECT
+
public:
explicit WinRtPackageDeploymentStep(ProjectExplorer::BuildStepList *bsl);
+
bool init(QList<const BuildStep *> &earlierSteps) override;
void run(QFutureInterface<bool> &fi) override;
bool processSucceeded(int exitCode, QProcess::ExitStatus status) override;
@@ -60,7 +62,7 @@ private:
QString m_executablePathInManifest;
QString m_mappingFileContent;
QString m_manifestFileName;
- bool m_createMappingFile;
+ bool m_createMappingFile = false;
};
} // namespace Internal
diff --git a/src/plugins/winrt/winrtplugin.cpp b/src/plugins/winrt/winrtplugin.cpp
index 3deedc6e45..8a7a371851 100644
--- a/src/plugins/winrt/winrtplugin.cpp
+++ b/src/plugins/winrt/winrtplugin.cpp
@@ -62,7 +62,9 @@ bool WinRtPlugin::initialize(const QStringList &arguments, QString *errorMessage
addAutoReleasedObject(new Internal::WinRtRunConfigurationFactory);
addAutoReleasedObject(new Internal::WinRtQtVersionFactory);
- addAutoReleasedObject(new Internal::WinRtDeployConfigurationFactory);
+ addAutoReleasedObject(new Internal::WinRtAppDeployConfigurationFactory);
+ addAutoReleasedObject(new Internal::WinRtPhoneDeployConfigurationFactory);
+ addAutoReleasedObject(new Internal::WinRtEmulatorDeployConfigurationFactory);
addAutoReleasedObject(new Internal::WinRtDeployStepFactory);
auto runConstraint = [](RunConfiguration *runConfig) {
diff --git a/src/plugins/winrt/winrtrunconfiguration.cpp b/src/plugins/winrt/winrtrunconfiguration.cpp
index 4b01d2f9e9..0b794a0eb3 100644
--- a/src/plugins/winrt/winrtrunconfiguration.cpp
+++ b/src/plugins/winrt/winrtrunconfiguration.cpp
@@ -41,21 +41,16 @@ namespace Internal {
static const char uninstallAfterStopIdC[] = "WinRtRunConfigurationUninstallAfterStopId";
-static QString pathFromId(Core::Id id)
-{
- return id.suffixAfter(Constants::WINRT_RC_PREFIX);
-}
-
WinRtRunConfiguration::WinRtRunConfiguration(ProjectExplorer::Target *target)
- : RunConfiguration(target)
+ : RunConfiguration(target, Constants::WINRT_RC_PREFIX)
{
setDisplayName(tr("Run App Package"));
addExtraAspect(new ProjectExplorer::ArgumentsAspect(this, "WinRtRunConfigurationArgumentsId"));
}
-void WinRtRunConfiguration::initialize(Core::Id id)
+QString WinRtRunConfiguration::extraId() const
{
- m_proFilePath = pathFromId(id);
+ return m_proFilePath;
}
QWidget *WinRtRunConfiguration::createConfigurationWidget()
@@ -74,7 +69,9 @@ bool WinRtRunConfiguration::fromMap(const QVariantMap &map)
{
if (!RunConfiguration::fromMap(map))
return false;
+
setUninstallAfterStop(map.value(QLatin1String(uninstallAfterStopIdC)).toBool());
+ m_proFilePath = ProjectExplorer::idFromMap(map).suffixAfter(id());
return true;
}
diff --git a/src/plugins/winrt/winrtrunconfiguration.h b/src/plugins/winrt/winrtrunconfiguration.h
index 54dde540eb..aa07a14261 100644
--- a/src/plugins/winrt/winrtrunconfiguration.h
+++ b/src/plugins/winrt/winrtrunconfiguration.h
@@ -55,8 +55,7 @@ signals:
void uninstallAfterStopChanged(bool);
private:
- friend class ProjectExplorer::IRunConfigurationFactory;
- void initialize(Core::Id id) override;
+ QString extraId() const final;
QString m_proFilePath;
bool m_uninstallAfterStop = false;
diff --git a/src/plugins/winrt/winrtrunfactories.cpp b/src/plugins/winrt/winrtrunfactories.cpp
index 0cf68b7df9..8eb76c7885 100644
--- a/src/plugins/winrt/winrtrunfactories.cpp
+++ b/src/plugins/winrt/winrtrunfactories.cpp
@@ -62,10 +62,5 @@ QString WinRtRunConfigurationFactory::displayNameForBuildTarget(const QString &)
return tr("Run App Package");
}
-bool WinRtRunConfigurationFactory::canCloneHelper(Target *, RunConfiguration *) const
-{
- return false; // FIXME: Are they really unclonable?
-}
-
} // namespace Internal
} // namespace WinRt
diff --git a/src/plugins/winrt/winrtrunfactories.h b/src/plugins/winrt/winrtrunfactories.h
index 999acba901..cbd4c4afdf 100644
--- a/src/plugins/winrt/winrtrunfactories.h
+++ b/src/plugins/winrt/winrtrunfactories.h
@@ -40,8 +40,6 @@ public:
QList<QString> availableBuildTargets(ProjectExplorer::Target *parent, CreationMode mode) const override;
QString displayNameForBuildTarget(const QString &buildTarget) const override;
-
- bool canCloneHelper(ProjectExplorer::Target *, ProjectExplorer::RunConfiguration *) const override;
};
} // namespace Internal