diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp index 7fa3153b4f2..607a29e7cac 100644 --- a/src/plugins/android/androidplugin.cpp +++ b/src/plugins/android/androidplugin.cpp @@ -85,10 +85,6 @@ public: registerRunConfiguration ("Qt4ProjectManager.AndroidRunConfiguration:"); addSupportedTargetDeviceType(Android::Constants::ANDROID_DEVICE_TYPE); - addRunWorkerFactory(NORMAL_RUN_MODE); - addRunWorkerFactory(DEBUG_RUN_MODE); - addRunWorkerFactory(QML_PROFILER_RUN_MODE); - addRunWorkerFactory(QML_PREVIEW_RUN_MODE); } }; @@ -135,6 +131,13 @@ public: AndroidPackageInstallationFactory packackeInstallationFactory; AndroidManifestEditorFactory manifestEditorFactory; AndroidRunConfigurationFactory runConfigFactory; + SimpleRunWorkerFactory runWorkerFactory; + SimpleRunWorkerFactory + debugWorkerFactory{DEBUG_RUN_MODE}; + SimpleRunWorkerFactory + profilerWorkerFactory{QML_PROFILER_RUN_MODE}; + SimpleRunWorkerFactory + qmlPreviewWorkerFactory{QML_PREVIEW_RUN_MODE}; AndroidBuildApkStepFactory buildApkStepFactory; AndroidGdbServerKitAspect gdbServerKitAspect; }; diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp index 035d9605173..d4a3d27f873 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp @@ -43,9 +43,12 @@ #include #include #include + #include #include #include +#include + #include #include @@ -67,6 +70,7 @@ public: CMakeManager manager; CMakeBuildStepFactory buildStepFactory; CMakeRunConfigurationFactory runConfigFactory; + SimpleRunWorkerFactory runWorkerFactory; CMakeBuildConfigurationFactory buildConfigFactory; CMakeEditorFactory editorFactor; CMakeLocatorFilter locatorFiler; diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index f9184d6e5ce..c2f111bb3c4 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -93,8 +93,6 @@ CMakeRunConfigurationFactory::CMakeRunConfigurationFactory() registerRunConfiguration("CMakeProjectManager.CMakeRunConfiguration."); addSupportedProjectType(CMakeProjectManager::Constants::CMAKEPROJECT_ID); addSupportedTargetDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE); - - addRunWorkerFactory(ProjectExplorer::Constants::NORMAL_RUN_MODE); } } // Internal diff --git a/src/plugins/nim/nimplugin.cpp b/src/plugins/nim/nimplugin.cpp index 3afcb19b5fa..67b282e0738 100644 --- a/src/plugins/nim/nimplugin.cpp +++ b/src/plugins/nim/nimplugin.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include using namespace Utils; @@ -66,6 +67,7 @@ public: NimEditorFactory editorFactory; NimBuildConfigurationFactory buildConfigFactory; NimRunConfigurationFactory runConfigFactory; + SimpleRunWorkerFactory runWorkerFactory; NimCompilerBuildStepFactory buildStepFactory; NimCompilerCleanStepFactory cleanStepFactory; NimCodeStyleSettingsPage codeStyleSettingsPage; diff --git a/src/plugins/nim/project/nimrunconfiguration.cpp b/src/plugins/nim/project/nimrunconfiguration.cpp index 1dcbb9873da..8bfd0370885 100644 --- a/src/plugins/nim/project/nimrunconfiguration.cpp +++ b/src/plugins/nim/project/nimrunconfiguration.cpp @@ -100,7 +100,6 @@ NimRunConfigurationFactory::NimRunConfigurationFactory() : FixedRunConfiguration { registerRunConfiguration("Nim.NimRunConfiguration"); addSupportedProjectType(Constants::C_NIMPROJECT_ID); - addRunWorkerFactory(ProjectExplorer::Constants::NORMAL_RUN_MODE); } } // Nim diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index a3c9a84f46e..1caa79c8fa7 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -284,8 +284,6 @@ CustomExecutableRunConfigurationFactory::CustomExecutableRunConfigurationFactory FixedRunConfigurationFactory(CustomExecutableRunConfiguration::tr("Custom Executable")) { registerRunConfiguration(CUSTOM_EXECUTABLE_ID); - - addRunWorkerFactory(ProjectExplorer::Constants::NORMAL_RUN_MODE); } } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 75051a4ce34..29366c60c6a 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -544,6 +544,7 @@ public: CurrentProjectFind m_curretProjectFind; CustomExecutableRunConfigurationFactory m_customExecutableRunConfigFactory; + SimpleRunWorkerFactory m_customExecutableRunWorkerFactory; ProjectFileWizardExtension m_projectFileWizardExtension; diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index ab40226f512..18442dbfaaf 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -427,8 +427,6 @@ RunConfigurationFactory::RunConfigurationFactory() RunConfigurationFactory::~RunConfigurationFactory() { g_runConfigurationFactories.removeOne(this); - qDeleteAll(m_ownedRunWorkerFactories); - m_ownedRunWorkerFactories.clear(); } QString RunConfigurationFactory::decoratedTargetName(const QString &targetName, Target *target) @@ -497,15 +495,7 @@ void RunConfigurationFactory::setDecorateDisplayNames(bool on) m_decorateDisplayNames = on; } -RunWorkerFactory *RunConfigurationFactory::addRunWorkerFactoryHelper - (Core::Id runMode, const std::function &creator) -{ - auto factory = new RunWorkerFactory; - factory->addConstraint(m_ownTypeChecker); - factory->addSupportedRunMode(runMode); - factory->setProducer(creator); - return factory; -} + void RunConfigurationFactory::addSupportedProjectType(Core::Id id) { diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index ea089e95307..c54b64ad96e 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -251,25 +251,13 @@ protected: return new RunConfig(t, runConfigBaseId); }; m_runConfigBaseId = runConfigBaseId; - m_ownTypeChecker = [](RunConfiguration *runConfig) { - return qobject_cast(runConfig) != nullptr; - }; } void addSupportedProjectType(Core::Id id); void addSupportedTargetDeviceType(Core::Id id); void setDecorateDisplayNames(bool on); - template - RunWorkerFactory *addRunWorkerFactory(Core::Id runMode) - { - return addRunWorkerFactoryHelper(runMode, [](RunControl *rc) { return new Worker(rc); }); - } - private: - RunWorkerFactory *addRunWorkerFactoryHelper - (Core::Id runMode, const std::function &creator); - bool canHandle(Target *target) const; friend class RunConfigurationCreationInfo; @@ -278,8 +266,6 @@ private: QList m_supportedProjectTypes; QList m_supportedTargetDeviceTypes; bool m_decorateDisplayNames = false; - QList m_ownedRunWorkerFactories; - std::function m_ownTypeChecker; }; class PROJECTEXPLORER_EXPORT FixedRunConfigurationFactory : public RunConfigurationFactory diff --git a/src/plugins/projectexplorer/runcontrol.h b/src/plugins/projectexplorer/runcontrol.h index 7afdbc5c661..657c7acd75f 100644 --- a/src/plugins/projectexplorer/runcontrol.h +++ b/src/plugins/projectexplorer/runcontrol.h @@ -327,4 +327,20 @@ private: bool m_useTerminal = false; }; +template +class SimpleRunWorkerFactory : public RunWorkerFactory +{ +public: + SimpleRunWorkerFactory(Core::Id runMode = ProjectExplorer::Constants::NORMAL_RUN_MODE) + { + addSupportedRunMode(runMode); + addConstraint([](RunConfiguration *runConfig) { + return qobject_cast(runConfig) != nullptr; + }); + setProducer([](RunControl *runControl) { + return new RunWorker(runControl); + }); + } +}; + } // namespace ProjectExplorer diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp index 0d86d65a817..2d21a073c88 100644 --- a/src/plugins/pythoneditor/pythoneditorplugin.cpp +++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp @@ -312,7 +312,6 @@ public: { registerRunConfiguration("PythonEditor.RunConfiguration."); addSupportedProjectType(PythonProjectId); - addRunWorkerFactory(ProjectExplorer::Constants::NORMAL_RUN_MODE); } }; @@ -723,6 +722,7 @@ class PythonEditorPluginPrivate public: PythonEditorFactory editorFactory; PythonRunConfigurationFactory runConfigFactory; + SimpleRunWorkerFactory runWorkerFactory; }; PythonEditorPlugin::~PythonEditorPlugin() diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp index 8a2ab1ce08d..464d3f9beec 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -91,6 +92,7 @@ public: QbsCleanStepFactory cleanStepFactory; QbsInstallStepFactory installStepFactory; QbsRunConfigurationFactory runConfigFactory; + SimpleRunWorkerFactory runWorkerFactory; QbsProfilesSettingsPage profilesSetttingsPage; QbsKitAspect qbsKitAspect; }; diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp index 09312bca79e..2a7412c4c65 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp @@ -169,8 +169,6 @@ QbsRunConfigurationFactory::QbsRunConfigurationFactory() registerRunConfiguration("Qbs.RunConfiguration:"); addSupportedProjectType(Constants::PROJECT_ID); addSupportedTargetDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE); - - addRunWorkerFactory(ProjectExplorer::Constants::NORMAL_RUN_MODE); } } // namespace Internal diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp index 0cb01cf15a3..d5f6eaecaa9 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp @@ -147,8 +147,6 @@ DesktopQmakeRunConfigurationFactory::DesktopQmakeRunConfigurationFactory() registerRunConfiguration("Qt4ProjectManager.Qt4RunConfiguration:"); addSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID); addSupportedTargetDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE); - - addRunWorkerFactory(ProjectExplorer::Constants::NORMAL_RUN_MODE); } } // namespace Internal diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp index 06f35270617..b2ac41a8a28 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp @@ -55,6 +55,7 @@ #include #include #include +#include #include #include @@ -100,6 +101,8 @@ public: QmakeBuildConfigurationFactory buildConfigFactory; DesktopQmakeRunConfigurationFactory runConfigFactory; + SimpleRunWorkerFactory + runWorkerFactory; ProFileEditorFactory profileEditorFactory; diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp index 6e460d3e0b9..b2079c9f31d 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp @@ -25,12 +25,13 @@ #include "qmlprojectplugin.h" #include "qmlproject.h" -#include "qmlprojectrunconfigurationfactory.h" +#include "qmlprojectrunconfiguration.h" #include #include #include +#include #include @@ -39,16 +40,24 @@ using namespace ProjectExplorer; namespace QmlProjectManager { namespace Internal { +class QmlProjectPluginPrivate +{ +public: + QmlProjectRunConfigurationFactory runConfigFactory; + SimpleRunWorkerFactory + runWorkerFactory{ProjectExplorer::Constants::NORMAL_RUN_MODE}; +}; + QmlProjectPlugin::~QmlProjectPlugin() { - delete m_rcFactory; + delete d; } bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage) { Q_UNUSED(errorMessage) - m_rcFactory = new QmlProjectRunConfigurationFactory; + d = new QmlProjectPluginPrivate; ProjectManager::registerProjectType(QmlJSTools::Constants::QMLPROJECT_MIMETYPE); Core::FileIconProvider::registerIconOverlayForSuffix(":/qmlproject/images/qmlproject.png", "qmlproject"); diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.h b/src/plugins/qmlprojectmanager/qmlprojectplugin.h index d08738cfa99..10a407216db 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectplugin.h +++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.h @@ -43,7 +43,7 @@ private: bool initialize(const QStringList &arguments, QString *errorString) final; void extensionsInitialized() final {} - class QmlProjectRunConfigurationFactory *m_rcFactory = nullptr; + class QmlProjectPluginPrivate *d = nullptr; }; } // namespace Internal diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index fc10cfde177..412cbb94c79 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -459,8 +459,6 @@ QmlProjectRunConfigurationFactory::QmlProjectRunConfigurationFactory() registerRunConfiguration ("QmlProjectManager.QmlRunConfiguration.QmlScene"); addSupportedProjectType(QmlProjectManager::Constants::QML_PROJECT_ID); - - addRunWorkerFactory(ProjectExplorer::Constants::NORMAL_RUN_MODE); } } // namespace Internal diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp deleted file mode 100644 index e5abbcc0b3d..00000000000 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "qmlprojectrunconfigurationfactory.h" -#include "qmlprojectmanagerconstants.h" -#include "qmlproject.h" -#include "qmlprojectrunconfiguration.h" - -namespace QmlProjectManager { -namespace Internal { - -QmlProjectRunConfigurationFactory::QmlProjectRunConfigurationFactory() : - ProjectExplorer::FixedRunConfigurationFactory(QmlProjectRunConfiguration::tr("QML Scene"), false) -{ - registerRunConfiguration(Constants::QML_SCENE_RC_ID); - addSupportedProjectType(QmlProjectManager::Constants::QML_PROJECT_ID); -} - -} // namespace Internal -} // namespace QmlProjectManager - diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h deleted file mode 100644 index 0a94d3c4f32..00000000000 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.h +++ /dev/null @@ -1,40 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include - -namespace QmlProjectManager { -namespace Internal { - -class QmlProjectRunConfigurationFactory : public ProjectExplorer::FixedRunConfigurationFactory -{ -public: - QmlProjectRunConfigurationFactory(); -}; - -} // namespace Internal -} // namespace QmlProjectManager