From 1ec636cbd642e1cb43b2273068000232a8839fe6 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 2 Aug 2013 11:41:02 +0200 Subject: [PATCH] Analyzer: Move common startTool implementations to IAnalyzerTool base Change-Id: I963cb2d025a10cee75b9a9648531c4daeb1b70aa Reviewed-by: Aurindam Jana --- src/plugins/analyzerbase/analyzermanager.cpp | 99 -------------- src/plugins/analyzerbase/analyzermanager.h | 2 - src/plugins/analyzerbase/ianalyzertool.cpp | 137 +++++++++++++++++++ src/plugins/analyzerbase/ianalyzertool.h | 2 +- src/plugins/valgrind/callgrindtool.cpp | 2 +- src/plugins/valgrind/memchecktool.cpp | 5 - src/plugins/valgrind/memchecktool.h | 1 - src/plugins/valgrind/valgrindplugin.cpp | 46 ------- src/plugins/valgrind/valgrindplugin.h | 2 - 9 files changed, 139 insertions(+), 157 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index d0fee1c787d..b20293a0a76 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -156,7 +156,6 @@ public: QAction *actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode); // Convenience. - void startLocalTool(IAnalyzerTool *tool); bool isActionRunnable(QAction *action) const; public slots: @@ -409,22 +408,6 @@ void AnalyzerManagerPrivate::deactivateDock(QDockWidget *dockWidget) dockWidget->setParent(0); } -bool buildTypeAccepted(IAnalyzerTool::ToolMode toolMode, - BuildConfiguration::BuildType buildType) -{ - if (toolMode == IAnalyzerTool::AnyMode) - return true; - if (buildType == BuildConfiguration::Unknown) - return true; - if (buildType == BuildConfiguration::Debug - && toolMode == IAnalyzerTool::DebugMode) - return true; - if (buildType == BuildConfiguration::Release - && toolMode == IAnalyzerTool::ReleaseMode) - return true; - return false; -} - bool AnalyzerManagerPrivate::showPromptDialog(const QString &title, const QString &text, const QString &stopButtonText, const QString &cancelButtonText) const { @@ -442,83 +425,6 @@ bool AnalyzerManagerPrivate::showPromptDialog(const QString &title, const QStrin return messageBox.clickedStandardButton() == QDialogButtonBox::Yes; } -void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool) -{ - int index = m_tools.indexOf(tool); - QTC_ASSERT(index >= 0, return); - QTC_ASSERT(index < m_tools.size(), return); - QTC_ASSERT(tool == m_currentTool, return); - - // Make sure mode is shown. - q->showMode(); - - ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); - - // ### not sure if we're supposed to check if the RunConFiguration isEnabled - Project *pro = pe->startupProject(); - BuildConfiguration::BuildType buildType = BuildConfiguration::Unknown; - if (pro) { - if (const Target *target = pro->activeTarget()) { - // Build configuration is 0 for QML projects. - if (const BuildConfiguration *buildConfig = target->activeBuildConfiguration()) - buildType = buildConfig->buildType(); - } - } - - IAnalyzerTool::ToolMode toolMode = tool->toolMode(); - - // Check the project for whether the build config is in the correct mode - // if not, notify the user and urge him to use the correct mode. - if (!buildTypeAccepted(toolMode, buildType)) { - const QString toolName = tool->displayName(); - const QString currentMode = - buildType == BuildConfiguration::Debug ? tr("Debug") : tr("Release"); - - QSettings *settings = ICore::settings(); - const QString configKey = QLatin1String("Analyzer.AnalyzeCorrectMode"); - int ret; - if (settings->contains(configKey)) { - ret = settings->value(configKey, QDialog::Accepted).toInt(); - } else { - QString toolModeString; - switch (toolMode) { - case IAnalyzerTool::DebugMode: - toolModeString = tr("Debug"); - break; - case IAnalyzerTool::ReleaseMode: - toolModeString = tr("Release"); - break; - default: - QTC_CHECK(false); - } - const QString title = tr("Run %1 in %2 Mode?").arg(toolName).arg(currentMode); - const QString message = tr("

You are trying " - "to run the tool \"%1\" on an application in %2 mode. " - "The tool is designed to be used in %3 mode.

" - "Debug and Release mode run-time characteristics differ " - "significantly, analytical findings for one mode may or " - "may not be relevant for the other.

" - "Do you want to continue and run the tool in %2 mode?

") - .arg(toolName).arg(currentMode).arg(toolModeString); - const QString checkBoxText = tr("&Do not ask again"); - bool checkBoxSetting = false; - const QDialogButtonBox::StandardButton button = - Utils::CheckableMessageBox::question(ICore::mainWindow(), - title, message, checkBoxText, - &checkBoxSetting, QDialogButtonBox::Yes|QDialogButtonBox::Cancel, - QDialogButtonBox::Cancel); - ret = button == QDialogButtonBox::Yes ? QDialog::Accepted : QDialog::Rejected; - - if (checkBoxSetting && ret == QDialog::Accepted) - settings->setValue(configKey, ret); - } - if (ret == QDialog::Rejected) - return; - } - - pe->runProject(pro, tool->runMode()); -} - bool AnalyzerManagerPrivate::isActionRunnable(QAction *action) const { if (!action || m_isRunning) @@ -847,11 +753,6 @@ void AnalyzerManager::stopTool() stopAction()->trigger(); } -void AnalyzerManager::startLocalTool(IAnalyzerTool *tool) -{ - m_instance->d->startLocalTool(tool); -} - QAction *AnalyzerManager::stopAction() { return m_instance->d->m_stopAction; diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index ec5a884962a..d27cfe659c3 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -85,8 +85,6 @@ public: static void stopTool(); // Convenience functions. - static void startLocalTool(IAnalyzerTool *tool); - static QString msgToolStarted(const QString &name); static QString msgToolFinished(const QString &name, int issuesFound); diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index f1355824d6c..25394f0b569 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -30,7 +30,29 @@ #include "ianalyzertool.h" +#include "analyzermanager.h" +#include "analyzerruncontrol.h" +#include "startremotedialog.h" + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + using namespace Core; +using namespace ProjectExplorer; namespace Analyzer { @@ -78,4 +100,119 @@ AbstractAnalyzerSubConfig *IAnalyzerTool::createProjectSettings() return 0; } +static bool buildTypeAccepted(IAnalyzerTool::ToolMode toolMode, + BuildConfiguration::BuildType buildType) +{ + if (toolMode == IAnalyzerTool::AnyMode) + return true; + if (buildType == BuildConfiguration::Unknown) + return true; + if (buildType == BuildConfiguration::Debug + && toolMode == IAnalyzerTool::DebugMode) + return true; + if (buildType == BuildConfiguration::Release + && toolMode == IAnalyzerTool::ReleaseMode) + return true; + return false; +} + +static void startLocalTool(IAnalyzerTool *tool) +{ + // Make sure mode is shown. + AnalyzerManager::showMode(); + + ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); + + // ### not sure if we're supposed to check if the RunConFiguration isEnabled + Project *pro = pe->startupProject(); + BuildConfiguration::BuildType buildType = BuildConfiguration::Unknown; + if (pro) { + if (const Target *target = pro->activeTarget()) { + // Build configuration is 0 for QML projects. + if (const BuildConfiguration *buildConfig = target->activeBuildConfiguration()) + buildType = buildConfig->buildType(); + } + } + + // Check the project for whether the build config is in the correct mode + // if not, notify the user and urge him to use the correct mode. + if (!buildTypeAccepted(tool->toolMode(), buildType)) { + const QString currentMode = buildType == BuildConfiguration::Debug + ? AnalyzerManager::tr("Debug") + : AnalyzerManager::tr("Release"); + + QSettings *settings = ICore::settings(); + const QString configKey = QLatin1String("Analyzer.AnalyzeCorrectMode"); + int ret; + if (settings->contains(configKey)) { + ret = settings->value(configKey, QDialog::Accepted).toInt(); + } else { + QString toolModeString; + switch (tool->toolMode()) { + case IAnalyzerTool::DebugMode: + toolModeString = AnalyzerManager::tr("Debug"); + break; + case IAnalyzerTool::ReleaseMode: + toolModeString = AnalyzerManager::tr("Release"); + break; + default: + QTC_CHECK(false); + } + const QString toolName = tool->displayName(); + const QString title = AnalyzerManager::tr("Run %1 in %2 Mode?").arg(toolName).arg(currentMode); + const QString message = AnalyzerManager::tr("

You are trying " + "to run the tool \"%1\" on an application in %2 mode. " + "The tool is designed to be used in %3 mode.

" + "Debug and Release mode run-time characteristics differ " + "significantly, analytical findings for one mode may or " + "may not be relevant for the other.

" + "Do you want to continue and run the tool in %2 mode?

") + .arg(toolName).arg(currentMode).arg(toolModeString); + const QString checkBoxText = AnalyzerManager::tr("&Do not ask again"); + bool checkBoxSetting = false; + const QDialogButtonBox::StandardButton button = + Utils::CheckableMessageBox::question(ICore::mainWindow(), + title, message, checkBoxText, + &checkBoxSetting, QDialogButtonBox::Yes|QDialogButtonBox::Cancel, + QDialogButtonBox::Cancel); + ret = button == QDialogButtonBox::Yes ? QDialog::Accepted : QDialog::Rejected; + + if (checkBoxSetting && ret == QDialog::Accepted) + settings->setValue(configKey, ret); + } + if (ret == QDialog::Rejected) + return; + } + + pe->runProject(pro, tool->runMode()); +} + +static void startRemoteTool(IAnalyzerTool *tool) +{ + StartRemoteDialog dlg; + if (dlg.exec() != QDialog::Accepted) + return; + + AnalyzerStartParameters sp; + sp.startMode = StartRemote; + sp.connParams = dlg.sshParams(); + sp.debuggee = dlg.executable(); + sp.debuggeeArgs = dlg.arguments(); + sp.displayName = dlg.executable(); + sp.workingDirectory = dlg.workingDirectory(); + + AnalyzerRunControl *rc = tool->createRunControl(sp, 0); + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + + ProjectExplorerPlugin::instance()->startRunControl(rc, tool->runMode()); +} + +void IAnalyzerTool::startTool(StartMode mode) +{ + if (mode == StartLocal) + startLocalTool(this); + if (mode == StartRemote) + startRemoteTool(this); +} + } // namespace Analyzer diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index a13ba6caef7..ae34431bc7a 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -112,7 +112,7 @@ public: virtual AnalyzerRunControl *createRunControl(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; - virtual void startTool(StartMode mode) = 0; + virtual void startTool(StartMode mode); /// Called when tools gets selected. virtual void toolSelected() const {} diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 078f55797b7..c1611cf63d3 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -612,7 +612,7 @@ AnalyzerRunControl *CallgrindToolPrivate::createRunControl(const AnalyzerStartPa void CallgrindTool::startTool(StartMode mode) { - ValgrindPlugin::startValgrindTool(this, mode); + IAnalyzerTool::startTool(mode); d->setBusyCursor(true); } diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 644c947e159..273d1ef45f2 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -464,11 +464,6 @@ AnalyzerRunControl *MemcheckTool::createRunControl(const AnalyzerStartParameters return engine; } -void MemcheckTool::startTool(StartMode mode) -{ - ValgrindPlugin::startValgrindTool(this, mode); -} - void MemcheckTool::engineStarting(const AnalyzerRunControl *engine) { setBusyCursor(true); diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 550ea520e0f..69344659699 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -113,7 +113,6 @@ private: Analyzer::AnalyzerRunControl *createRunControl(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 bef11e453bd..f62d963ecaf 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -34,62 +34,16 @@ #include "memchecktool.h" #include "valgrindruncontrolfactory.h" -#include #include -#include -#include -#include -#include - -#include -#include - #include -#include -#include -#include #include -#include using namespace Analyzer; -using namespace ProjectExplorer; - namespace Valgrind { namespace Internal { -static void startRemoteTool(IAnalyzerTool *tool) -{ - Q_UNUSED(tool); - StartRemoteDialog dlg; - if (dlg.exec() != QDialog::Accepted) - return; - - AnalyzerStartParameters sp; - sp.startMode = StartRemote; - 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); - AnalyzerRunControl *rc = tool->createRunControl(sp, 0); - //m_currentRunControl = rc; - QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - - ProjectExplorerPlugin::instance()->startRunControl(rc, tool->runMode()); -} - -void ValgrindPlugin::startValgrindTool(IAnalyzerTool *tool, StartMode mode) -{ - if (mode == StartLocal) - AnalyzerManager::startLocalTool(tool); - if (mode == StartRemote) - startRemoteTool(tool); -} - bool ValgrindPlugin::initialize(const QStringList &, QString *) { StartModes modes; diff --git a/src/plugins/valgrind/valgrindplugin.h b/src/plugins/valgrind/valgrindplugin.h index 28e24df3dba..a05b9ea0345 100644 --- a/src/plugins/valgrind/valgrindplugin.h +++ b/src/plugins/valgrind/valgrindplugin.h @@ -47,8 +47,6 @@ public: virtual bool initialize(const QStringList &arguments, QString *errorString); virtual void extensionsInitialized() {} - - static void startValgrindTool(Analyzer::IAnalyzerTool *tool, Analyzer::StartMode mode); }; } // namespace Internal