diff --git a/src/plugins/projectexplorer/deployconfiguration.cpp b/src/plugins/projectexplorer/deployconfiguration.cpp index 6be4de92445..96a5bbaf3e2 100644 --- a/src/plugins/projectexplorer/deployconfiguration.cpp +++ b/src/plugins/projectexplorer/deployconfiguration.cpp @@ -217,33 +217,25 @@ DeployConfiguration *DeployConfigurationFactory::create(Target *parent, Core::Id return dc; } -bool DeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *product) const +DeployConfiguration *DeployConfigurationFactory::clone(Target *parent, + const DeployConfiguration *source) { - if (!canHandle(parent)) - return false; - const Core::Id id = product->id(); - if (!id.name().startsWith(m_deployConfigBaseId.name())) - return false; - return true; -} - -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; + return restore(parent, source->toMap()); } DeployConfiguration *DeployConfigurationFactory::restore(Target *parent, const QVariantMap &map) { - if (!canRestore(parent, map)) + const Core::Id id = idFromMap(map); + DeployConfigurationFactory *factory = Utils::findOrDefault(g_deployConfigurationFactories, + [parent, id](DeployConfigurationFactory *f) { + if (!f->canHandle(parent)) + return false; + return id.name().startsWith(f->m_deployConfigBaseId.name()); + }); + if (!factory) return nullptr; - QTC_ASSERT(m_creator, return nullptr); - DeployConfiguration *dc = m_creator(parent); + QTC_ASSERT(factory->m_creator, return nullptr); + DeployConfiguration *dc = factory->m_creator(parent); QTC_ASSERT(dc, return nullptr); if (!dc->fromMap(map)) { delete dc; @@ -252,22 +244,6 @@ DeployConfiguration *DeployConfigurationFactory::restore(Target *parent, const Q return dc; } -bool DeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const -{ - if (!canHandle(parent)) - return false; - const Core::Id id = idFromMap(map); - return id.name().startsWith(m_deployConfigBaseId.name()); -} - -DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, const QVariantMap &map) -{ - return Utils::findOrDefault(g_deployConfigurationFactories, - [&parent, &map](DeployConfigurationFactory *factory) { - return factory->canRestore(parent, map); - }); -} - QList DeployConfigurationFactory::find(Target *parent) { return Utils::filtered(g_deployConfigurationFactories, @@ -276,14 +252,6 @@ QList DeployConfigurationFactory::find(Target *par }); } -DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, DeployConfiguration *dc) -{ - return Utils::findOrDefault(g_deployConfigurationFactories, - [&parent, &dc](DeployConfigurationFactory *factory) { - return factory->canClone(parent, dc); - }); -} - void DeployConfigurationFactory::setSupportedTargetDeviceTypes(const QList &ids) { m_supportedTargetDeviceTypes = ids; diff --git a/src/plugins/projectexplorer/deployconfiguration.h b/src/plugins/projectexplorer/deployconfiguration.h index da1047baecb..76f4ed4579e 100644 --- a/src/plugins/projectexplorer/deployconfiguration.h +++ b/src/plugins/projectexplorer/deployconfiguration.h @@ -85,25 +85,19 @@ public: // used to translate the types to names to display to the user QString displayNameForId(Core::Id id) const; - 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 - 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 find(Target *parent); - static DeployConfigurationFactory *find(Target *parent, DeployConfiguration *dc); + static DeployConfiguration *restore(Target *parent, const QVariantMap &map); + static DeployConfiguration *clone(Target *parent, const DeployConfiguration *dc); void setSupportedTargetDeviceTypes(const QList &ids); void setDefaultDisplayName(const QString &defaultDisplayName); void setSupportedProjectType(Core::Id id); protected: + virtual bool canHandle(ProjectExplorer::Target *target) const; virtual QList availableBuildTargets(Target *parent) const; virtual QString displayNameForBuildTarget(const QString &buildTarget) const; diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 592076002d4..ed6f29dfd96 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -382,12 +382,7 @@ bool Project::copySteps(Target *sourceTarget, Target *newTarget) } foreach (DeployConfiguration *sourceDc, sourceTarget->deployConfigurations()) { - DeployConfigurationFactory *factory = DeployConfigurationFactory::find(newTarget, sourceDc); - if (!factory) { - deployconfigurationError << sourceDc->displayName(); - continue; - } - DeployConfiguration *newDc = factory->clone(newTarget, sourceDc); + DeployConfiguration *newDc = DefaultDeployConfigurationFactory::clone(newTarget, sourceDc); if (!newDc) { deployconfigurationError << sourceDc->displayName(); continue; diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index 5afaeb53bb3..e36b53c1a61 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -773,18 +773,13 @@ bool Target::fromMap(const QVariantMap &map) if (!map.contains(key)) return false; QVariantMap valueMap = map.value(key).toMap(); - DeployConfigurationFactory *factory = DeployConfigurationFactory::find(this, valueMap); - if (!factory) { + DeployConfiguration *dc = DeployConfigurationFactory::restore(this, valueMap); + if (!dc) { Core::Id id = idFromMap(valueMap); qWarning("No factory found to restore deployment configuration of id '%s'!", id.isValid() ? qPrintable(id.toString()) : "UNKNOWN"); continue; } - DeployConfiguration *dc = factory->restore(this, valueMap); - if (!dc) { - qWarning("Factory '%s' failed to restore deployment configuration!", qPrintable(factory->objectName())); - continue; - } QTC_CHECK(dc->id().withSuffix(dc->extraId()) == ProjectExplorer::idFromMap(valueMap)); addDeployConfiguration(dc); if (i == activeConfiguration)