aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2018-05-08 16:47:27 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2018-05-11 12:08:02 +0000
commitde751e5b69f66206ea47ef8dc2a81a5e087f5b17 (patch)
tree3e318227db5e2b8a6fd813efdab570c2c73f435b /src/plugins
parentba6f6f41d0aa36fc6a930d0585b4a170cd26f3f8 (diff)
ClangTools: Move CSA's project settings into ClangToolsProjectSettings
Change-Id: I830c280e718aae416cd487eb5d02caf1e873f7c1 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/clangtools/clangstaticanalyzerdiagnosticview.cpp5
-rw-r--r--src/plugins/clangtools/clangstaticanalyzerprojectsettings.cpp145
-rw-r--r--src/plugins/clangtools/clangstaticanalyzerprojectsettings.h92
-rw-r--r--src/plugins/clangtools/clangstaticanalyzerprojectsettingsmanager.cpp58
-rw-r--r--src/plugins/clangtools/clangstaticanalyzerprojectsettingsmanager.h52
-rw-r--r--src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.cpp7
-rw-r--r--src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.h4
-rw-r--r--src/plugins/clangtools/clangtools.pro4
-rw-r--r--src/plugins/clangtools/clangtools.qbs4
-rw-r--r--src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp12
-rw-r--r--src/plugins/clangtools/clangtoolsdiagnosticmodel.h2
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettings.cpp73
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettings.h43
13 files changed, 128 insertions, 373 deletions
diff --git a/src/plugins/clangtools/clangstaticanalyzerdiagnosticview.cpp b/src/plugins/clangtools/clangstaticanalyzerdiagnosticview.cpp
index a2a2c3d7b8..ac464d29b4 100644
--- a/src/plugins/clangtools/clangstaticanalyzerdiagnosticview.cpp
+++ b/src/plugins/clangtools/clangstaticanalyzerdiagnosticview.cpp
@@ -26,8 +26,7 @@
#include "clangstaticanalyzerdiagnosticview.h"
#include "clangtoolsdiagnosticmodel.h"
-#include "clangstaticanalyzerprojectsettings.h"
-#include "clangstaticanalyzerprojectsettingsmanager.h"
+#include "clangtoolsprojectsettings.h"
#include "clangtoolsutils.h"
#include <utils/fileutils.h>
@@ -70,7 +69,7 @@ void ClangStaticAnalyzerDiagnosticView::suppressCurrentDiagnostic()
filePath = relativeFilePath;
const SuppressedDiagnostic supDiag(filePath, diag.description, diag.issueContextKind,
diag.issueContext, diag.explainingSteps.count());
- ProjectSettingsManager::getSettings(project)->addSuppressedDiagnostic(supDiag);
+ ClangToolsProjectSettingsManager::getSettings(project)->addSuppressedDiagnostic(supDiag);
} else {
filterModel->addSuppressedDiagnostic(SuppressedDiagnostic(diag));
}
diff --git a/src/plugins/clangtools/clangstaticanalyzerprojectsettings.cpp b/src/plugins/clangtools/clangstaticanalyzerprojectsettings.cpp
deleted file mode 100644
index 62c2c41608..0000000000
--- a/src/plugins/clangtools/clangstaticanalyzerprojectsettings.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "clangstaticanalyzerprojectsettings.h"
-
-#include "clangtoolsdiagnostic.h"
-
-#include <utils/qtcassert.h>
-
-namespace ClangTools {
-namespace Internal {
-
-static QString suppressedDiagnosticsKey()
-{
- return QLatin1String("ClangStaticAnalyzer.SuppressedDiagnostics");
-}
-
-static QString suppressedDiagnosticFilePathKey()
-{
- return QLatin1String("ClangStaticAnalyzer.SuppressedDiagnosticFilePath");
-}
-
-static QString suppressedDiagnosticMessageKey()
-{
- return QLatin1String("ClangStaticAnalyzer.SuppressedDiagnosticMessage");
-}
-
-static QString suppressedDiagnosticContextKindKey()
-{
- return QLatin1String("ClangStaticAnalyzer.SuppressedDiagnosticContextKind");
-}
-
-static QString suppressedDiagnosticContextKey()
-{
- return QLatin1String("ClangStaticAnalyzer.SuppressedDiagnosticContext");
-}
-
-static QString suppressedDiagnosticUniquifierKey()
-{
- return QLatin1String("ClangStaticAnalyzer.SuppressedDiagnosticUniquifier");
-}
-
-ProjectSettings::ProjectSettings(ProjectExplorer::Project *project) : m_project(project)
-{
- load();
- connect(project, &ProjectExplorer::Project::aboutToSaveSettings, this,
- &ProjectSettings::store);
-}
-
-void ProjectSettings::addSuppressedDiagnostic(const SuppressedDiagnostic &diag)
-{
- QTC_ASSERT(!m_suppressedDiagnostics.contains(diag), return);
- m_suppressedDiagnostics << diag;
- emit suppressedDiagnosticsChanged();
-}
-
-void ProjectSettings::removeSuppressedDiagnostic(const SuppressedDiagnostic &diag)
-{
- const bool wasPresent = m_suppressedDiagnostics.removeOne(diag);
- QTC_ASSERT(wasPresent, return);
- emit suppressedDiagnosticsChanged();
-}
-
-void ProjectSettings::removeAllSuppressedDiagnostics()
-{
- m_suppressedDiagnostics.clear();
- emit suppressedDiagnosticsChanged();
-}
-
-void ProjectSettings::load()
-{
- const QVariantList list = m_project->namedSettings(suppressedDiagnosticsKey()).toList();
- foreach (const QVariant &v, list) {
- const QVariantMap diag = v.toMap();
- const QString fp = diag.value(suppressedDiagnosticFilePathKey()).toString();
- if (fp.isEmpty())
- continue;
- const QString message = diag.value(suppressedDiagnosticMessageKey()).toString();
- if (message.isEmpty())
- continue;
- Utils::FileName fullPath = Utils::FileName::fromString(fp);
- if (fullPath.toFileInfo().isRelative()) {
- fullPath = m_project->projectDirectory();
- fullPath.appendPath(fp);
- }
- if (!fullPath.exists())
- continue;
- const QString contextKind = diag.value(suppressedDiagnosticContextKindKey()).toString();
- const QString context = diag.value(suppressedDiagnosticContextKey()).toString();
- const int uniquifier = diag.value(suppressedDiagnosticUniquifierKey()).toInt();
- m_suppressedDiagnostics << SuppressedDiagnostic(Utils::FileName::fromString(fp), message,
- contextKind, context, uniquifier);
- }
- emit suppressedDiagnosticsChanged();
-}
-
-void ProjectSettings::store()
-{
- QVariantList list;
- foreach (const SuppressedDiagnostic &diag, m_suppressedDiagnostics) {
- QVariantMap diagMap;
- diagMap.insert(suppressedDiagnosticFilePathKey(), diag.filePath.toString());
- diagMap.insert(suppressedDiagnosticMessageKey(), diag.description);
- diagMap.insert(suppressedDiagnosticContextKindKey(), diag.contextKind);
- diagMap.insert(suppressedDiagnosticContextKey(), diag.context);
- diagMap.insert(suppressedDiagnosticUniquifierKey(), diag.uniquifier);
- list << diagMap;
- }
- m_project->setNamedSettings(suppressedDiagnosticsKey(), list);
-}
-
-
-SuppressedDiagnostic::SuppressedDiagnostic(const Diagnostic &diag)
- : filePath(Utils::FileName::fromString(diag.location.filePath))
- , description(diag.description)
- , contextKind(diag.issueContextKind)
- , context(diag.issueContext)
- , uniquifier(diag.explainingSteps.count())
-{
-}
-
-} // namespace Internal
-} // namespace ClangTools
diff --git a/src/plugins/clangtools/clangstaticanalyzerprojectsettings.h b/src/plugins/clangtools/clangstaticanalyzerprojectsettings.h
deleted file mode 100644
index 30383f3640..0000000000
--- a/src/plugins/clangtools/clangstaticanalyzerprojectsettings.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <projectexplorer/project.h>
-#include <utils/fileutils.h>
-
-#include <QList>
-#include <QObject>
-
-namespace ClangTools {
-namespace Internal {
-class Diagnostic;
-
-class SuppressedDiagnostic
-{
-public:
- SuppressedDiagnostic(const Utils::FileName &filePath, const QString &description,
- const QString &contextKind, const QString &context, int uniquifier)
- : filePath(filePath)
- , description(description)
- , contextKind(contextKind)
- , context(context)
- , uniquifier(uniquifier)
- {
- }
-
- SuppressedDiagnostic(const Diagnostic &diag);
-
- Utils::FileName filePath; // Relative for files in project, absolute otherwise.
- QString description;
- QString contextKind;
- QString context;
- int uniquifier;
-};
-
-inline bool operator==(const SuppressedDiagnostic &d1, const SuppressedDiagnostic &d2)
-{
- return d1.filePath == d2.filePath && d1.description == d2.description
- && d1.contextKind == d2.contextKind && d1.context == d2.context
- && d1.uniquifier == d2.uniquifier;
-}
-
-typedef QList<SuppressedDiagnostic> SuppressedDiagnosticsList;
-
-class ProjectSettings : public QObject
-{
- Q_OBJECT
-public:
- ProjectSettings(ProjectExplorer::Project *project);
-
- SuppressedDiagnosticsList suppressedDiagnostics() const { return m_suppressedDiagnostics; }
- void addSuppressedDiagnostic(const SuppressedDiagnostic &diag);
- void removeSuppressedDiagnostic(const SuppressedDiagnostic &diag);
- void removeAllSuppressedDiagnostics();
-
-signals:
- void suppressedDiagnosticsChanged();
-
-private:
- void load();
- void store();
-
- ProjectExplorer::Project * const m_project;
- SuppressedDiagnosticsList m_suppressedDiagnostics;
-};
-
-} // namespace Internal
-} // namespace ClangTools
diff --git a/src/plugins/clangtools/clangstaticanalyzerprojectsettingsmanager.cpp b/src/plugins/clangtools/clangstaticanalyzerprojectsettingsmanager.cpp
deleted file mode 100644
index 263812f8eb..0000000000
--- a/src/plugins/clangtools/clangstaticanalyzerprojectsettingsmanager.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "clangstaticanalyzerprojectsettingsmanager.h"
-
-#include "clangstaticanalyzerprojectsettings.h"
-
-#include <projectexplorer/session.h>
-
-namespace ClangTools {
-namespace Internal {
-
-ProjectSettingsManager::ProjectSettingsManager()
-{
- QObject::connect(ProjectExplorer::SessionManager::instance(),
- &ProjectExplorer::SessionManager::aboutToRemoveProject,
- &ProjectSettingsManager::handleProjectToBeRemoved);
-}
-
-ProjectSettings *ProjectSettingsManager::getSettings(ProjectExplorer::Project *project)
-{
- auto &settings = m_settings[project];
- if (!settings)
- settings.reset(new ProjectSettings(project));
- return settings.data();
-}
-
-void ProjectSettingsManager::handleProjectToBeRemoved(ProjectExplorer::Project *project)
-{
- m_settings.remove(project);
-}
-
-ProjectSettingsManager::SettingsMap ProjectSettingsManager::m_settings;
-
-} // namespace Internal
-} // namespace ClangTools
diff --git a/src/plugins/clangtools/clangstaticanalyzerprojectsettingsmanager.h b/src/plugins/clangtools/clangstaticanalyzerprojectsettingsmanager.h
deleted file mode 100644
index bbfdf7e715..0000000000
--- a/src/plugins/clangtools/clangstaticanalyzerprojectsettingsmanager.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-namespace ProjectExplorer { class Project; }
-
-#include <QHash>
-#include <QSharedPointer>
-
-namespace ClangTools {
-namespace Internal {
-class ProjectSettings;
-
-class ProjectSettingsManager
-{
-public:
- ProjectSettingsManager();
-
- static ProjectSettings *getSettings(ProjectExplorer::Project *project);
-
-private:
- static void handleProjectToBeRemoved(ProjectExplorer::Project *project);
-
- typedef QHash<ProjectExplorer::Project *, QSharedPointer<ProjectSettings>> SettingsMap;
- static SettingsMap m_settings;
-};
-
-} // namespace Internal
-} // namespace ClangTools
diff --git a/src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.cpp b/src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.cpp
index 3ac9e81f1c..894c6019d9 100644
--- a/src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.cpp
+++ b/src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.cpp
@@ -26,8 +26,7 @@
#include "clangstaticanalyzerprojectsettingswidget.h"
#include "ui_clangstaticanalyzerprojectsettingswidget.h"
-#include "clangstaticanalyzerprojectsettings.h"
-#include "clangstaticanalyzerprojectsettingsmanager.h"
+#include "clangtoolsprojectsettings.h"
#include <utils/qtcassert.h>
@@ -59,12 +58,12 @@ private:
ProjectSettingsWidget::ProjectSettingsWidget(ProjectExplorer::Project *project, QWidget *parent) :
QWidget(parent),
m_ui(new Ui::ProjectSettingsWidget)
- , m_projectSettings(ProjectSettingsManager::getSettings(project))
+ , m_projectSettings(ClangToolsProjectSettingsManager::getSettings(project))
{
m_ui->setupUi(this);
auto * const model = new SuppressedDiagnosticsModel(this);
model->setDiagnostics(m_projectSettings->suppressedDiagnostics());
- connect(m_projectSettings, &ProjectSettings::suppressedDiagnosticsChanged,
+ connect(m_projectSettings, &ClangToolsProjectSettings::suppressedDiagnosticsChanged,
[model, this] {
model->setDiagnostics(m_projectSettings->suppressedDiagnostics());
updateButtonStates();
diff --git a/src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.h b/src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.h
index 3896600115..2e29a61318 100644
--- a/src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.h
+++ b/src/plugins/clangtools/clangstaticanalyzerprojectsettingswidget.h
@@ -31,7 +31,7 @@ namespace ProjectExplorer { class Project; }
namespace ClangTools {
namespace Internal {
-class ProjectSettings;
+class ClangToolsProjectSettings;
namespace Ui { class ProjectSettingsWidget; }
@@ -50,7 +50,7 @@ private:
void removeSelected();
Ui::ProjectSettingsWidget * const m_ui;
- ProjectSettings * const m_projectSettings;
+ ClangToolsProjectSettings * const m_projectSettings;
};
} // namespace Internal
diff --git a/src/plugins/clangtools/clangtools.pro b/src/plugins/clangtools/clangtools.pro
index 1a0d43d1e9..431d48dd5f 100644
--- a/src/plugins/clangtools/clangtools.pro
+++ b/src/plugins/clangtools/clangtools.pro
@@ -11,8 +11,6 @@ INCLUDEPATH += $$LLVM_INCLUDEPATH
SOURCES += \
clangselectablefilesdialog.cpp \
clangstaticanalyzerdiagnosticview.cpp \
- clangstaticanalyzerprojectsettings.cpp \
- clangstaticanalyzerprojectsettingsmanager.cpp \
clangstaticanalyzerprojectsettingswidget.cpp \
clangstaticanalyzerruncontrol.cpp \
clangstaticanalyzerrunner.cpp \
@@ -36,8 +34,6 @@ HEADERS += \
clangfileinfo.h \
clangselectablefilesdialog.h \
clangstaticanalyzerdiagnosticview.h \
- clangstaticanalyzerprojectsettings.h \
- clangstaticanalyzerprojectsettingsmanager.h \
clangstaticanalyzerprojectsettingswidget.h \
clangstaticanalyzerruncontrol.h \
clangstaticanalyzerrunner.h \
diff --git a/src/plugins/clangtools/clangtools.qbs b/src/plugins/clangtools/clangtools.qbs
index 4c663173f4..1a086aed40 100644
--- a/src/plugins/clangtools/clangtools.qbs
+++ b/src/plugins/clangtools/clangtools.qbs
@@ -47,10 +47,6 @@ QtcPlugin {
"clangselectablefilesdialog.ui",
"clangstaticanalyzerdiagnosticview.cpp",
"clangstaticanalyzerdiagnosticview.h",
- "clangstaticanalyzerprojectsettings.cpp",
- "clangstaticanalyzerprojectsettings.h",
- "clangstaticanalyzerprojectsettingsmanager.cpp",
- "clangstaticanalyzerprojectsettingsmanager.h",
"clangstaticanalyzerprojectsettingswidget.cpp",
"clangstaticanalyzerprojectsettingswidget.h",
"clangstaticanalyzerprojectsettingswidget.ui",
diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp
index 2d6fb001b2..5df854e239 100644
--- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp
+++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp
@@ -26,7 +26,7 @@
#include "clangtoolsdiagnosticmodel.h"
#include "clangstaticanalyzerdiagnosticview.h"
-#include "clangstaticanalyzerprojectsettingsmanager.h"
+#include "clangtoolsprojectsettings.h"
#include "clangtoolsutils.h"
#include <projectexplorer/project.h>
@@ -323,14 +323,14 @@ void ClangStaticAnalyzerDiagnosticFilterModel::setProject(ProjectExplorer::Proje
{
QTC_ASSERT(project, return);
if (m_project) {
- disconnect(ProjectSettingsManager::getSettings(m_project),
- &ProjectSettings::suppressedDiagnosticsChanged, this,
+ disconnect(ClangToolsProjectSettingsManager::getSettings(m_project),
+ &ClangToolsProjectSettings::suppressedDiagnosticsChanged, this,
&ClangStaticAnalyzerDiagnosticFilterModel::handleSuppressedDiagnosticsChanged);
}
m_project = project;
m_lastProjectDirectory = m_project->projectDirectory();
- connect(ProjectSettingsManager::getSettings(m_project),
- &ProjectSettings::suppressedDiagnosticsChanged,
+ connect(ClangToolsProjectSettingsManager::getSettings(m_project),
+ &ClangToolsProjectSettings::suppressedDiagnosticsChanged,
this, &ClangStaticAnalyzerDiagnosticFilterModel::handleSuppressedDiagnosticsChanged);
handleSuppressedDiagnosticsChanged();
}
@@ -367,7 +367,7 @@ void ClangStaticAnalyzerDiagnosticFilterModel::handleSuppressedDiagnosticsChange
{
QTC_ASSERT(m_project, return);
m_suppressedDiagnostics
- = ProjectSettingsManager::getSettings(m_project)->suppressedDiagnostics();
+ = ClangToolsProjectSettingsManager::getSettings(m_project)->suppressedDiagnostics();
invalidate();
}
diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.h b/src/plugins/clangtools/clangtoolsdiagnosticmodel.h
index 0ca4dc9bac..178e7748a5 100644
--- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.h
+++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.h
@@ -26,7 +26,7 @@
#pragma once
#include "clangtoolsdiagnostic.h"
-#include "clangstaticanalyzerprojectsettings.h"
+#include "clangtoolsprojectsettings.h"
#include <debugger/analyzer/detailederrorview.h>
#include <utils/fileutils.h>
diff --git a/src/plugins/clangtools/clangtoolsprojectsettings.cpp b/src/plugins/clangtools/clangtoolsprojectsettings.cpp
index f493ac5666..d6c87bd876 100644
--- a/src/plugins/clangtools/clangtoolsprojectsettings.cpp
+++ b/src/plugins/clangtools/clangtoolsprojectsettings.cpp
@@ -24,16 +24,24 @@
****************************************************************************/
#include "clangtoolsprojectsettings.h"
+#include "clangtoolsdiagnostic.h"
#include <projectexplorer/session.h>
#include <utils/algorithm.h>
+#include <utils/qtcassert.h>
namespace ClangTools {
namespace Internal {
static const char SETTINGS_KEY_SELECTED_DIRS[] = "ClangTools.SelectedDirs";
static const char SETTINGS_KEY_SELECTED_FILES[] = "ClangTools.SelectedFiles";
+static const char SETTINGS_KEY_SUPPRESSED_DIAGS[] = "ClangTools.SuppressedDiagnostics";
+static const char SETTINGS_KEY_SUPPRESSED_DIAGS_FILEPATH[] = "ClangTools.SuppressedDiagnosticFilePath";
+static const char SETTINGS_KEY_SUPPRESSED_DIAGS_MESSAGE[] = "ClangTools.SuppressedDiagnosticMessage";
+static const char SETTINGS_KEY_SUPPRESSED_DIAGS_CONTEXTKIND[] = "ClangTools.SuppressedDiagnosticContextKind";
+static const char SETTINGS_KEY_SUPPRESSED_DIAGS_CONTEXT[] = "ClangTools.SuppressedDiagnosticContext";
+static const char SETTINGS_KEY_SUPPRESSED_DIAGS_UNIQIFIER[] = "ClangTools.SuppressedDiagnosticUniquifier";
ClangToolsProjectSettings::ClangToolsProjectSettings(ProjectExplorer::Project *project)
: m_project(project)
@@ -50,6 +58,26 @@ ClangToolsProjectSettings::~ClangToolsProjectSettings()
store();
}
+void ClangToolsProjectSettings::addSuppressedDiagnostic(const SuppressedDiagnostic &diag)
+{
+ QTC_ASSERT(!m_suppressedDiagnostics.contains(diag), return);
+ m_suppressedDiagnostics << diag;
+ emit suppressedDiagnosticsChanged();
+}
+
+void ClangToolsProjectSettings::removeSuppressedDiagnostic(const SuppressedDiagnostic &diag)
+{
+ const bool wasPresent = m_suppressedDiagnostics.removeOne(diag);
+ QTC_ASSERT(wasPresent, return);
+ emit suppressedDiagnosticsChanged();
+}
+
+void ClangToolsProjectSettings::removeAllSuppressedDiagnostics()
+{
+ m_suppressedDiagnostics.clear();
+ emit suppressedDiagnosticsChanged();
+}
+
void ClangToolsProjectSettings::load()
{
auto toFileName = [](const QString &s) { return Utils::FileName::fromString(s); };
@@ -59,6 +87,30 @@ void ClangToolsProjectSettings::load()
const QStringList files = m_project->namedSettings(SETTINGS_KEY_SELECTED_FILES).toStringList();
m_selectedFiles = Utils::transform<QSet>(files, toFileName);
+
+ const QVariantList list = m_project->namedSettings(SETTINGS_KEY_SUPPRESSED_DIAGS).toList();
+ foreach (const QVariant &v, list) {
+ const QVariantMap diag = v.toMap();
+ const QString fp = diag.value(SETTINGS_KEY_SUPPRESSED_DIAGS_FILEPATH).toString();
+ if (fp.isEmpty())
+ continue;
+ const QString message = diag.value(SETTINGS_KEY_SUPPRESSED_DIAGS_MESSAGE).toString();
+ if (message.isEmpty())
+ continue;
+ Utils::FileName fullPath = Utils::FileName::fromString(fp);
+ if (fullPath.toFileInfo().isRelative()) {
+ fullPath = m_project->projectDirectory();
+ fullPath.appendPath(fp);
+ }
+ if (!fullPath.exists())
+ continue;
+ const QString contextKind = diag.value(SETTINGS_KEY_SUPPRESSED_DIAGS_CONTEXTKIND).toString();
+ const QString context = diag.value(SETTINGS_KEY_SUPPRESSED_DIAGS_CONTEXT).toString();
+ const int uniquifier = diag.value(SETTINGS_KEY_SUPPRESSED_DIAGS_UNIQIFIER).toInt();
+ m_suppressedDiagnostics << SuppressedDiagnostic(Utils::FileName::fromString(fp), message,
+ contextKind, context, uniquifier);
+ }
+ emit suppressedDiagnosticsChanged();
}
void ClangToolsProjectSettings::store()
@@ -68,6 +120,18 @@ void ClangToolsProjectSettings::store()
const QStringList files = Utils::transform(m_selectedFiles.toList(), &Utils::FileName::toString);
m_project->setNamedSettings(SETTINGS_KEY_SELECTED_FILES, files);
+
+ QVariantList list;
+ foreach (const SuppressedDiagnostic &diag, m_suppressedDiagnostics) {
+ QVariantMap diagMap;
+ diagMap.insert(SETTINGS_KEY_SUPPRESSED_DIAGS_FILEPATH, diag.filePath.toString());
+ diagMap.insert(SETTINGS_KEY_SUPPRESSED_DIAGS_MESSAGE, diag.description);
+ diagMap.insert(SETTINGS_KEY_SUPPRESSED_DIAGS_CONTEXTKIND, diag.contextKind);
+ diagMap.insert(SETTINGS_KEY_SUPPRESSED_DIAGS_CONTEXT, diag.context);
+ diagMap.insert(SETTINGS_KEY_SUPPRESSED_DIAGS_UNIQIFIER, diag.uniquifier);
+ list << diagMap;
+ }
+ m_project->setNamedSettings(SETTINGS_KEY_SUPPRESSED_DIAGS, list);
}
ClangToolsProjectSettingsManager::ClangToolsProjectSettingsManager()
@@ -93,5 +157,14 @@ void ClangToolsProjectSettingsManager::handleProjectToBeRemoved(ProjectExplorer:
ClangToolsProjectSettingsManager::SettingsMap ClangToolsProjectSettingsManager::m_settings;
+SuppressedDiagnostic::SuppressedDiagnostic(const Diagnostic &diag)
+ : filePath(Utils::FileName::fromString(diag.location.filePath))
+ , description(diag.description)
+ , contextKind(diag.issueContextKind)
+ , context(diag.issueContext)
+ , uniquifier(diag.explainingSteps.count())
+{
+}
+
} // namespace Internal
} // namespace ClangTools
diff --git a/src/plugins/clangtools/clangtoolsprojectsettings.h b/src/plugins/clangtools/clangtoolsprojectsettings.h
index c2e14e5f21..d29c0405d7 100644
--- a/src/plugins/clangtools/clangtoolsprojectsettings.h
+++ b/src/plugins/clangtools/clangtoolsprojectsettings.h
@@ -33,8 +33,39 @@
namespace ClangTools {
namespace Internal {
+class Diagnostic;
+
+class SuppressedDiagnostic
+{
+public:
+ SuppressedDiagnostic(const Utils::FileName &filePath, const QString &description,
+ const QString &contextKind, const QString &context, int uniquifier)
+ : filePath(filePath)
+ , description(description)
+ , contextKind(contextKind)
+ , context(context)
+ , uniquifier(uniquifier)
+ {
+ }
+
+ SuppressedDiagnostic(const Diagnostic &diag);
+
+ Utils::FileName filePath; // Relative for files in project, absolute otherwise.
+ QString description;
+ QString contextKind;
+ QString context;
+ int uniquifier;
+};
+
+inline bool operator==(const SuppressedDiagnostic &d1, const SuppressedDiagnostic &d2)
+{
+ return d1.filePath == d2.filePath && d1.description == d2.description
+ && d1.contextKind == d2.contextKind && d1.context == d2.context
+ && d1.uniquifier == d2.uniquifier;
+}
+
+typedef QList<SuppressedDiagnostic> SuppressedDiagnosticsList;
-// TODO: Incorporate Clang Static Analyzer's ProjectSettings
class ClangToolsProjectSettings : public QObject
{
Q_OBJECT
@@ -49,6 +80,14 @@ public:
QSet<Utils::FileName> selectedFiles() const { return m_selectedFiles; }
void setSelectedFiles(const QSet<Utils::FileName> &value) { m_selectedFiles = value; }
+ SuppressedDiagnosticsList suppressedDiagnostics() const { return m_suppressedDiagnostics; }
+ void addSuppressedDiagnostic(const SuppressedDiagnostic &diag);
+ void removeSuppressedDiagnostic(const SuppressedDiagnostic &diag);
+ void removeAllSuppressedDiagnostics();
+
+signals:
+ void suppressedDiagnosticsChanged();
+
private:
void load();
void store();
@@ -56,9 +95,9 @@ private:
ProjectExplorer::Project *m_project;
QSet<Utils::FileName> m_selectedDirs;
QSet<Utils::FileName> m_selectedFiles;
+ SuppressedDiagnosticsList m_suppressedDiagnostics;
};
-// TODO: Incorporate Clang Static Analyzer's ProjectSettingsManager
class ClangToolsProjectSettingsManager
{
public: