From 910496130cfc3d68ff6b7ae992f8cffe6d49b6da Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 18 Jan 2019 11:22:48 +0100 Subject: [PATCH] ProjectExplorer: Add a mechanism to specify initial steps ... in a deploy configuration. The idea is to replace DeployConfiguration-derived::initialize() functions by that. This can also be used to cut link-time ties of "derived plugins" by using step ids instead of creation of real class instances when specifying deploy config contents. Change-Id: Id7c613b054e37fe5d03463b9b0aa7dfef44a8e13 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/deployconfiguration.cpp | 9 +++++++++ src/plugins/projectexplorer/deployconfiguration.h | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/src/plugins/projectexplorer/deployconfiguration.cpp b/src/plugins/projectexplorer/deployconfiguration.cpp index cd951b44948..4b967658786 100644 --- a/src/plugins/projectexplorer/deployconfiguration.cpp +++ b/src/plugins/projectexplorer/deployconfiguration.cpp @@ -198,6 +198,10 @@ DeployConfiguration *DeployConfigurationFactory::create(Target *parent, Core::Id if (!dc) return nullptr; dc->initialize(); + for (const DeployStepCreationInfo &info : qAsConst(m_initialSteps)) { + if (!info.condition || info.condition(parent)) + dc->stepList()->appendStep(info.deployStepId); + } return dc; } @@ -251,6 +255,11 @@ void DeployConfigurationFactory::setSupportedProjectType(Core::Id id) m_supportedProjectType = id; } +void DeployConfigurationFactory::addInitialStep(Core::Id stepId, const std::function &condition) +{ + m_initialSteps.append({stepId, condition}); +} + /// // DefaultDeployConfigurationFactory /// diff --git a/src/plugins/projectexplorer/deployconfiguration.h b/src/plugins/projectexplorer/deployconfiguration.h index 8f2ea2bb407..5cf1ab0dcb1 100644 --- a/src/plugins/projectexplorer/deployconfiguration.h +++ b/src/plugins/projectexplorer/deployconfiguration.h @@ -96,6 +96,9 @@ public: void setDefaultDisplayName(const QString &defaultDisplayName); void setSupportedProjectType(Core::Id id); + // Step is only added if condition is not set, or returns true when called. + void addInitialStep(Core::Id stepId, const std::function &condition = {}); + virtual bool canHandle(ProjectExplorer::Target *target) const; protected: @@ -113,10 +116,15 @@ protected: } private: + struct DeployStepCreationInfo { + Core::Id deployStepId; + std::function condition; // unset counts as unrestricted + }; DeployConfigurationCreator m_creator; Core::Id m_deployConfigBaseId; Core::Id m_supportedProjectType; QList m_supportedTargetDeviceTypes; + QList m_initialSteps; QString m_defaultDisplayName; };