diff options
Diffstat (limited to 'src/plugins/clangtools/clangtoolsprojectsettings.cpp')
-rw-r--r-- | src/plugins/clangtools/clangtoolsprojectsettings.cpp | 87 |
1 files changed, 54 insertions, 33 deletions
diff --git a/src/plugins/clangtools/clangtoolsprojectsettings.cpp b/src/plugins/clangtools/clangtoolsprojectsettings.cpp index 6c2597789d..005897b49c 100644 --- a/src/plugins/clangtools/clangtoolsprojectsettings.cpp +++ b/src/plugins/clangtools/clangtoolsprojectsettings.cpp @@ -34,8 +34,9 @@ namespace ClangTools { namespace Internal { +static const char SETTINGS_KEY_MAIN[] = "ClangTools"; +static const char SETTINGS_PREFIX[] = "ClangTools."; static const char SETTINGS_KEY_USE_GLOBAL_SETTINGS[] = "ClangTools.UseGlobalSettings"; -static const char SETTINGS_KEY_DIAGNOSTIC_CONFIG[] = "ClangTools.DiagnosticConfig"; 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"; @@ -78,22 +79,53 @@ void ClangToolsProjectSettings::removeAllSuppressedDiagnostics() emit suppressedDiagnosticsChanged(); } +static QVariantMap convertToMapFromVersionBefore410(ProjectExplorer::Project *p) +{ + // These keys haven't changed. + const QStringList keys = { + SETTINGS_KEY_SELECTED_DIRS, + SETTINGS_KEY_SELECTED_FILES, + SETTINGS_KEY_SUPPRESSED_DIAGS, + SETTINGS_KEY_USE_GLOBAL_SETTINGS, + "ClangTools.BuildBeforeAnalysis", + }; + + QVariantMap map; + for (const QString &key : keys) + map.insert(key, p->namedSettings(key)); + + map.insert(SETTINGS_PREFIX + QString(diagnosticConfigIdKey), + p->namedSettings("ClangTools.DiagnosticConfig")); + + return map; +} + void ClangToolsProjectSettings::load() { - const QVariant useGlobalVariant = m_project->namedSettings(SETTINGS_KEY_USE_GLOBAL_SETTINGS); - m_useGlobalSettings = useGlobalVariant.isValid() ? useGlobalVariant.toBool() : true; - m_diagnosticConfig = Core::Id::fromSetting( - m_project->namedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG)); + // Load map + QVariantMap map = m_project->namedSettings(SETTINGS_KEY_MAIN).toMap(); + + bool write; + if (map.isEmpty()) { + if (!m_project->namedSettings(SETTINGS_KEY_SELECTED_DIRS).isNull()) { + map = convertToMapFromVersionBefore410(m_project); + write = true; + } else { + return; // Use defaults + } + } - auto toFileName = [](const QString &s) { return Utils::FilePath::fromString(s); }; + // Read map + m_useGlobalSettings = map.value(SETTINGS_KEY_USE_GLOBAL_SETTINGS).toBool(); - const QStringList dirs = m_project->namedSettings(SETTINGS_KEY_SELECTED_DIRS).toStringList(); + auto toFileName = [](const QString &s) { return Utils::FilePath::fromString(s); }; + const QStringList dirs = map.value(SETTINGS_KEY_SELECTED_DIRS).toStringList(); m_selectedDirs = Utils::transform<QSet>(dirs, toFileName); - const QStringList files = m_project->namedSettings(SETTINGS_KEY_SELECTED_FILES).toStringList(); + const QStringList files = map.value(SETTINGS_KEY_SELECTED_FILES).toStringList(); m_selectedFiles = Utils::transform<QSet>(files, toFileName); - const QVariantList list = m_project->namedSettings(SETTINGS_KEY_SUPPRESSED_DIAGS).toList(); + const QVariantList list = map.value(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(); @@ -113,48 +145,37 @@ void ClangToolsProjectSettings::load() uniquifier); } emit suppressedDiagnosticsChanged(); + + m_runSettings.fromMap(map, SETTINGS_PREFIX); + + if (write) + store(); // Store new settings format } void ClangToolsProjectSettings::store() { - m_project->setNamedSettings(SETTINGS_KEY_USE_GLOBAL_SETTINGS, m_useGlobalSettings); - m_project->setNamedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG, m_diagnosticConfig.toSetting()); + QVariantMap map; + map.insert(SETTINGS_KEY_USE_GLOBAL_SETTINGS, m_useGlobalSettings); const QStringList dirs = Utils::transform<QList>(m_selectedDirs, &Utils::FilePath::toString); - m_project->setNamedSettings(SETTINGS_KEY_SELECTED_DIRS, dirs); + map.insert(SETTINGS_KEY_SELECTED_DIRS, dirs); const QStringList files = Utils::transform<QList>(m_selectedFiles, &Utils::FilePath::toString); - m_project->setNamedSettings(SETTINGS_KEY_SELECTED_FILES, files); + map.insert(SETTINGS_KEY_SELECTED_FILES, files); QVariantList list; - foreach (const SuppressedDiagnostic &diag, m_suppressedDiagnostics) { + for (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_UNIQIFIER, diag.uniquifier); list << diagMap; } - m_project->setNamedSettings(SETTINGS_KEY_SUPPRESSED_DIAGS, list); -} + map.insert(SETTINGS_KEY_SUPPRESSED_DIAGS, list); -bool ClangToolsProjectSettings::useGlobalSettings() const -{ - return m_useGlobalSettings; -} - -void ClangToolsProjectSettings::setUseGlobalSettings(bool useGlobalSettings) -{ - m_useGlobalSettings = useGlobalSettings; -} + m_runSettings.toMap(map, SETTINGS_PREFIX); -Core::Id ClangToolsProjectSettings::diagnosticConfig() const -{ - return m_diagnosticConfig; -} - -void ClangToolsProjectSettings::setDiagnosticConfig(const Core::Id &diagnosticConfig) -{ - m_diagnosticConfig = diagnosticConfig; + m_project->setNamedSettings(SETTINGS_KEY_MAIN, map); } ClangToolsProjectSettingsManager::ClangToolsProjectSettingsManager() |