aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2017-11-29 12:28:40 +0100
committerhjk <hjk@qt.io>2017-12-08 11:17:55 +0000
commit53a151074ad37d12e730fbd85ec0e0675d00f6d0 (patch)
tree041526d48608270cad2db171696fa6cf7099a852
parent9d3c5c6ff5ba059f036efae5fd9572fe454b5d84 (diff)
ProjectExplorer/all: Re-organize BuildSteps/{Deploy,Build}Config setup
This follow the rough pattern of recent *RunConfigurationFactory changes for build and deploy configurations. - Collapse the two lines of constructors similar to what 890c1906e6fb2ec did for RunConfigurations * Deploy* was purely mechanical * Build* ctors are split in connects() in the ctor body to create "empty shell for clone" etc and build step additions in initialize() functions which are only used in the create() case. -- Allows to collapse the shared 'ctor()' functions, too. - Move FooBuildConfigurationFactory::create() implementations to FooBuildConfiguration() constructor. That was a strange and unneeded ping-pong between factories and objects, and furthermore allows one level less of indirection (and for a later, left out here, some reduction of the FooBuildConfiguration interfaces that were only used to accommodate the *Factory::create() functions. - Most {Build,Deploy}Configuration{,Factory} classes had a canHandle(), but there wasn't one in the base classses. Have one there. - Most canHandle() functions were checking simple restrictions on e.g. project or target types, specify those by setters in the constructors instead and check them in the base canHandle() - clone() is generally replaced by a creation of a "shell object" and a fromMap(source->toMap()), implemented in the base, there are two cases left for Android and Qbs that needed(?) some extra polish - generally use canHandle() in base implementation, instead of doing that in all Derived::canFoo() - as a result, canCreate/create/canClone/clone reimplementations are not needed anymore, keep the base implementation for now (could be inlined into their only users later), but de-virtualize them. - Combine Ios{Preset,DSym}BuildStepFactory. There was only one 'dsym' build step they could create. - Split the 'mangled' id into the ProjectConfiguration subtype specific constant identifier, and a QString extraId() bit. Only maintain the mangled id in saved settings. - Make ProjectConfiguration::m_id a constant member, adapt all constructors of derived classe. Not done in this patch: - Finish possible cosmetic changes on top - Add a way to specify restrictions to supported Qt versions (used in Android/Ios), as the base implementation does not depend on the qtsupport plugin - Combine the QList<X> availableFoo() + createFoo(X) function pairs to somthing like a direct QList<struct { X; std::function<X()>; }> fooCreators() to avoid e.g. the baseId.withSuffix() <-> id.suffixAfter(base) pingpong - Remove the *Factories from the global object pool - Do something about priority(). Falling back to plain qmake in android+qmake setup is not helpful. Change-Id: I2be7d88d554c5aa8b7db8edf5b93278e1ae0112a Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
-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