diff options
-rw-r--r-- | src/plugins/analyzerbase/ianalyzertool.cpp | 139 | ||||
-rw-r--r-- | src/plugins/analyzerbase/ianalyzertool.h | 2 | ||||
-rw-r--r-- | src/plugins/valgrind/callgrindtool.cpp | 4 | ||||
-rw-r--r-- | src/plugins/valgrind/callgrindtool.h | 4 | ||||
-rw-r--r-- | src/plugins/valgrind/memchecktool.cpp | 2 | ||||
-rw-r--r-- | src/plugins/valgrind/memchecktool.h | 4 | ||||
-rw-r--r-- | src/plugins/valgrind/valgrind.pro | 4 | ||||
-rw-r--r-- | src/plugins/valgrind/valgrind.qbs | 2 | ||||
-rw-r--r-- | src/plugins/valgrind/valgrindtool.cpp | 181 | ||||
-rw-r--r-- | src/plugins/valgrind/valgrindtool.h | 52 |
10 files changed, 245 insertions, 149 deletions
diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index 351166322f..22b8fd489f 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -30,149 +30,10 @@ #include "ianalyzertool.h" -#include "analyzermanager.h" -#include "analyzerruncontrol.h" -#include "startremotedialog.h" - -#include <coreplugin/icore.h> -#include <coreplugin/imode.h> -#include <coreplugin/modemanager.h> - -#include <projectexplorer/projectexplorer.h> -#include <projectexplorer/project.h> -#include <projectexplorer/buildconfiguration.h> -#include <projectexplorer/target.h> - -#include <utils/qtcassert.h> -#include <utils/checkablemessagebox.h> - -#include <QAction> -#include <QDialog> -#include <QDialogButtonBox> -#include <QSettings> - -using namespace Core; -using namespace ProjectExplorer; - namespace Analyzer { IAnalyzerTool::IAnalyzerTool(QObject *parent) : QObject(parent) {} -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("<html><head/><body><p>You are trying " - "to run the tool \"%1\" on an application in %2 mode. " - "The tool is designed to be used in %3 mode.</p><p>" - "Debug and Release mode run-time characteristics differ " - "significantly, analytical findings for one mode may or " - "may not be relevant for the other.</p><p>" - "Do you want to continue and run the tool in %2 mode?</p></body></html>") - .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 1910490c2e..f32a52e1d9 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -106,7 +106,7 @@ public: virtual AnalyzerRunControl *createRunControl(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; - virtual void startTool(StartMode mode); + virtual void startTool(StartMode mode) = 0; /// Called when tools gets selected. virtual void toolSelected() const {} diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 1a30eaedf9..e3459747a4 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -502,7 +502,7 @@ static QToolButton *createToolButton(QAction *action) } CallgrindTool::CallgrindTool(QObject *parent) - : IAnalyzerTool(parent) + : ValgrindTool(parent) { d = new CallgrindToolPrivate(this); setObjectName(QLatin1String("CallgrindTool")); @@ -612,7 +612,7 @@ AnalyzerRunControl *CallgrindToolPrivate::createRunControl(const AnalyzerStartPa void CallgrindTool::startTool(StartMode mode) { - IAnalyzerTool::startTool(mode); + ValgrindTool::startTool(mode); d->setBusyCursor(true); } diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index 14a5b201fb..1f7b1e8482 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -30,14 +30,14 @@ #ifndef CALLGRINDTOOL_H #define CALLGRINDTOOL_H -#include <analyzerbase/ianalyzertool.h> +#include "valgrindtool.h" namespace Valgrind { namespace Internal { class CallgrindToolPrivate; -class CallgrindTool : public Analyzer::IAnalyzerTool +class CallgrindTool : public ValgrindTool { Q_OBJECT diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 97ea2407ec..1004f79f06 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -179,7 +179,7 @@ static void initKindFilterAction(QAction *action, const QList<int> &kinds) } MemcheckTool::MemcheckTool(QObject *parent) - : IAnalyzerTool(parent) + : ValgrindTool(parent) { m_settings = 0; m_errorModel = 0; diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 8099fc75e4..3cfe63c4df 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -31,7 +31,7 @@ #ifndef MEMCHECKTOOL_H #define MEMCHECKTOOL_H -#include <analyzerbase/ianalyzertool.h> +#include "valgrindtool.h" #include <QSortFilterProxyModel> @@ -77,7 +77,7 @@ private: bool m_filterExternalIssues; }; -class MemcheckTool : public Analyzer::IAnalyzerTool +class MemcheckTool : public ValgrindTool { Q_OBJECT diff --git a/src/plugins/valgrind/valgrind.pro b/src/plugins/valgrind/valgrind.pro index 597a88970d..4ebf133ff1 100644 --- a/src/plugins/valgrind/valgrind.pro +++ b/src/plugins/valgrind/valgrind.pro @@ -24,7 +24,7 @@ HEADERS += \ callgrindengine.h \ workarounds.h \ callgrindtextmark.h \ - \ + valgrindtool.h \ memchecktool.h \ memcheckengine.h \ memcheckerrorview.h \ @@ -38,7 +38,7 @@ SOURCES += \ valgrindsettings.cpp \ valgrindrunner.cpp \ valgrindprocess.cpp \ - \ + valgrindtool.cpp \ callgrindcostdelegate.cpp \ callgrindcostview.cpp \ callgrindhelper.cpp \ diff --git a/src/plugins/valgrind/valgrind.qbs b/src/plugins/valgrind/valgrind.qbs index 6c71bf7026..0f6d1a9a89 100644 --- a/src/plugins/valgrind/valgrind.qbs +++ b/src/plugins/valgrind/valgrind.qbs @@ -54,6 +54,8 @@ QtcPlugin { "valgrindrunner.h", "valgrindsettings.cpp", "valgrindsettings.h", + "valgrindtool.cpp", + "valgrindtool.h", "workarounds.cpp", "workarounds.h", "callgrind/callgrindabstractmodel.h", diff --git a/src/plugins/valgrind/valgrindtool.cpp b/src/plugins/valgrind/valgrindtool.cpp new file mode 100644 index 0000000000..7df1d7b0c7 --- /dev/null +++ b/src/plugins/valgrind/valgrindtool.cpp @@ -0,0 +1,181 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** Author: Nicolas Arnaud-Cormos, KDAB (nicolas.arnaud-cormos@kdab.com) +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "valgrindtool.h" + +#include <analyzerbase/analyzermanager.h> +#include <analyzerbase/analyzerruncontrol.h> +#include <analyzerbase/startremotedialog.h> + +#include <coreplugin/icore.h> +#include <coreplugin/imode.h> +#include <coreplugin/modemanager.h> + +#include <projectexplorer/projectexplorer.h> +#include <projectexplorer/project.h> +#include <projectexplorer/buildconfiguration.h> +#include <projectexplorer/target.h> + +#include <utils/qtcassert.h> +#include <utils/checkablemessagebox.h> + +#include <QAction> +#include <QDialog> +#include <QDialogButtonBox> +#include <QSettings> + +using namespace Analyzer; +using namespace Core; +using namespace ProjectExplorer; + +namespace Valgrind { +namespace Internal { + +ValgrindTool::ValgrindTool(QObject *parent) + : IAnalyzerTool(parent) +{} + +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("<html><head/><body><p>You are trying " + "to run the tool \"%1\" on an application in %2 mode. " + "The tool is designed to be used in %3 mode.</p><p>" + "Debug and Release mode run-time characteristics differ " + "significantly, analytical findings for one mode may or " + "may not be relevant for the other.</p><p>" + "Do you want to continue and run the tool in %2 mode?</p></body></html>") + .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 ValgrindTool::startTool(StartMode mode) +{ + if (mode == StartLocal) + startLocalTool(this); + if (mode == StartRemote) + startRemoteTool(this); +} + +} // namespace Internal +} // namespace Valgrind diff --git a/src/plugins/valgrind/valgrindtool.h b/src/plugins/valgrind/valgrindtool.h new file mode 100644 index 0000000000..24aacfb72f --- /dev/null +++ b/src/plugins/valgrind/valgrindtool.h @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** Author: Nicolas Arnaud-Cormos, KDAB (nicolas.arnaud-cormos@kdab.com) +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef VALGRINDTOOL_H +#define VALGRINDTOOL_H + +#include <analyzerbase/ianalyzertool.h> + +namespace Valgrind { +namespace Internal { + +class ValgrindTool : public Analyzer::IAnalyzerTool +{ + Q_OBJECT + +public: + explicit ValgrindTool(QObject *parent = 0); + + void startTool(Analyzer::StartMode mode); +}; + +} // namespace Internal +} // namespace Valgrind + +#endif // VALGRIND_TOOL |