diff --git a/src/plugins/webassembly/webassemblydevice.cpp b/src/plugins/webassembly/webassemblydevice.cpp index c3f16926310..e2e308ac86a 100644 --- a/src/plugins/webassembly/webassemblydevice.cpp +++ b/src/plugins/webassembly/webassemblydevice.cpp @@ -5,39 +5,53 @@ #include "webassemblydevice.h" #include "webassemblytr.h" +#include +#include + using namespace ProjectExplorer; using namespace Utils; -namespace WebAssembly { -namespace Internal { +namespace WebAssembly::Internal { -WebAssemblyDevice::WebAssemblyDevice() +class WebAssemblyDevice final : public DesktopDevice { - setupId(IDevice::AutoDetected, Constants::WEBASSEMBLY_DEVICE_DEVICE_ID); - setType(Constants::WEBASSEMBLY_DEVICE_TYPE); - const QString displayNameAndType = Tr::tr("Web Browser"); - settings()->displayName.setDefaultValue(displayNameAndType); - setDisplayType(displayNameAndType); - setDeviceState(IDevice::DeviceStateUnknown); - setMachineType(IDevice::Hardware); - setOsType(OsTypeOther); - setFileAccess(nullptr); -} +public: + WebAssemblyDevice() + { + setupId(IDevice::AutoDetected, Constants::WEBASSEMBLY_DEVICE_DEVICE_ID); + setType(Constants::WEBASSEMBLY_DEVICE_TYPE); + const QString displayNameAndType = Tr::tr("Web Browser"); + settings()->displayName.setDefaultValue(displayNameAndType); + setDisplayType(displayNameAndType); + setDeviceState(IDevice::DeviceStateUnknown); + setMachineType(IDevice::Hardware); + setOsType(OsTypeOther); + setFileAccess(nullptr); + } +}; -IDevice::Ptr WebAssemblyDevice::create() +IDevicePtr createWebAssemblyDevice() { return IDevicePtr(new WebAssemblyDevice); } -WebAssemblyDeviceFactory::WebAssemblyDeviceFactory() - : ProjectExplorer::IDeviceFactory(Constants::WEBASSEMBLY_DEVICE_TYPE) +class WebAssemblyDeviceFactory final : public IDeviceFactory { - setDisplayName(Tr::tr("WebAssembly Runtime")); - setCombinedIcon(":/webassembly/images/webassemblydevicesmall.png", - ":/webassembly/images/webassemblydevice.png"); - setConstructionFunction(&WebAssemblyDevice::create); - setCreator(&WebAssemblyDevice::create); +public: + WebAssemblyDeviceFactory() + : IDeviceFactory(Constants::WEBASSEMBLY_DEVICE_TYPE) + { + setDisplayName(Tr::tr("WebAssembly Runtime")); + setCombinedIcon(":/webassembly/images/webassemblydevicesmall.png", + ":/webassembly/images/webassemblydevice.png"); + setConstructionFunction(&createWebAssemblyDevice); + setCreator(&createWebAssemblyDevice); + } +}; + +void setupWebAssemblyDevice() +{ + static WebAssemblyDeviceFactory theWebAssemblyDeviceFactory; } -} // namespace Internal -} // namespace WebAssembly +} // WebAssembly::Internal diff --git a/src/plugins/webassembly/webassemblydevice.h b/src/plugins/webassembly/webassemblydevice.h index 520d0fb5355..805f622b917 100644 --- a/src/plugins/webassembly/webassemblydevice.h +++ b/src/plugins/webassembly/webassemblydevice.h @@ -3,26 +3,12 @@ #pragma once -#include -#include +#include -namespace WebAssembly { -namespace Internal { +namespace WebAssembly::Internal { -class WebAssemblyDevice final : public ProjectExplorer::DesktopDevice -{ -public: - static ProjectExplorer::IDevice::Ptr create(); +ProjectExplorer::IDevicePtr createWebAssemblyDevice(); -private: - WebAssemblyDevice(); -}; +void setupWebAssemblyDevice(); -class WebAssemblyDeviceFactory final : public ProjectExplorer::IDeviceFactory -{ -public: - WebAssemblyDeviceFactory(); -}; - -} // namespace Internal -} // namespace WebAssembly +} // WebAssembly::Interenal diff --git a/src/plugins/webassembly/webassemblyplugin.cpp b/src/plugins/webassembly/webassemblyplugin.cpp index d66ae5c9ca8..ffa159694d0 100644 --- a/src/plugins/webassembly/webassemblyplugin.cpp +++ b/src/plugins/webassembly/webassemblyplugin.cpp @@ -10,7 +10,6 @@ #include "webassemblydevice.h" #include "webassemblyqtversion.h" #include "webassemblyrunconfiguration.h" -#include "webassemblysettings.h" #include "webassemblytoolchain.h" #include "webassemblytr.h" @@ -18,6 +17,8 @@ #include #include +#include + #include #include @@ -31,47 +32,7 @@ using namespace Utils; namespace WebAssembly::Internal { -class WebAssemblyPluginPrivate -{ -public: - WebAssemblyToolchainFactory toolChainFactory; - WebAssemblyDeviceFactory deviceFactory; - WebAssemblyQtVersionFactory qtVersionFactory; - EmrunRunConfigurationFactory emrunRunConfigurationFactory; - EmrunRunWorkerFactory emrunRunWorkerFactory; -}; - -static WebAssemblyPluginPrivate *dd = nullptr; - -WebAssemblyPlugin::WebAssemblyPlugin() -{ - setObjectName("WebAssemblyPlugin"); -} - -WebAssemblyPlugin::~WebAssemblyPlugin() -{ - delete dd; - dd = nullptr; -} - -void WebAssemblyPlugin::initialize() -{ - dd = new WebAssemblyPluginPrivate; - -#ifdef WITH_TESTS - addTest(); -#endif // WITH_TESTS -} - -void WebAssemblyPlugin::extensionsInitialized() -{ - connect(KitManager::instance(), &KitManager::kitsLoaded, this, [] { - DeviceManager::instance()->addDevice(WebAssemblyDevice::create()); - askUserAboutEmSdkSetup(); - }); -} - -void WebAssemblyPlugin::askUserAboutEmSdkSetup() +static void askUserAboutEmSdkSetup() { const char setupWebAssemblyEmSdk[] = "SetupWebAssemblyEmSdk"; @@ -91,4 +52,32 @@ void WebAssemblyPlugin::askUserAboutEmSdkSetup() ICore::infoBar()->addInfo(info); } +class WebAssemblyPlugin final : public ExtensionSystem::IPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "WebAssembly.json") + +public: + void initialize() final + { + setupWebAssemblyToolchain(); + setupWebAssemblyDevice(); + setupWebAssemblyQtVersion(); + setupEmrunRunSupport(); + +#ifdef WITH_TESTS + addTest(); +#endif // WITH_TESTS + } + void extensionsInitialized() final + { + connect(KitManager::instance(), &KitManager::kitsLoaded, this, [] { + DeviceManager::instance()->addDevice(createWebAssemblyDevice()); + askUserAboutEmSdkSetup(); + }); + } +}; + } // WebAssembly::Internal + +#include "webassemblyplugin.moc" diff --git a/src/plugins/webassembly/webassemblyplugin.h b/src/plugins/webassembly/webassemblyplugin.h index 5cdd706ccde..e69de29bb2d 100644 --- a/src/plugins/webassembly/webassemblyplugin.h +++ b/src/plugins/webassembly/webassemblyplugin.h @@ -1,24 +0,0 @@ -// Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include - -namespace WebAssembly::Internal { - -class WebAssemblyPlugin : public ExtensionSystem::IPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "WebAssembly.json") - -public: - WebAssemblyPlugin(); - ~WebAssemblyPlugin() override; - - void initialize() override; - void extensionsInitialized() override; - static void askUserAboutEmSdkSetup(); -}; - -} // WebAssembly::Internal diff --git a/src/plugins/webassembly/webassemblyqtversion.cpp b/src/plugins/webassembly/webassemblyqtversion.cpp index 34fd47b54de..6f8c3556d00 100644 --- a/src/plugins/webassembly/webassemblyqtversion.cpp +++ b/src/plugins/webassembly/webassemblyqtversion.cpp @@ -1,17 +1,22 @@ // Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 -#include "webassemblyconstants.h" #include "webassemblyqtversion.h" + +#include "webassemblyconstants.h" #include "webassemblytr.h" +#include +#include + #include #include -#include -#include -#include + +#include #include +#include + #include #include #include @@ -22,8 +27,7 @@ using namespace QtSupport; using namespace Utils; -namespace WebAssembly { -namespace Internal { +namespace WebAssembly::Internal { WebAssemblyQtVersion::WebAssemblyQtVersion() = default; @@ -37,16 +41,6 @@ QSet WebAssemblyQtVersion::targetDeviceTypes() const return {Constants::WEBASSEMBLY_DEVICE_TYPE}; } -WebAssemblyQtVersionFactory::WebAssemblyQtVersionFactory() -{ - setQtVersionCreator([] { return new WebAssemblyQtVersion; }); - setSupportedType(Constants::WEBASSEMBLY_QT_VERSION); - setPriority(1); - setRestrictionChecker([](const SetupData &setup) { - return setup.platforms.contains("wasm"); - }); -} - bool WebAssemblyQtVersion::isValid() const { return QtVersion::isValid() && qtVersion() >= minimumSupportedQtVersion(); @@ -84,5 +78,23 @@ bool WebAssemblyQtVersion::isUnsupportedQtVersionInstalled() }); } -} // namespace Internal -} // namespace WebAssembly +class WebAssemblyQtVersionFactory final : public QtVersionFactory +{ +public: + WebAssemblyQtVersionFactory() + { + setQtVersionCreator([] { return new WebAssemblyQtVersion; }); + setSupportedType(Constants::WEBASSEMBLY_QT_VERSION); + setPriority(1); + setRestrictionChecker([](const SetupData &setup) { + return setup.platforms.contains("wasm"); + }); + } +}; + +void setupWebAssemblyQtVersion() +{ + static WebAssemblyQtVersionFactory theWebAssemblyQtVersionFactory; +} + +} // WebAssembly::Internal diff --git a/src/plugins/webassembly/webassemblyqtversion.h b/src/plugins/webassembly/webassemblyqtversion.h index 788f2ab0f93..39a1cdac656 100644 --- a/src/plugins/webassembly/webassemblyqtversion.h +++ b/src/plugins/webassembly/webassemblyqtversion.h @@ -3,34 +3,27 @@ #pragma once -#include #include -namespace WebAssembly { -namespace Internal { +namespace WebAssembly::Internal { -class WebAssemblyQtVersion : public QtSupport::QtVersion +class WebAssemblyQtVersion final : public QtSupport::QtVersion { public: WebAssemblyQtVersion(); - QString description() const override; + QString description() const final; - QSet targetDeviceTypes() const override; + QSet targetDeviceTypes() const final; - bool isValid() const override; - QString invalidReason() const override; + bool isValid() const final; + QString invalidReason() const final; static const QVersionNumber &minimumSupportedQtVersion(); static bool isQtVersionInstalled(); static bool isUnsupportedQtVersionInstalled(); }; -class WebAssemblyQtVersionFactory : public QtSupport::QtVersionFactory -{ -public: - WebAssemblyQtVersionFactory(); -}; +void setupWebAssemblyQtVersion(); -} // namespace Internal -} // namespace WebAssembly +} // WebAssembly::Internal diff --git a/src/plugins/webassembly/webassemblyrunconfiguration.cpp b/src/plugins/webassembly/webassemblyrunconfiguration.cpp index d3aaf00cd1f..a1bb5199873 100644 --- a/src/plugins/webassembly/webassemblyrunconfiguration.cpp +++ b/src/plugins/webassembly/webassemblyrunconfiguration.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -221,17 +222,31 @@ public: // Factories -EmrunRunConfigurationFactory::EmrunRunConfigurationFactory() +class EmrunRunConfigurationFactory final : public ProjectExplorer::RunConfigurationFactory { - registerRunConfiguration(Constants::WEBASSEMBLY_RUNCONFIGURATION_EMRUN); - addSupportedTargetDeviceType(Constants::WEBASSEMBLY_DEVICE_TYPE); -} +public: + EmrunRunConfigurationFactory() + { + registerRunConfiguration(Constants::WEBASSEMBLY_RUNCONFIGURATION_EMRUN); + addSupportedTargetDeviceType(Constants::WEBASSEMBLY_DEVICE_TYPE); + } +}; -EmrunRunWorkerFactory::EmrunRunWorkerFactory() +class EmrunRunWorkerFactory final : public ProjectExplorer::RunWorkerFactory { - setProduct(); - addSupportedRunMode(ProjectExplorer::Constants::NORMAL_RUN_MODE); - addSupportedRunConfig(Constants::WEBASSEMBLY_RUNCONFIGURATION_EMRUN); +public: + EmrunRunWorkerFactory() + { + setProduct(); + addSupportedRunMode(ProjectExplorer::Constants::NORMAL_RUN_MODE); + addSupportedRunConfig(Constants::WEBASSEMBLY_RUNCONFIGURATION_EMRUN); + } +}; + +void setupEmrunRunSupport() +{ + static EmrunRunConfigurationFactory theEmrunRunConfigurationFactory; + static EmrunRunWorkerFactory theEmrunRunWorkerFactory; } } // Webassembly::Internal diff --git a/src/plugins/webassembly/webassemblyrunconfiguration.h b/src/plugins/webassembly/webassemblyrunconfiguration.h index 9490cc77c86..81909197f8a 100644 --- a/src/plugins/webassembly/webassemblyrunconfiguration.h +++ b/src/plugins/webassembly/webassemblyrunconfiguration.h @@ -3,8 +3,8 @@ #pragma once -#include -#include +#include +#include namespace WebAssembly::Internal { @@ -13,17 +13,6 @@ using WebBrowserEntries = QList; WebBrowserEntries parseEmrunOutput(const QByteArray &output); - -class EmrunRunConfigurationFactory final : public ProjectExplorer::RunConfigurationFactory -{ -public: - EmrunRunConfigurationFactory(); -}; - -class EmrunRunWorkerFactory final : public ProjectExplorer::RunWorkerFactory -{ -public: - EmrunRunWorkerFactory(); -}; +void setupEmrunRunSupport(); } // Webassembly::Internal diff --git a/src/plugins/webassembly/webassemblytoolchain.cpp b/src/plugins/webassembly/webassemblytoolchain.cpp index 85812cd0546..2676d587ce0 100644 --- a/src/plugins/webassembly/webassemblytoolchain.cpp +++ b/src/plugins/webassembly/webassemblytoolchain.cpp @@ -26,8 +26,7 @@ using namespace ProjectExplorer; using namespace QtSupport; using namespace Utils; -namespace WebAssembly { -namespace Internal { +namespace WebAssembly::Internal { static const Abi &toolChainAbi() { @@ -168,20 +167,28 @@ bool WebAssemblyToolChain::areToolChainsRegistered() return !ToolchainManager::findToolchains(toolChainAbi()).isEmpty(); } -WebAssemblyToolchainFactory::WebAssemblyToolchainFactory() +class WebAssemblyToolchainFactory final : public ToolchainFactory { - setDisplayName(Tr::tr("Emscripten")); - setSupportedToolChainType(Constants::WEBASSEMBLY_TOOLCHAIN_TYPEID); - setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID, - ProjectExplorer::Constants::CXX_LANGUAGE_ID}); - setToolchainConstructor([] { return new WebAssemblyToolChain; }); - setUserCreatable(true); +public: + WebAssemblyToolchainFactory() + { + setDisplayName(Tr::tr("Emscripten")); + setSupportedToolChainType(Constants::WEBASSEMBLY_TOOLCHAIN_TYPEID); + setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID, + ProjectExplorer::Constants::CXX_LANGUAGE_ID}); + setToolchainConstructor([] { return new WebAssemblyToolChain; }); + setUserCreatable(true); + } + + Toolchains autoDetect(const ToolchainDetector &detector) const + { + return doAutoDetect(detector); + } +}; + +void setupWebAssemblyToolchain() +{ + static WebAssemblyToolchainFactory theWebAssemblyToolchainFactory; } -Toolchains WebAssemblyToolchainFactory::autoDetect(const ToolchainDetector &detector) const -{ - return doAutoDetect(detector); -} - -} // namespace Internal -} // namespace WebAssembly +} // WebAssembly::Internal diff --git a/src/plugins/webassembly/webassemblytoolchain.h b/src/plugins/webassembly/webassemblytoolchain.h index 2b78a2cbf29..9d91f675432 100644 --- a/src/plugins/webassembly/webassemblytoolchain.h +++ b/src/plugins/webassembly/webassemblytoolchain.h @@ -7,8 +7,7 @@ #include -namespace WebAssembly { -namespace Internal { +namespace WebAssembly::Internal { class WebAssemblyToolChain final : public ProjectExplorer::GccToolChain { @@ -25,14 +24,6 @@ public: static bool areToolChainsRegistered(); }; -class WebAssemblyToolchainFactory : public ProjectExplorer::ToolchainFactory -{ -public: - WebAssemblyToolchainFactory(); +void setupWebAssemblyToolchain(); - ProjectExplorer::Toolchains autoDetect( - const ProjectExplorer::ToolchainDetector &detector) const final; -}; - -} // namespace Internal -} // namespace WebAssembly +} // WebAssembly::Internal