summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2013-08-07 17:54:35 +0200
committerhjk <hjk121@nokiamail.com>2013-08-08 15:51:54 +0200
commit84331769f03054f7cde39ecb6a5b437de999f9ee (patch)
tree7d859e3d17291f7681a0572b6d03008ec99f2864 /src/plugins
parent15caea1d260273070aaa399c4643da5e68be886f (diff)
downloadqt-creator-84331769f03054f7cde39ecb6a5b437de999f9ee.tar.gz
Analyzer: Re-introduce ValgrindTool level
This partially reverts 1fb755bb42. It turns out that this is a better place to have the valgrind specific startLocal/startRemote logic shared by the valgrind tools. Change-Id: I1638b6d7665db81227e0a1a9aeef1ce944449391 Reviewed-by: Aurindam Jana <aurindam.jana@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/analyzerbase/ianalyzertool.cpp139
-rw-r--r--src/plugins/analyzerbase/ianalyzertool.h2
-rw-r--r--src/plugins/valgrind/callgrindtool.cpp4
-rw-r--r--src/plugins/valgrind/callgrindtool.h4
-rw-r--r--src/plugins/valgrind/memchecktool.cpp2
-rw-r--r--src/plugins/valgrind/memchecktool.h4
-rw-r--r--src/plugins/valgrind/valgrind.pro4
-rw-r--r--src/plugins/valgrind/valgrind.qbs2
-rw-r--r--src/plugins/valgrind/valgrindtool.cpp181
-rw-r--r--src/plugins/valgrind/valgrindtool.h52
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