From be452fcaff242a248a5ecc6dff09b467387b0d56 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Mon, 4 Jul 2011 18:33:47 +0200
Subject: [PATCH] Revert "analyzer: move convenience factory back to base
 plugin"

This reverts commit 06a41da04e726ffd35da18d99cd2f46cb99467be.

Change-Id: I06a41da04e726ffd35da18d99cd2f46cb99467bf
Reviewed-on: http://codereview.qt.nokia.com/1094
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: hjk <qthjk@ovi.com>
---
 src/plugins/analyzerbase/analyzermanager.cpp |  37 +----
 src/plugins/analyzerbase/analyzermanager.h   |   3 +-
 src/plugins/analyzerbase/analyzerplugin.cpp  | 147 ----------------
 src/plugins/analyzerbase/ianalyzertool.cpp   |   5 -
 src/plugins/analyzerbase/ianalyzertool.h     |   3 +-
 src/plugins/qmlprofiler/qmlprofilertool.cpp  |   8 +
 src/plugins/qmlprofiler/qmlprofilertool.h    |   1 +
 src/plugins/valgrind/callgrindtool.cpp       |   5 +
 src/plugins/valgrind/callgrindtool.h         |   2 +
 src/plugins/valgrind/memchecktool.cpp        |   5 +
 src/plugins/valgrind/memchecktool.h          |   1 +
 src/plugins/valgrind/valgrindplugin.cpp      | 166 +++++++++++++++++++
 src/plugins/valgrind/valgrindplugin.h        |   1 +
 13 files changed, 196 insertions(+), 188 deletions(-)

diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp
index f939c410692..1c9caaefe1a 100644
--- a/src/plugins/analyzerbase/analyzermanager.cpp
+++ b/src/plugins/analyzerbase/analyzermanager.cpp
@@ -42,8 +42,6 @@
 #include "analyzerutils.h"
 #include "ianalyzertool.h"
 
-#include "startremotedialog.h"
-
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/findplaceholder.h>
 #include <coreplugin/icore.h>
@@ -848,6 +846,11 @@ void AnalyzerManager::stopTool()
     stopAction()->trigger();
 }
 
+void AnalyzerManager::startLocalTool(IAnalyzerTool *tool, StartMode mode)
+{
+    m_instance->d->startLocalTool(tool, mode);
+}
+
 QAction *AnalyzerManager::stopAction()
 {
     return m_instance->d->m_stopAction;
@@ -867,36 +870,6 @@ IAnalyzerTool *AnalyzerManager::toolFromId(const QByteArray &id)
     return 0;
 }
 
-static void startRemoteTool(IAnalyzerTool *tool, StartMode mode)
-{
-    StartRemoteDialog dlg;
-    if (dlg.exec() != QDialog::Accepted)
-        return;
-
-    AnalyzerStartParameters sp;
-    sp.toolId = tool->id();
-    sp.startMode = mode;
-    sp.connParams = dlg.sshParams();
-    sp.debuggee = dlg.executable();
-    sp.debuggeeArgs = dlg.arguments();
-    sp.displayName = dlg.executable();
-    sp.workingDirectory = dlg.workingDirectory();
-
-    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0);
-    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
-
-    ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id());
-}
-
-void AnalyzerManager::defaultStartTool(IAnalyzerTool *tool, StartMode mode)
-{
-    if (mode == StartLocal)
-        m_instance->d->startLocalTool(tool, mode);
-    if (mode == StartRemote)
-        startRemoteTool(tool, mode);
-    //    m_instance->d->startRemoteTool(tool, mode);
-}
-
 } // namespace Analyzer
 
 #include "analyzermanager.moc"
diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h
index 68a81611de4..26bb66a0a86 100644
--- a/src/plugins/analyzerbase/analyzermanager.h
+++ b/src/plugins/analyzerbase/analyzermanager.h
@@ -84,8 +84,7 @@ public:
     static void stopTool();
 
     // Convenience functions.
-    //static void startLocalTool(IAnalyzerTool *tool, StartMode mode);
-    static void defaultStartTool(IAnalyzerTool *tool, StartMode mode);
+    static void startLocalTool(IAnalyzerTool *tool, StartMode mode);
 
     static QString msgToolStarted(const QString &name);
     static QString msgToolFinished(const QString &name, int issuesFound);
diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp
index 05e10f2389f..e914130f0dd 100644
--- a/src/plugins/analyzerbase/analyzerplugin.cpp
+++ b/src/plugins/analyzerbase/analyzerplugin.cpp
@@ -33,14 +33,8 @@
 **************************************************************************/
 
 #include "analyzerplugin.h"
-
 #include "analyzerconstants.h"
 #include "analyzermanager.h"
-#include "analyzerruncontrol.h"
-#include "analyzersettings.h"
-#include "analyzerstartparameters.h"
-#include "analyzerrunconfigwidget.h"
-#include "startremotedialog.h"
 #include "ianalyzertool.h"
 
 #include <coreplugin/icore.h>
@@ -49,152 +43,19 @@
 #include <coreplugin/editormanager/editormanager.h>
 
 #include <extensionsystem/pluginmanager.h>
-
-#include <projectexplorer/applicationrunconfiguration.h>
-#include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/task.h>
 #include <projectexplorer/taskhub.h>
 
-#include <remotelinux/linuxdeviceconfiguration.h>
-#include <remotelinux/remotelinuxrunconfiguration.h>
-
-#include <utils/qtcassert.h>
-
 #include <QtCore/QtPlugin>
-#include <QtGui/QAction>
 #include <QtGui/QMessageBox>
 #include <QtGui/QMainWindow>
 #include <QtGui/QApplication>
 
 using namespace Analyzer;
 using namespace Analyzer::Internal;
-using namespace ProjectExplorer;
 
 static AnalyzerPlugin *m_instance = 0;
 
-namespace Analyzer {
-namespace Internal {
-
-/////////////////////////////////////////////////////////////////////////////////
-//
-// AnalyzerRunControlFactory
-//
-/////////////////////////////////////////////////////////////////////////////////
-
-static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration)
-{
-    AnalyzerStartParameters sp;
-    QTC_ASSERT(runConfiguration, return sp);
-    LocalApplicationRunConfiguration *rc =
-            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
-    QTC_ASSERT(rc, return sp);
-
-    sp.startMode = StartLocal;
-    sp.environment = rc->environment();
-    sp.workingDirectory = rc->workingDirectory();
-    sp.debuggee = rc->executable();
-    sp.debuggeeArgs = rc->commandLineArguments();
-    sp.displayName = rc->displayName();
-    sp.connParams.host = QLatin1String("localhost");
-    sp.connParams.port = rc->qmlDebugServerPort();
-    return sp;
-}
-
-static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration)
-{
-    AnalyzerStartParameters sp;
-    RemoteLinux::RemoteLinuxRunConfiguration * const rc
-        = qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration);
-    QTC_ASSERT(rc, return sp);
-
-    sp.startMode = StartRemote;
-    sp.debuggee = rc->remoteExecutableFilePath();
-    sp.debuggeeArgs = rc->arguments();
-    sp.connParams = rc->deviceConfig()->sshParameters();
-    sp.analyzerCmdPrefix = rc->commandPrefix();
-    sp.displayName = rc->displayName();
-    return sp;
-}
-
-
-class AnalyzerRunControlFactory : public ProjectExplorer::IRunControlFactory
-{
-    Q_OBJECT
-
-public:
-    AnalyzerRunControlFactory(QObject *parent = 0);
-
-    typedef ProjectExplorer::RunConfiguration RunConfiguration;
-    typedef ProjectExplorer::RunControl RunControl;
-
-    // IRunControlFactory
-    bool canRun(RunConfiguration *runConfiguration, const QString &mode) const;
-    RunControl *create(RunConfiguration *runConfiguration, const QString &mode);
-    QString displayName() const;
-
-    ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect();
-    ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration);
-};
-
-AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent)
-    : IRunControlFactory(parent)
-{
-    setObjectName(QLatin1String("AnalyzerRunControlFactory"));
-}
-
-bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const
-{
-    Q_UNUSED(runConfiguration);
-    // FIXME: This is not generic.
-    return mode.startsWith("Callgrind") || mode.startsWith("Memcheck") || mode == "QmlProfiler";
-}
-
-RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode)
-{
-    QTC_ASSERT(canRun(runConfiguration, mode), return 0);
-
-    AnalyzerStartParameters sp;
-    if (qobject_cast<ProjectExplorer::LocalApplicationRunConfiguration *>(runConfiguration)) {
-        sp = localStartParameters(runConfiguration);
-    } else if (qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) {
-        sp = remoteLinuxStartParameters(runConfiguration);
-    } else {
-        // Might be S60DeviceRunfiguration, or something else ...
-        //sp.startMode = StartRemote;
-        sp.startMode = StartRemote;
-    }
-
-    IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1());
-    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
-    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
-    //m_isRunning = true;
-    return rc;
-}
-
-QString AnalyzerRunControlFactory::displayName() const
-{
-    return tr("Analyzer");
-}
-
-IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect()
-{
-    return new AnalyzerProjectSettings;
-}
-
-RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)
-{
-    LocalApplicationRunConfiguration *localRc =
-        qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
-    if (!localRc)
-        return 0;
-    AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>();
-    if (!settings)
-        return 0;
-
-    AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget;
-    ret->setRunConfiguration(runConfiguration);
-    return ret;
-}
 
 ////////////////////////////////////////////////////////////////////////
 //
@@ -245,9 +106,6 @@ bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorStri
     //: Category under which Analyzer tasks are listed in build issues view
     hub->addCategory(QLatin1String(Constants::ANALYZERTASK_ID), tr("Analyzer"));
 
-    AnalyzerRunControlFactory *factory = new AnalyzerRunControlFactory();
-    addAutoReleasedObject(factory);
-
     return true;
 }
 
@@ -267,9 +125,4 @@ AnalyzerPlugin *AnalyzerPlugin::instance()
     return m_instance;
 }
 
-} // namespace Internal
-} // namespace Analyzer
-
 Q_EXPORT_PLUGIN(AnalyzerPlugin)
-
-#include "analyzerplugin.moc"
diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp
index 3945fdb9a7f..f0dce04541c 100644
--- a/src/plugins/analyzerbase/ianalyzertool.cpp
+++ b/src/plugins/analyzerbase/ianalyzertool.cpp
@@ -64,9 +64,4 @@ QString IAnalyzerTool::defaultActionName(const IAnalyzerTool *tool, StartMode mo
     return base;
 }
 
-void IAnalyzerTool::defaultStartTool(IAnalyzerTool *tool, StartMode mode)
-{
-    AnalyzerManager::defaultStartTool(tool, mode);
-}
-
 } // namespace Analyzer
diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h
index 180e15cd76a..5ddcde892a4 100644
--- a/src/plugins/analyzerbase/ianalyzertool.h
+++ b/src/plugins/analyzerbase/ianalyzertool.h
@@ -105,7 +105,6 @@ public:
     static QByteArray defaultMenuGroup(StartMode mode);
     static QByteArray defaultActionId(const IAnalyzerTool *tool, StartMode mode);
     static QString defaultActionName(const IAnalyzerTool *tool, StartMode mode);
-    static void defaultStartTool(IAnalyzerTool *tool, StartMode mode);
 
     /// This gets called after all analyzation tools where initialized.
     virtual void extensionsInitialized() = 0;
@@ -125,7 +124,7 @@ public:
     virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp,
         ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0;
 
-    virtual void startTool(StartMode mode) { defaultStartTool(this, mode); }
+    virtual void startTool(StartMode mode) = 0;
 
     /// Called when tools gets selected.
     virtual void toolSelected() const {}
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index 716d4f332ed..3360dea0a22 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -537,3 +537,11 @@ void QmlProfilerTool::updateRecordingState()
     if (d->m_traceWindow->isRecording())
         clearDisplay();
 }
+
+void QmlProfilerTool::startTool(StartMode mode)
+{
+    if (mode == StartLocal)
+        AnalyzerManager::startLocalTool(this, mode);
+    if (mode == StartRemote)
+        AnalyzerManager::startLocalTool(this, mode);
+}
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h
index 50e3d1d55c0..f3d9b3063ea 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.h
+++ b/src/plugins/qmlprofiler/qmlprofilertool.h
@@ -62,6 +62,7 @@ public:
         ProjectExplorer::RunConfiguration *runConfiguration = 0);
 
     QWidget *createControlWidget();
+    void startTool(Analyzer::StartMode mode);
 
 public slots:
     void connectClient(int port);
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp
index c74dbd4a003..7e0ea98b195 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -680,6 +680,11 @@ IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameter
     return engine;
 }
 
+void CallgrindTool::startTool(StartMode mode)
+{
+    ValgrindPlugin::startValgrindTool(this, mode);
+}
+
 QWidget *CallgrindTool::createControlWidget()
 {
     return d->createControlWidget();
diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h
index 517753287f3..64b034d6409 100644
--- a/src/plugins/valgrind/callgrindtool.h
+++ b/src/plugins/valgrind/callgrindtool.h
@@ -60,6 +60,8 @@ public:
         ProjectExplorer::RunConfiguration *runConfiguration = 0);
     QWidget *createControlWidget();
 
+    void startTool(Analyzer::StartMode mode);
+
 private:
     CallgrindToolPrivate *d;
 };
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index a3a1079e99e..52ad2a8aa02 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -467,6 +467,11 @@ IAnalyzerEngine *MemcheckTool::createEngine(const AnalyzerStartParameters &sp,
     return engine;
 }
 
+void MemcheckTool::startTool(StartMode mode)
+{
+    ValgrindPlugin::startValgrindTool(this, mode);
+}
+
 void MemcheckTool::engineStarting(const IAnalyzerEngine *engine)
 {
     clearErrorView();
diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h
index 3035c0d7c3c..6f00fa70f9c 100644
--- a/src/plugins/valgrind/memchecktool.h
+++ b/src/plugins/valgrind/memchecktool.h
@@ -118,6 +118,7 @@ private:
 
     Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp,
                                ProjectExplorer::RunConfiguration *runConfiguration = 0);
+    void startTool(Analyzer::StartMode mode);
 
     void clearErrorView();
 
diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp
index 83190143a45..04aee6c0b57 100644
--- a/src/plugins/valgrind/valgrindplugin.cpp
+++ b/src/plugins/valgrind/valgrindplugin.cpp
@@ -42,6 +42,17 @@
 
 #include <analyzerbase/analyzerconstants.h>
 #include <analyzerbase/analyzermanager.h>
+#include <analyzerbase/analyzerrunconfigwidget.h>
+#include <analyzerbase/analyzerruncontrol.h>
+#include <analyzerbase/analyzersettings.h>
+#include <analyzerbase/analyzerstartparameters.h>
+#include <analyzerbase/startremotedialog.h>
+
+#include <projectexplorer/applicationrunconfiguration.h>
+#include <projectexplorer/projectexplorer.h>
+
+#include <remotelinux/linuxdeviceconfiguration.h>
+#include <remotelinux/remotelinuxrunconfiguration.h>
 
 #include <utils/qtcassert.h>
 
@@ -51,16 +62,168 @@
 #include <QtGui/QAction>
 
 using namespace Analyzer;
+using namespace Valgrind::Internal;
+using namespace ProjectExplorer;
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+// ValgrindRunControlFactory
+//
+/////////////////////////////////////////////////////////////////////////////////
 
 namespace Valgrind {
 namespace Internal {
 
+static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration)
+{
+    AnalyzerStartParameters sp;
+    QTC_ASSERT(runConfiguration, return sp);
+    LocalApplicationRunConfiguration *rc =
+            qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
+    QTC_ASSERT(rc, return sp);
+
+    sp.startMode = StartLocal;
+    sp.environment = rc->environment();
+    sp.workingDirectory = rc->workingDirectory();
+    sp.debuggee = rc->executable();
+    sp.debuggeeArgs = rc->commandLineArguments();
+    sp.displayName = rc->displayName();
+    sp.connParams.host = QLatin1String("localhost");
+    sp.connParams.port = rc->qmlDebugServerPort();
+    return sp;
+}
+
+static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration)
+{
+    AnalyzerStartParameters sp;
+    RemoteLinux::RemoteLinuxRunConfiguration * const rc
+        = qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration);
+    QTC_ASSERT(rc, return sp);
+
+    sp.startMode = StartRemote;
+    sp.debuggee = rc->remoteExecutableFilePath();
+    sp.debuggeeArgs = rc->arguments();
+    sp.connParams = rc->deviceConfig()->sshParameters();
+    sp.analyzerCmdPrefix = rc->commandPrefix();
+    sp.displayName = rc->displayName();
+    return sp;
+}
+
+
+class ValgrindRunControlFactory: public ProjectExplorer::IRunControlFactory
+{
+    Q_OBJECT
+
+public:
+    ValgrindRunControlFactory(QObject *parent = 0);
+
+    typedef ProjectExplorer::RunConfiguration RunConfiguration;
+    typedef ProjectExplorer::RunControl RunControl;
+
+    // IRunControlFactory
+    bool canRun(RunConfiguration *runConfiguration, const QString &mode) const;
+    RunControl *create(RunConfiguration *runConfiguration, const QString &mode);
+    QString displayName() const;
+
+    ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect();
+    ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration);
+};
+
+ValgrindRunControlFactory::ValgrindRunControlFactory(QObject *parent)
+    : IRunControlFactory(parent)
+{
+    setObjectName(QLatin1String("ValgrindRunControlFactory"));
+}
+
+bool ValgrindRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const
+{
+    Q_UNUSED(runConfiguration);
+    return mode.startsWith("Callgrind") || mode.startsWith("Memcheck");
+}
+
+RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode)
+{
+    QTC_ASSERT(canRun(runConfiguration, mode), return 0);
+
+    AnalyzerStartParameters sp;
+    if (qobject_cast<ProjectExplorer::LocalApplicationRunConfiguration *>(runConfiguration)) {
+        sp = localStartParameters(runConfiguration);
+    } else if (qobject_cast<RemoteLinux::RemoteLinuxRunConfiguration *>(runConfiguration)) {
+        sp = remoteLinuxStartParameters(runConfiguration);
+    } else {
+        // Might be S60DeviceRunfiguration, or something else ...
+        //sp.startMode = StartRemote;
+        sp.startMode = StartRemote;
+    }
+
+    IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1());
+    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
+    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
+    //m_isRunning = true;
+    return rc;
+}
+
+QString ValgrindRunControlFactory::displayName() const
+{
+    return tr("Analyzer");
+}
+
+IRunConfigurationAspect *ValgrindRunControlFactory::createRunConfigurationAspect()
+{
+    return new AnalyzerProjectSettings;
+}
+
+RunConfigWidget *ValgrindRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)
+{
+    LocalApplicationRunConfiguration *localRc =
+        qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
+    if (!localRc)
+        return 0;
+    AnalyzerProjectSettings *settings = runConfiguration->extraAspect<AnalyzerProjectSettings>();
+    if (!settings)
+        return 0;
+
+    AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget;
+    ret->setRunConfiguration(runConfiguration);
+    return ret;
+}
+
 /////////////////////////////////////////////////////////////////////////////////
 //
 // ValgrindPlugin
 //
 /////////////////////////////////////////////////////////////////////////////////
 
+static void startRemoteTool(IAnalyzerTool *tool, StartMode mode)
+{
+    Q_UNUSED(tool);
+    StartRemoteDialog dlg;
+    if (dlg.exec() != QDialog::Accepted)
+        return;
+
+    AnalyzerStartParameters sp;
+    sp.toolId = tool->id();
+    sp.startMode = mode;
+    sp.connParams = dlg.sshParams();
+    sp.debuggee = dlg.executable();
+    sp.debuggeeArgs = dlg.arguments();
+    sp.displayName = dlg.executable();
+    sp.workingDirectory = dlg.workingDirectory();
+
+    AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0);
+    //m_currentRunControl = rc;
+    QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt()));
+
+    ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id());
+}
+
+void ValgrindPlugin::startValgrindTool(IAnalyzerTool *tool, StartMode mode)
+{
+    if (mode == StartLocal)
+        AnalyzerManager::startLocalTool(tool, mode);
+    if (mode == StartRemote)
+        startRemoteTool(tool, mode);
+}
 
 static AbstractAnalyzerSubConfig *valgrindConfigFactory()
 {
@@ -102,6 +265,9 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *)
     AnalyzerManager::addTool(new MemcheckTool(this), modes);
     AnalyzerManager::addTool(new CallgrindTool(this), modes);
 
+    ValgrindRunControlFactory *factory = new ValgrindRunControlFactory();
+    addAutoReleasedObject(factory);
+
     return true;
 }
 
diff --git a/src/plugins/valgrind/valgrindplugin.h b/src/plugins/valgrind/valgrindplugin.h
index e07961d559f..9598572bd32 100644
--- a/src/plugins/valgrind/valgrindplugin.h
+++ b/src/plugins/valgrind/valgrindplugin.h
@@ -51,6 +51,7 @@ public:
     virtual bool initialize(const QStringList &arguments, QString *errorString);
     virtual void extensionsInitialized() {}
 
+    static void startValgrindTool(Analyzer::IAnalyzerTool *tool, Analyzer::StartMode mode);
 };
 
 } // namespace Internal
-- 
GitLab