From d58eac632548b9f02e64ad5231ec195c7b951b22 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 5 Oct 2018 19:00:16 +0200 Subject: [PATCH] Handle IDeviceFactory restoring in base class Change-Id: Idb892bcff6b91dbc11a8271915e5cc86d1669e74 Reviewed-by: Christian Kandeler --- src/plugins/android/androiddevicefactory.cpp | 7 +------ src/plugins/android/androiddevicefactory.h | 2 -- .../baremetal/baremetaldeviceconfigurationfactory.cpp | 9 +-------- .../baremetal/baremetaldeviceconfigurationfactory.h | 1 - src/plugins/ios/iosdevicefactory.cpp | 10 +--------- src/plugins/ios/iosdevicefactory.h | 1 - src/plugins/ios/iossimulatorfactory.cpp | 9 +-------- src/plugins/ios/iossimulatorfactory.h | 2 -- .../devicesupport/desktopdevicefactory.cpp | 9 +-------- .../devicesupport/desktopdevicefactory.h | 2 -- .../projectexplorer/devicesupport/devicemanager.cpp | 3 ++- .../projectexplorer/devicesupport/idevicefactory.cpp | 10 ++++++++++ .../projectexplorer/devicesupport/idevicefactory.h | 4 +++- src/plugins/qnx/qnxdevicefactory.cpp | 9 +-------- src/plugins/qnx/qnxdevicefactory.h | 1 - .../genericlinuxdeviceconfigurationfactory.cpp | 9 +-------- .../genericlinuxdeviceconfigurationfactory.h | 1 - src/plugins/winrt/winrtdevicefactory.cpp | 8 +------- src/plugins/winrt/winrtdevicefactory.h | 2 -- 19 files changed, 23 insertions(+), 76 deletions(-) diff --git a/src/plugins/android/androiddevicefactory.cpp b/src/plugins/android/androiddevicefactory.cpp index 4cd82875c3d..6e6f507679c 100644 --- a/src/plugins/android/androiddevicefactory.cpp +++ b/src/plugins/android/androiddevicefactory.cpp @@ -38,12 +38,7 @@ AndroidDeviceFactory::AndroidDeviceFactory() setDisplayName(tr("Android Device")); setCombinedIcon(":/android/images/androiddevicesmall.png", ":/android/images/androiddevice.png"); -} - -ProjectExplorer::IDevice::Ptr AndroidDeviceFactory::restore(const QVariantMap &map) const -{ - Q_UNUSED(map) - return ProjectExplorer::IDevice::Ptr(new AndroidDevice); + setConstructionFunction([] { return ProjectExplorer::IDevice::Ptr(new AndroidDevice); }); } } // namespace Internal diff --git a/src/plugins/android/androiddevicefactory.h b/src/plugins/android/androiddevicefactory.h index 444cc372653..10e97bcd0ec 100644 --- a/src/plugins/android/androiddevicefactory.h +++ b/src/plugins/android/androiddevicefactory.h @@ -35,8 +35,6 @@ class AndroidDeviceFactory : public ProjectExplorer::IDeviceFactory Q_OBJECT public: AndroidDeviceFactory(); - - ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override; }; } // namespace Internal diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp index e6be405faa3..b532a081a25 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.cpp @@ -43,6 +43,7 @@ BareMetalDeviceConfigurationFactory::BareMetalDeviceConfigurationFactory() setCombinedIcon(":/baremetal/images/baremetaldevicesmall.png", ":/baremetal/images/baremetaldevice.png"); setCanCreate(true); + setConstructionFunction([] { return BareMetalDevice::create(); }); } IDevice::Ptr BareMetalDeviceConfigurationFactory::create() const @@ -53,13 +54,5 @@ IDevice::Ptr BareMetalDeviceConfigurationFactory::create() const return wizard.device(); } -IDevice::Ptr BareMetalDeviceConfigurationFactory::restore(const QVariantMap &map) const -{ - QTC_ASSERT(canRestore(map), return IDevice::Ptr()); - const IDevice::Ptr device = BareMetalDevice::create(); - device->fromMap(map); - return device; -} - } // namespace Internal } // namespace BareMetal diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.h b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.h index f067bf2148d..5415491d90c 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationfactory.h +++ b/src/plugins/baremetal/baremetaldeviceconfigurationfactory.h @@ -39,7 +39,6 @@ public: BareMetalDeviceConfigurationFactory(); ProjectExplorer::IDevice::Ptr create() const override; - ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override; }; } // namespace Internal diff --git a/src/plugins/ios/iosdevicefactory.cpp b/src/plugins/ios/iosdevicefactory.cpp index febe5ca5ee2..6370cbce409 100644 --- a/src/plugins/ios/iosdevicefactory.cpp +++ b/src/plugins/ios/iosdevicefactory.cpp @@ -38,6 +38,7 @@ IosDeviceFactory::IosDeviceFactory() setDisplayName(IosDevice::name()); setCombinedIcon(":/ios/images/iosdevicesmall.png", ":/ios/images/iosdevice.png"); + setConstructionFunction([] { return ProjectExplorer::IDevice::Ptr(new IosDevice); }); } bool IosDeviceFactory::canRestore(const QVariantMap &map) const @@ -49,14 +50,5 @@ bool IosDeviceFactory::canRestore(const QVariantMap &map) const return true; } -ProjectExplorer::IDevice::Ptr IosDeviceFactory::restore(const QVariantMap &map) const -{ - IosDevice *newDev = new IosDevice; - newDev->fromMap(map); - // updating the active ones should be enough... - //IosDeviceManager::instance()->updateInfo(newDev->uniqueDeviceID()); - return ProjectExplorer::IDevice::Ptr(newDev); -} - } // namespace Internal } // namespace Ios diff --git a/src/plugins/ios/iosdevicefactory.h b/src/plugins/ios/iosdevicefactory.h index 0be568e0080..cdf3d61ffd5 100644 --- a/src/plugins/ios/iosdevicefactory.h +++ b/src/plugins/ios/iosdevicefactory.h @@ -37,7 +37,6 @@ public: IosDeviceFactory(); bool canRestore(const QVariantMap &map) const override; - ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override; }; } // namespace Internal diff --git a/src/plugins/ios/iossimulatorfactory.cpp b/src/plugins/ios/iossimulatorfactory.cpp index 91442e68479..e90bd76570e 100644 --- a/src/plugins/ios/iossimulatorfactory.cpp +++ b/src/plugins/ios/iossimulatorfactory.cpp @@ -40,14 +40,7 @@ IosSimulatorFactory::IosSimulatorFactory() setDisplayName(tr("iOS Simulator")); setCombinedIcon(":/ios/images/iosdevicesmall.png", ":/ios/images/iosdevice.png"); -} - -ProjectExplorer::IDevice::Ptr IosSimulatorFactory::restore(const QVariantMap &map) const -{ - QTC_ASSERT(canRestore(map), return ProjectExplorer::IDevice::Ptr()); - const ProjectExplorer::IDevice::Ptr device = ProjectExplorer::IDevice::Ptr(new IosSimulator()); - device->fromMap(map); - return device; + setConstructionFunction([] { return ProjectExplorer::IDevice::Ptr(new IosSimulator()); }); } } // namespace Internal diff --git a/src/plugins/ios/iossimulatorfactory.h b/src/plugins/ios/iossimulatorfactory.h index 7db52bb9c8e..5d05c7b370f 100644 --- a/src/plugins/ios/iossimulatorfactory.h +++ b/src/plugins/ios/iossimulatorfactory.h @@ -35,8 +35,6 @@ class IosSimulatorFactory : public ProjectExplorer::IDeviceFactory Q_OBJECT public: IosSimulatorFactory(); - - ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp index 0513e5932a4..0c4e488c714 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp @@ -40,6 +40,7 @@ namespace Internal { DesktopDeviceFactory::DesktopDeviceFactory() : IDeviceFactory(Constants::DESKTOP_DEVICE_TYPE) { + setConstructionFunction([] { return IDevice::Ptr(new DesktopDevice); }); setDisplayName(tr("Desktop")); setIcon(Utils::creatorTheme()->flag(Utils::Theme::FlatSideBarIcons) ? Utils::Icon::combinedIcon({Icons::DESKTOP_DEVICE.icon(), @@ -47,13 +48,5 @@ DesktopDeviceFactory::DesktopDeviceFactory() : QApplication::style()->standardIcon(QStyle::SP_ComputerIcon)); } -IDevice::Ptr DesktopDeviceFactory::restore(const QVariantMap &map) const -{ - QTC_ASSERT(canRestore(map), return ProjectExplorer::IDevice::Ptr()); - const ProjectExplorer::IDevice::Ptr device = IDevice::Ptr(new DesktopDevice); - device->fromMap(map); - return device; -} - } // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h index 21835194d55..1ef030e67f6 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h +++ b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h @@ -34,8 +34,6 @@ class DesktopDeviceFactory : public IDeviceFactory { public: DesktopDeviceFactory(); - - IDevice::Ptr restore(const QVariantMap &map) const override; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index d2f00e343b6..939d4d3884b 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -199,8 +199,9 @@ QList DeviceManager::fromMap(const QVariantMap &map, const IDeviceFactory * const factory = restoreFactory(map); if (!factory) continue; - const IDevice::Ptr device = factory->restore(map); + const IDevice::Ptr device = factory->construct(); QTC_ASSERT(device, continue); + device->fromMap(map); devices << device; } return devices; diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp index 1b6fb62f91e..9f0cb7a55b9 100644 --- a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp @@ -79,6 +79,11 @@ bool IDeviceFactory::canCreate() const return m_canCreate; } +IDevice::Ptr IDeviceFactory::construct() const +{ + return m_constructor ? m_constructor() : IDevice::Ptr(); +} + static QList g_deviceFactories; IDeviceFactory *IDeviceFactory::find(Core::Id type) @@ -112,6 +117,11 @@ void IDeviceFactory::setCanCreate(bool canCreate) m_canCreate = canCreate; } +void IDeviceFactory::setConstructionFunction(const std::function &constructor) +{ + m_constructor = constructor; +} + void IDeviceFactory::setDisplayName(const QString &displayName) { m_displayName = displayName; diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.h b/src/plugins/projectexplorer/devicesupport/idevicefactory.h index 83017f745c0..419e76d2dad 100644 --- a/src/plugins/projectexplorer/devicesupport/idevicefactory.h +++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.h @@ -45,11 +45,11 @@ public: QString displayName() const { return m_displayName; } QIcon icon() const { return m_icon; } bool canCreate() const; + IDevice::Ptr construct() const; virtual IDevice::Ptr create() const { return IDevice::Ptr(); } virtual bool canRestore(const QVariantMap &) const { return true; } - virtual IDevice::Ptr restore(const QVariantMap &map) const = 0; static IDeviceFactory *find(Core::Id type); @@ -60,12 +60,14 @@ protected: void setIcon(const QIcon &icon); void setCombinedIcon(const QString &small, const QString &large); void setCanCreate(bool canCreate); + void setConstructionFunction(const std::function &constructor); private: const Core::Id m_deviceType; QString m_displayName; QIcon m_icon; bool m_canCreate = false; + std::function m_constructor; }; } // namespace ProjectExplorer diff --git a/src/plugins/qnx/qnxdevicefactory.cpp b/src/plugins/qnx/qnxdevicefactory.cpp index ef6bde9c8cf..ba025df8d16 100644 --- a/src/plugins/qnx/qnxdevicefactory.cpp +++ b/src/plugins/qnx/qnxdevicefactory.cpp @@ -41,6 +41,7 @@ QnxDeviceFactory::QnxDeviceFactory() setCombinedIcon(":/qnx/images/qnxdevicesmall.png", ":/qnx/images/qnxdevice.png"); setCanCreate(true); + setConstructionFunction([] { return QnxDevice::create(); }); } ProjectExplorer::IDevice::Ptr QnxDeviceFactory::create() const @@ -51,14 +52,6 @@ ProjectExplorer::IDevice::Ptr QnxDeviceFactory::create() const return wizard.device(); } -ProjectExplorer::IDevice::Ptr QnxDeviceFactory::restore(const QVariantMap &map) const -{ - QTC_ASSERT(canRestore(map), return QnxDevice::Ptr()); - const QnxDevice::Ptr device = QnxDevice::create(); - device->fromMap(map); - return device; -} - Core::Id QnxDeviceFactory::deviceType() { return Core::Id(Constants::QNX_QNX_OS_TYPE); diff --git a/src/plugins/qnx/qnxdevicefactory.h b/src/plugins/qnx/qnxdevicefactory.h index 3f903d25b67..9b08ec5efe3 100644 --- a/src/plugins/qnx/qnxdevicefactory.h +++ b/src/plugins/qnx/qnxdevicefactory.h @@ -38,7 +38,6 @@ public: QnxDeviceFactory(); ProjectExplorer::IDevice::Ptr create() const override; - ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override; static Core::Id deviceType(); }; diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp index 0c8c5be51a4..385b702bae9 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp @@ -43,6 +43,7 @@ GenericLinuxDeviceConfigurationFactory::GenericLinuxDeviceConfigurationFactory() setDisplayName(tr("Generic Linux Device")); setIcon(QIcon()); setCanCreate(true); + setConstructionFunction([] { return LinuxDevice::create(); }); } IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create() const @@ -53,12 +54,4 @@ IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create() const return wizard.device(); } -IDevice::Ptr GenericLinuxDeviceConfigurationFactory::restore(const QVariantMap &map) const -{ - QTC_ASSERT(canRestore(map), return IDevice::Ptr()); - const IDevice::Ptr device = LinuxDevice::create(); - device->fromMap(map); - return device; -} - } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h index 3cdee527549..889840b3375 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h @@ -40,7 +40,6 @@ public: GenericLinuxDeviceConfigurationFactory(); ProjectExplorer::IDevice::Ptr create() const override; - ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override; }; } // namespace RemoteLinux diff --git a/src/plugins/winrt/winrtdevicefactory.cpp b/src/plugins/winrt/winrtdevicefactory.cpp index 615db56d8f9..5686d0c8ed3 100644 --- a/src/plugins/winrt/winrtdevicefactory.cpp +++ b/src/plugins/winrt/winrtdevicefactory.cpp @@ -59,17 +59,11 @@ WinRtDeviceFactory::WinRtDeviceFactory(Core::Id deviceType) this, &WinRtDeviceFactory::onPrerequisitesLoaded, Qt::QueuedConnection); } setDisplayName(WinRtDevice::displayNameForType(deviceType)); + setConstructionFunction([] { return IDevice::Ptr(new WinRtDevice); }); setCombinedIcon(":/winrt/images/winrtdevicesmall.png", ":/winrt/images/winrtdevice.png"); } -IDevice::Ptr WinRtDeviceFactory::restore(const QVariantMap &map) const -{ - const IDevice::Ptr device(new WinRtDevice); - device->fromMap(map); - return device; -} - void WinRtDeviceFactory::autoDetect() { MessageManager::write(tr("Running Windows Runtime device detection.")); diff --git a/src/plugins/winrt/winrtdevicefactory.h b/src/plugins/winrt/winrtdevicefactory.h index 2d08723b224..32a42a65c45 100644 --- a/src/plugins/winrt/winrtdevicefactory.h +++ b/src/plugins/winrt/winrtdevicefactory.h @@ -37,8 +37,6 @@ class WinRtDeviceFactory : public ProjectExplorer::IDeviceFactory public: explicit WinRtDeviceFactory(Core::Id deviceType); - ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override; - void autoDetect(); void onPrerequisitesLoaded();