forked from qt-creator/qt-creator
Clang: Let CppCodeModelSettings announce invalidated diagnostic configs
Change-Id: I1fe62d4cd4bc91bfd73e57ace6dc9a87d13b3537 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -75,4 +75,9 @@ bool ClangDiagnosticConfig::operator==(const ClangDiagnosticConfig &other) const
|
||||
&& m_isReadOnly == other.m_isReadOnly;
|
||||
}
|
||||
|
||||
bool ClangDiagnosticConfig::operator!=(const ClangDiagnosticConfig &other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
} // namespace CppTools
|
||||
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
void setIsReadOnly(bool isReadOnly);
|
||||
|
||||
bool operator==(const ClangDiagnosticConfig &other) const;
|
||||
bool operator!=(const ClangDiagnosticConfig &other) const;
|
||||
|
||||
private:
|
||||
Core::Id m_id;
|
||||
|
||||
@@ -158,6 +158,23 @@ ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(const ClangDiagnos
|
||||
: config.displayName();
|
||||
}
|
||||
|
||||
QVector<Core::Id> ClangDiagnosticConfigsModel::changedOrRemovedConfigs(
|
||||
const ClangDiagnosticConfigs &oldConfigs, const ClangDiagnosticConfigs &newConfigs)
|
||||
{
|
||||
ClangDiagnosticConfigsModel newConfigsModel(newConfigs);
|
||||
QVector<Core::Id> changedConfigs;
|
||||
|
||||
for (const ClangDiagnosticConfig &old: oldConfigs) {
|
||||
const int i = newConfigsModel.indexOfConfig(old.id());
|
||||
if (i == -1)
|
||||
changedConfigs.append(old.id()); // Removed
|
||||
else if (newConfigsModel.configs()[i] != old)
|
||||
changedConfigs.append(old.id()); // Changed
|
||||
}
|
||||
|
||||
return changedConfigs;
|
||||
}
|
||||
|
||||
int ClangDiagnosticConfigsModel::indexOfConfig(const Core::Id &id) const
|
||||
{
|
||||
return Utils::indexOf(m_diagnosticConfigs, [&](const ClangDiagnosticConfig &config) {
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
#include "clangdiagnosticconfig.h"
|
||||
|
||||
#include <QVector>
|
||||
|
||||
namespace CppTools {
|
||||
|
||||
class CPPTOOLS_EXPORT ClangDiagnosticConfigsModel
|
||||
@@ -47,11 +49,11 @@ public:
|
||||
ClangDiagnosticConfigs configs() const;
|
||||
bool hasConfigWithId(const Core::Id &id) const;
|
||||
const ClangDiagnosticConfig &configWithId(const Core::Id &id) const;
|
||||
int indexOfConfig(const Core::Id &id) const;
|
||||
|
||||
static QString displayNameWithBuiltinIndication(const ClangDiagnosticConfig &config);
|
||||
|
||||
private:
|
||||
int indexOfConfig(const Core::Id &id) const;
|
||||
static QVector<Core::Id> changedOrRemovedConfigs(const ClangDiagnosticConfigs &oldConfigs,
|
||||
const ClangDiagnosticConfigs &newConfigs);
|
||||
|
||||
private:
|
||||
ClangDiagnosticConfigs m_diagnosticConfigs;
|
||||
|
||||
@@ -73,9 +73,12 @@ static QString tidyChecksKey()
|
||||
static QString clazyChecksKey()
|
||||
{ return QLatin1String(Constants::CPPTOOLS_CLAZY_CHECKS); }
|
||||
|
||||
void CppCodeModelSettings::fromSettings(QSettings *s)
|
||||
static ClangDiagnosticConfigs customDiagnosticConfigsFromSettings(QSettings *s)
|
||||
{
|
||||
s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP));
|
||||
QTC_ASSERT(s->group() == QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP),
|
||||
return ClangDiagnosticConfigs());
|
||||
|
||||
ClangDiagnosticConfigs configs;
|
||||
|
||||
const int size = s->beginReadArray(clangDiagnosticConfigsArrayKey());
|
||||
for (int i = 0; i < size; ++i) {
|
||||
@@ -85,14 +88,27 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
|
||||
config.setId(Core::Id::fromSetting(s->value(clangDiagnosticConfigsArrayIdKey())));
|
||||
config.setDisplayName(s->value(clangDiagnosticConfigsArrayDisplayNameKey()).toString());
|
||||
config.setCommandLineWarnings(s->value(clangDiagnosticConfigsArrayWarningsKey()).toStringList());
|
||||
m_clangCustomDiagnosticConfigs.append(config);
|
||||
configs.append(config);
|
||||
}
|
||||
s->endArray();
|
||||
|
||||
const Core::Id diagnosticConfigId = Core::Id::fromSetting(
|
||||
s->value(clangDiagnosticConfigKey(),
|
||||
initialClangDiagnosticConfigId().toSetting()));
|
||||
setClangDiagnosticConfigId(diagnosticConfigId);
|
||||
return configs;
|
||||
}
|
||||
|
||||
static Core::Id clangDiagnosticConfigIdFromSettings(QSettings *s)
|
||||
{
|
||||
QTC_ASSERT(s->group() == QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP), return Core::Id());
|
||||
|
||||
return Core::Id::fromSetting(
|
||||
s->value(clangDiagnosticConfigKey(), initialClangDiagnosticConfigId().toSetting()));
|
||||
}
|
||||
|
||||
void CppCodeModelSettings::fromSettings(QSettings *s)
|
||||
{
|
||||
s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP));
|
||||
|
||||
setClangCustomDiagnosticConfigs(customDiagnosticConfigsFromSettings(s));
|
||||
setClangDiagnosticConfigId(clangDiagnosticConfigIdFromSettings(s));
|
||||
|
||||
const QVariant pchUsageVariant = s->value(pchUsageKey(), initialPchUsage());
|
||||
setPCHUsage(static_cast<PCHUsage>(pchUsageVariant.toInt()));
|
||||
@@ -120,6 +136,8 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
|
||||
void CppCodeModelSettings::toSettings(QSettings *s)
|
||||
{
|
||||
s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP));
|
||||
const ClangDiagnosticConfigs previousConfigs = customDiagnosticConfigsFromSettings(s);
|
||||
const Core::Id previousConfigId = clangDiagnosticConfigIdFromSettings(s);
|
||||
|
||||
s->beginWriteArray(clangDiagnosticConfigsArrayKey());
|
||||
for (int i = 0, size = m_clangCustomDiagnosticConfigs.size(); i < size; ++i) {
|
||||
@@ -143,6 +161,15 @@ void CppCodeModelSettings::toSettings(QSettings *s)
|
||||
|
||||
s->endGroup();
|
||||
|
||||
QVector<Core::Id> invalidated
|
||||
= ClangDiagnosticConfigsModel::changedOrRemovedConfigs(previousConfigs,
|
||||
m_clangCustomDiagnosticConfigs);
|
||||
|
||||
if (previousConfigId != clangDiagnosticConfigId() && !invalidated.contains(previousConfigId))
|
||||
invalidated.append(previousConfigId);
|
||||
|
||||
if (!invalidated.isEmpty())
|
||||
emit clangDiagnosticConfigsInvalidated(invalidated);
|
||||
emit changed();
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,7 @@ public:
|
||||
void setClazyChecks(QString checks);
|
||||
|
||||
signals:
|
||||
void clangDiagnosticConfigsInvalidated(const QVector<Core::Id> &configId);
|
||||
void changed();
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user