ClangTools: Move CSA's project settings into ClangToolsProjectSettings

Change-Id: I830c280e718aae416cd487eb5d02caf1e873f7c1
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Nikolai Kosjar
2018-05-08 16:47:27 +02:00
parent ba6f6f41d0
commit de751e5b69
13 changed files with 128 additions and 373 deletions

View File

@@ -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