summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/android/androidplugin.cpp11
-rw-r--r--src/plugins/nim/nimplugin.cpp3
-rw-r--r--src/plugins/nim/project/nimrunconfiguration.cpp1
-rw-r--r--src/plugins/projectexplorer/runconfiguration.cpp12
-rw-r--r--src/plugins/projectexplorer/runconfiguration.h32
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);