From 43f1281674eb00fb0f2140d9386feaf44998639b Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 17 Nov 2023 13:18:39 +0100 Subject: [PATCH] Qnx: Use new setup scheme for most factories Change-Id: Ie6154d816fb9d77948d73416b43bb933a56f6bbb Reviewed-by: Jarek Kobus --- src/plugins/qnx/qnxanalyzesupport.cpp | 17 ++++++-- src/plugins/qnx/qnxanalyzesupport.h | 8 +--- src/plugins/qnx/qnxdebugsupport.cpp | 17 ++++++-- src/plugins/qnx/qnxdebugsupport.h | 9 +--- src/plugins/qnx/qnxdevice.cpp | 36 ++++++++++------ src/plugins/qnx/qnxdevice.h | 8 +--- src/plugins/qnx/qnxplugin.cpp | 33 +++++++++------ src/plugins/qnx/qnxqtversion.cpp | 19 ++++++--- src/plugins/qnx/qnxqtversion.h | 6 +-- src/plugins/qnx/qnxrunconfiguration.cpp | 16 +++++-- src/plugins/qnx/qnxrunconfiguration.h | 8 +--- src/plugins/qnx/qnxtoolchain.cpp | 55 ++++++++++++++----------- src/plugins/qnx/qnxtoolchain.h | 13 +----- 13 files changed, 134 insertions(+), 111 deletions(-) diff --git a/src/plugins/qnx/qnxanalyzesupport.cpp b/src/plugins/qnx/qnxanalyzesupport.cpp index 4d5a73b2ab5..fe87c15eafd 100644 --- a/src/plugins/qnx/qnxanalyzesupport.cpp +++ b/src/plugins/qnx/qnxanalyzesupport.cpp @@ -48,11 +48,20 @@ public: } }; -QnxQmlProfilerWorkerFactory::QnxQmlProfilerWorkerFactory() +class QnxQmlProfilerWorkerFactory final : public RunWorkerFactory { - setProduct(); - // FIXME: Shouldn't this use the run mode id somehow? - addSupportedRunConfig(Constants::QNX_RUNCONFIG_ID); +public: + QnxQmlProfilerWorkerFactory() + { + setProduct(); + // FIXME: Shouldn't this use the run mode id somehow? + addSupportedRunConfig(Constants::QNX_RUNCONFIG_ID); + } +}; + +void setupQnxQmlProfiler() +{ + static QnxQmlProfilerWorkerFactory theQnxQmlProfilerWorkerFactory; } } // Qnx::Internal diff --git a/src/plugins/qnx/qnxanalyzesupport.h b/src/plugins/qnx/qnxanalyzesupport.h index 7797f21d30e..74b2473dea9 100644 --- a/src/plugins/qnx/qnxanalyzesupport.h +++ b/src/plugins/qnx/qnxanalyzesupport.h @@ -3,14 +3,8 @@ #pragma once -#include - namespace Qnx::Internal { -class QnxQmlProfilerWorkerFactory final : public ProjectExplorer::RunWorkerFactory -{ -public: - QnxQmlProfilerWorkerFactory(); -}; +void setupQnxQmlProfiler(); } // Qnx::Internal diff --git a/src/plugins/qnx/qnxdebugsupport.cpp b/src/plugins/qnx/qnxdebugsupport.cpp index 7d915bb70c8..b2d923f2cbe 100644 --- a/src/plugins/qnx/qnxdebugsupport.cpp +++ b/src/plugins/qnx/qnxdebugsupport.cpp @@ -252,11 +252,20 @@ void showAttachToProcessDialog() // QnxDebugWorkerFactory -QnxDebugWorkerFactory::QnxDebugWorkerFactory() +class QnxDebugWorkerFactory final : public RunWorkerFactory { - setProduct(); - addSupportedRunMode(ProjectExplorer::Constants::DEBUG_RUN_MODE); - addSupportedRunConfig(Constants::QNX_RUNCONFIG_ID); +public: + QnxDebugWorkerFactory() + { + setProduct(); + addSupportedRunMode(ProjectExplorer::Constants::DEBUG_RUN_MODE); + addSupportedRunConfig(Constants::QNX_RUNCONFIG_ID); + } +}; + +void setupQnxDebugging() +{ + static QnxDebugWorkerFactory theQnxDebugWorkerFactory; } } // Qnx::Internal diff --git a/src/plugins/qnx/qnxdebugsupport.h b/src/plugins/qnx/qnxdebugsupport.h index 3cbb6ef7fea..8f5f3102831 100644 --- a/src/plugins/qnx/qnxdebugsupport.h +++ b/src/plugins/qnx/qnxdebugsupport.h @@ -3,16 +3,9 @@ #pragma once -#include - namespace Qnx::Internal { void showAttachToProcessDialog(); - -class QnxDebugWorkerFactory final : public ProjectExplorer::RunWorkerFactory -{ -public: - QnxDebugWorkerFactory(); -}; +void setupQnxDebugging(); } // Qnx::Internal diff --git a/src/plugins/qnx/qnxdevice.cpp b/src/plugins/qnx/qnxdevice.cpp index 5083fbb782a..3ec51317413 100644 --- a/src/plugins/qnx/qnxdevice.cpp +++ b/src/plugins/qnx/qnxdevice.cpp @@ -10,6 +10,7 @@ #include +#include #include #include @@ -86,20 +87,29 @@ public: DeviceTester *createDeviceTester() const final { return new QnxDeviceTester; } }; -QnxDeviceFactory::QnxDeviceFactory() : IDeviceFactory(Constants::QNX_QNX_OS_TYPE) +class QnxDeviceFactory final : public IDeviceFactory { - setDisplayName(Tr::tr("QNX Device")); - setCombinedIcon(":/qnx/images/qnxdevicesmall.png", - ":/qnx/images/qnxdevice.png"); - setQuickCreationAllowed(true); - setConstructionFunction([] { return IDevice::Ptr(new QnxDevice); }); - setCreator([]() -> IDevice::Ptr { - const IDevice::Ptr device = IDevice::Ptr(new QnxDevice); - SshDeviceWizard wizard(Tr::tr("New QNX Device Configuration Setup"), device); - if (wizard.exec() != QDialog::Accepted) - return {}; - return device; - }); +public: + QnxDeviceFactory() : IDeviceFactory(Constants::QNX_QNX_OS_TYPE) + { + setDisplayName(Tr::tr("QNX Device")); + setCombinedIcon(":/qnx/images/qnxdevicesmall.png", + ":/qnx/images/qnxdevice.png"); + setQuickCreationAllowed(true); + setConstructionFunction([] { return IDevice::Ptr(new QnxDevice); }); + setCreator([]() -> IDevice::Ptr { + const IDevice::Ptr device = IDevice::Ptr(new QnxDevice); + SshDeviceWizard wizard(Tr::tr("New QNX Device Configuration Setup"), device); + if (wizard.exec() != QDialog::Accepted) + return {}; + return device; + }); + } +}; + +void setupQnxDevice() +{ + static QnxDeviceFactory theQnxDeviceFactory; } } // Qnx::Internal diff --git a/src/plugins/qnx/qnxdevice.h b/src/plugins/qnx/qnxdevice.h index c4b484f478c..3e5c4e63177 100644 --- a/src/plugins/qnx/qnxdevice.h +++ b/src/plugins/qnx/qnxdevice.h @@ -3,14 +3,8 @@ #pragma once -#include - namespace Qnx::Internal { -class QnxDeviceFactory final : public ProjectExplorer::IDeviceFactory -{ -public: - QnxDeviceFactory(); -}; +void setupQnxDevice(); } // Qnx::Internal diff --git a/src/plugins/qnx/qnxplugin.cpp b/src/plugins/qnx/qnxplugin.cpp index bd2aa2d8b18..3e6ae206e47 100644 --- a/src/plugins/qnx/qnxplugin.cpp +++ b/src/plugins/qnx/qnxplugin.cpp @@ -71,6 +71,14 @@ public: } }; +void setupQnxDeployment() +{ + static QnxDeployConfigurationFactory deployConfigFactory; + static QnxDeployStepFactory directUploadDeployFactory{RemoteLinux::Constants::DirectUploadStepId, + Constants::QNX_DIRECT_UPLOAD_STEP_ID}; + static QnxDeployStepFactory makeInstallStepFactory{RemoteLinux::Constants::MakeInstallStepId}; +} + class QnxPluginPrivate { public: @@ -80,17 +88,6 @@ public: QAction m_attachToQnxApplication{Tr::tr("Attach to remote QNX application..."), nullptr}; QnxSettingsPage settingsPage; - QnxQtVersionFactory qtVersionFactory; - QnxDeviceFactory deviceFactory; - QnxDeployConfigurationFactory deployConfigFactory; - QnxDeployStepFactory directUploadDeployFactory{RemoteLinux::Constants::DirectUploadStepId, - Constants::QNX_DIRECT_UPLOAD_STEP_ID}; - QnxDeployStepFactory makeInstallStepFactory{RemoteLinux::Constants::MakeInstallStepId}; - QnxRunConfigurationFactory runConfigFactory; - QnxToolChainFactory toolChainFactory; - SimpleTargetRunnerFactory runWorkerFactory{{runConfigFactory.runConfigurationId()}}; - QnxDebugWorkerFactory debugWorkerFactory; - QnxQmlProfilerWorkerFactory qmlProfilerWorkerFactory; }; class QnxPlugin final : public ExtensionSystem::IPlugin @@ -102,7 +99,19 @@ public: ~QnxPlugin() final { delete d; } private: - void initialize() final { d = new QnxPluginPrivate; } + void initialize() final + { + d = new QnxPluginPrivate; + + setupQnxDevice(); + setupQnxToolChain(); + setupQnxQtVersion(); + setupQnxDeployment(); + setupQnxRunnning(); + setupQnxDebugging(); + setupQnxQmlProfiler(); + } + void extensionsInitialized() final; QnxPluginPrivate *d = nullptr; diff --git a/src/plugins/qnx/qnxqtversion.cpp b/src/plugins/qnx/qnxqtversion.cpp index b5360c272df..6a74d620dbc 100644 --- a/src/plugins/qnx/qnxqtversion.cpp +++ b/src/plugins/qnx/qnxqtversion.cpp @@ -190,12 +190,21 @@ EnvironmentItems QnxQtVersion::environment() const // Factory -QnxQtVersionFactory::QnxQtVersionFactory() +class QnxQtVersionFactory : public QtSupport::QtVersionFactory { - setQtVersionCreator([] { return new QnxQtVersion; }); - setSupportedType(Constants::QNX_QNX_QT); - setPriority(50); - setRestrictionChecker([](const SetupData &setup) { return setup.isQnx; }); +public: + QnxQtVersionFactory() + { + setQtVersionCreator([] { return new QnxQtVersion; }); + setSupportedType(Constants::QNX_QNX_QT); + setPriority(50); + setRestrictionChecker([](const SetupData &setup) { return setup.isQnx; }); + } +}; + +void setupQnxQtVersion() +{ + static QnxQtVersionFactory theQnxQtVersionFactory; } } // Qnx::Internal diff --git a/src/plugins/qnx/qnxqtversion.h b/src/plugins/qnx/qnxqtversion.h index 7c3e81dac9f..db6c47666d8 100644 --- a/src/plugins/qnx/qnxqtversion.h +++ b/src/plugins/qnx/qnxqtversion.h @@ -57,10 +57,6 @@ private: mutable Utils::EnvironmentItems m_qnxEnv; }; -class QnxQtVersionFactory : public QtSupport::QtVersionFactory -{ -public: - QnxQtVersionFactory(); -}; +void setupQnxQtVersion(); } // Qnx::Internal diff --git a/src/plugins/qnx/qnxrunconfiguration.cpp b/src/plugins/qnx/qnxrunconfiguration.cpp index 26616e4e252..ebab271238d 100644 --- a/src/plugins/qnx/qnxrunconfiguration.cpp +++ b/src/plugins/qnx/qnxrunconfiguration.cpp @@ -84,10 +84,20 @@ public: // QnxRunConfigurationFactory -QnxRunConfigurationFactory::QnxRunConfigurationFactory() +class QnxRunConfigurationFactory final : public ProjectExplorer::RunConfigurationFactory { - registerRunConfiguration(Constants::QNX_RUNCONFIG_ID); - addSupportedTargetDeviceType(Constants::QNX_QNX_OS_TYPE); +public: + QnxRunConfigurationFactory() + { + registerRunConfiguration(Constants::QNX_RUNCONFIG_ID); + addSupportedTargetDeviceType(Constants::QNX_QNX_OS_TYPE); + } +}; + +void setupQnxRunnning() +{ + static QnxRunConfigurationFactory theQnxRunConfigurationFactory; + static SimpleTargetRunnerFactory theQnxRunWorkerFactory({Constants::QNX_RUNCONFIG_ID}); } } // Qnx::Internal diff --git a/src/plugins/qnx/qnxrunconfiguration.h b/src/plugins/qnx/qnxrunconfiguration.h index 9ed696762a0..23166ce0af9 100644 --- a/src/plugins/qnx/qnxrunconfiguration.h +++ b/src/plugins/qnx/qnxrunconfiguration.h @@ -3,14 +3,8 @@ #pragma once -#include - namespace Qnx::Internal { -class QnxRunConfigurationFactory final : public ProjectExplorer::RunConfigurationFactory -{ -public: - QnxRunConfigurationFactory(); -}; +void setupQnxRunnning(); } // Qnx::Internal diff --git a/src/plugins/qnx/qnxtoolchain.cpp b/src/plugins/qnx/qnxtoolchain.cpp index 2e66fecacea..6cf6b715e72 100644 --- a/src/plugins/qnx/qnxtoolchain.cpp +++ b/src/plugins/qnx/qnxtoolchain.cpp @@ -162,30 +162,6 @@ bool QnxToolChain::operator ==(const ToolChain &other) const return sdpPath() == qnxTc->sdpPath() && cpuDir() == qnxTc->cpuDir(); } -// -------------------------------------------------------------------------- -// QnxToolChainFactory -// -------------------------------------------------------------------------- - -QnxToolChainFactory::QnxToolChainFactory() -{ - setDisplayName(Tr::tr("QCC")); - setSupportedToolChainType(Constants::QNX_TOOLCHAIN_ID); - setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID, - ProjectExplorer::Constants::CXX_LANGUAGE_ID}); - setToolchainConstructor([] { return new QnxToolChain; }); - setUserCreatable(true); -} - -Toolchains QnxToolChainFactory::autoDetect(const ToolchainDetector &detector) const -{ - // FIXME: Support detecting toolchains on remote devices - if (detector.device) - return {}; - - Toolchains tcs = QnxSettingsPage::autoDetect(detector.alreadyKnown); - return tcs; -} - //--------------------------------------------------------------------------------- // QnxToolChainConfigWidget //--------------------------------------------------------------------------------- @@ -275,4 +251,35 @@ void QnxToolChainConfigWidget::handleSdpPathChange() emit dirty(); } +// QnxToolChainFactory + +class QnxToolChainFactory : public ToolChainFactory +{ +public: + QnxToolChainFactory() + { + setDisplayName(Tr::tr("QCC")); + setSupportedToolChainType(Constants::QNX_TOOLCHAIN_ID); + setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID, + ProjectExplorer::Constants::CXX_LANGUAGE_ID}); + setToolchainConstructor([] { return new QnxToolChain; }); + setUserCreatable(true); + } + + Toolchains autoDetect(const ToolchainDetector &detector) const final + { + // FIXME: Support detecting toolchains on remote devices + if (detector.device) + return {}; + + Toolchains tcs = QnxSettingsPage::autoDetect(detector.alreadyKnown); + return tcs; + } +}; + +void setupQnxToolChain() +{ + static QnxToolChainFactory theQnxToolChainFactory; +} + } // Qnx::Internal diff --git a/src/plugins/qnx/qnxtoolchain.h b/src/plugins/qnx/qnxtoolchain.h index 7cbdc8f4983..4c028f057cb 100644 --- a/src/plugins/qnx/qnxtoolchain.h +++ b/src/plugins/qnx/qnxtoolchain.h @@ -26,17 +26,6 @@ protected: DetectedAbisResult detectSupportedAbis() const override; }; -// -------------------------------------------------------------------------- -// QnxToolChainFactory -// -------------------------------------------------------------------------- - -class QnxToolChainFactory : public ProjectExplorer::ToolChainFactory -{ -public: - QnxToolChainFactory(); - - ProjectExplorer::Toolchains autoDetect( - const ProjectExplorer::ToolchainDetector &detector) const final; -}; +void setupQnxToolChain(); } // Qnx::Internal