diff options
| -rw-r--r-- | src/plugins/android/androidplugin.cpp | 11 | ||||
| -rw-r--r-- | src/plugins/nim/nimplugin.cpp | 3 | ||||
| -rw-r--r-- | src/plugins/nim/project/nimrunconfiguration.cpp | 1 | ||||
| -rw-r--r-- | src/plugins/projectexplorer/runconfiguration.cpp | 12 | ||||
| -rw-r--r-- | src/plugins/projectexplorer/runconfiguration.h | 32 |
5 files changed, 32 insertions, 27 deletions
diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp index 3e5ace89e8..cc54d74586 100644 --- a/src/plugins/android/androidplugin.cpp +++ b/src/plugins/android/androidplugin.cpp @@ -70,6 +70,10 @@ public: registerRunConfiguration<Android::AndroidRunConfiguration> ("Qt4ProjectManager.AndroidRunConfiguration:"); addSupportedTargetDeviceType(Android::Constants::ANDROID_DEVICE_TYPE); + addRunWorkerFactory<AndroidRunSupport>(NORMAL_RUN_MODE); + addRunWorkerFactory<AndroidDebugSupport>(DEBUG_RUN_MODE); + addRunWorkerFactory<AndroidQmlToolingSupport>(QML_PROFILER_RUN_MODE); + addRunWorkerFactory<AndroidQmlToolingSupport>(QML_PREVIEW_RUN_MODE); } }; @@ -100,13 +104,6 @@ bool AndroidPlugin::initialize(const QStringList &arguments, QString *errorMessa Q_UNUSED(arguments); Q_UNUSED(errorMessage); - RunControl::registerWorker<AndroidRunConfiguration, AndroidRunSupport>(NORMAL_RUN_MODE); - RunControl::registerWorker<AndroidRunConfiguration, AndroidDebugSupport>(DEBUG_RUN_MODE); - RunControl::registerWorker<AndroidRunConfiguration, AndroidQmlToolingSupport>( - QML_PROFILER_RUN_MODE); - RunControl::registerWorker<AndroidRunConfiguration, AndroidQmlToolingSupport>( - QML_PREVIEW_RUN_MODE); - RunControl::registerWorker(QML_PREVIEW_RUN_MODE, [](RunControl *runControl) -> RunWorker* { const Runnable runnable = runControl->runConfiguration()->runnable(); return new AndroidQmlToolingSupport(runControl, runnable.executable, runnable.commandLineArguments); diff --git a/src/plugins/nim/nimplugin.cpp b/src/plugins/nim/nimplugin.cpp index 9421cdc1ac..248d5e99e0 100644 --- a/src/plugins/nim/nimplugin.cpp +++ b/src/plugins/nim/nimplugin.cpp @@ -76,9 +76,6 @@ bool NimPlugin::initialize(const QStringList &arguments, QString *errorMessage) ToolChainManager::registerLanguage(Constants::C_NIMLANGUAGE_ID, Constants::C_NIMLANGUAGE_NAME); - RunControl::registerWorker<NimRunConfiguration, SimpleTargetRunner> - (ProjectExplorer::Constants::NORMAL_RUN_MODE); - TextEditor::SnippetProvider::registerGroup(Constants::C_NIMSNIPPETSGROUP_ID, tr("Nim", "SnippetProvider"), &NimEditorFactory::decorateEditor); diff --git a/src/plugins/nim/project/nimrunconfiguration.cpp b/src/plugins/nim/project/nimrunconfiguration.cpp index 3d84c40949..ac3c41287f 100644 --- a/src/plugins/nim/project/nimrunconfiguration.cpp +++ b/src/plugins/nim/project/nimrunconfiguration.cpp @@ -101,6 +101,7 @@ NimRunConfigurationFactory::NimRunConfigurationFactory() : FixedRunConfiguration { registerRunConfiguration<NimRunConfiguration>("Nim.NimRunConfiguration"); addSupportedProjectType(Constants::C_NIMPROJECT_ID); + addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE); } } // Nim diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 17a7afbdbf..e5732da413 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -520,6 +520,8 @@ RunConfigurationFactory::RunConfigurationFactory() RunConfigurationFactory::~RunConfigurationFactory() { g_runConfigurationFactories.removeOne(this); + qDeleteAll(m_ownedRunWorkerFactories); + m_ownedRunWorkerFactories.clear(); } QString RunConfigurationFactory::decoratedTargetName(const QString targetName, Target *target) @@ -586,6 +588,16 @@ void RunConfigurationFactory::setDecorateDisplayNames(bool on) m_decorateDisplayNames = on; } +RunWorkerFactory *RunConfigurationFactory::addRunWorkerFactoryHelper + (Core::Id runMode, const std::function<RunWorker *(RunControl *)> &creator) +{ + auto factory = new RunWorkerFactory; + factory->addConstraint(m_ownTypeChecker); + factory->addSupportedRunMode(runMode); + factory->setProducer(creator); + return factory; +} + void RunConfigurationFactory::addSupportedProjectType(Core::Id id) { m_supportedProjectTypes.append(id); diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index a7f77445cc..cb6f2b7e0b 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -59,6 +59,7 @@ class RunConfiguration; class RunConfigurationCreationInfo; class RunConfigWidget; class RunControl; +class RunWorkerFactory; class Target; namespace Internal { @@ -301,13 +302,25 @@ protected: return new RunConfig(t, runConfigBaseId); }; m_runConfigBaseId = runConfigBaseId; + m_ownTypeChecker = [](RunConfiguration *runConfig) { + return qobject_cast<RunConfig *>(runConfig) != nullptr; + }; } void addSupportedProjectType(Core::Id id); void addSupportedTargetDeviceType(Core::Id id); void setDecorateDisplayNames(bool on); + template<class Worker> + RunWorkerFactory *addRunWorkerFactory(Core::Id runMode) + { + return addRunWorkerFactoryHelper(runMode, [](RunControl *rc) { return new Worker(rc); }); + } + private: + RunWorkerFactory *addRunWorkerFactoryHelper + (Core::Id runMode, const std::function<RunWorker *(RunControl *)> &creator); + RunConfigurationFactory(const RunConfigurationFactory &) = delete; RunConfigurationFactory operator=(const RunConfigurationFactory &) = delete; @@ -319,6 +332,8 @@ private: QList<Core::Id> m_supportedProjectTypes; QList<Core::Id> m_supportedTargetDeviceTypes; bool m_decorateDisplayNames = false; + QList<RunWorkerFactory *> m_ownedRunWorkerFactories; + std::function<bool(RunConfiguration *)> m_ownTypeChecker; }; class PROJECTEXPLORER_EXPORT FixedRunConfigurationFactory : public RunConfigurationFactory @@ -421,14 +436,6 @@ public: m_producer = [](RunControl *rc) { return new Worker(rc); }; } - template <class RunConfig> - void setSupportedRunConfiguration() - { - m_constraints.append([](RunConfiguration *runConfig) { - return qobject_cast<RunConfig *>(runConfig) != nullptr; - }); - } - bool canRun(RunConfiguration *runConfiguration, Core::Id runMode) const; void setPriority(int priority); @@ -536,15 +543,6 @@ public: factory->addConstraint(constraint); factory->setPriority(priority); } - template <class Config, class Worker> - static void registerWorker(Core::Id runMode, int priority = 0) - { - auto factory = new RunWorkerFactory; - factory->registerRunWorker<Worker>(); - factory->addSupportedRunMode(runMode); - factory->setSupportedRunConfiguration<Config>(); - factory->setPriority(priority); - } static WorkerCreator producer(RunConfiguration *runConfiguration, Core::Id runMode); |
