diff options
author | hjk <hjk@qt.io> | 2020-01-13 17:38:33 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-01-14 14:04:36 +0000 |
commit | 82265d51a7227f3a4d2b31dcf9987a3e8a0b16dc (patch) | |
tree | 71aeb6645cdd330c9e5a9b06c7cd38a81f367b1d /src/plugins | |
parent | 5a4b0b565a0996b3b0955aea088521dce1b73842 (diff) |
ClangTools: Attach ClangToolsProjectSettings data to project itself
Easier to reason about life time.
Change-Id: I2c61527532f6faa344fc59d858921e66daaf0b7e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/clangtools/clangtool.cpp | 4 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp | 6 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsdiagnosticview.cpp | 2 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsplugin.cpp | 1 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsprojectsettings.cpp | 30 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsprojectsettings.h | 19 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp | 4 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsprojectsettingswidget.h | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/project.cpp | 12 | ||||
-rw-r--r-- | src/plugins/projectexplorer/project.h | 3 |
10 files changed, 39 insertions, 44 deletions
diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index fc8c32e069..a64ec2ea98 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -360,7 +360,7 @@ static FileInfos sortedFileInfos(const QVector<CppTools::ProjectPart::Ptr> &proj static RunSettings runSettings() { if (Project *project = SessionManager::startupProject()) { - auto *projectSettings = ClangToolsProjectSettingsManager::getSettings(project); + const auto projectSettings = ClangToolsProjectSettings::getSettings(project); if (!projectSettings->useGlobalSettings()) return projectSettings->runSettings(); } @@ -1075,7 +1075,7 @@ static FileInfos fileInfosMatchingEditedDocuments(const FileInfos &fileInfos) FileInfoProviders ClangTool::fileInfoProviders(ProjectExplorer::Project *project, const FileInfos &allFileInfos) { - ClangToolsProjectSettings *s = ClangToolsProjectSettingsManager::getSettings(project); + const QSharedPointer<ClangToolsProjectSettings> s = ClangToolsProjectSettings::getSettings(project); static FileInfoSelection openedFilesSelection; static FileInfoSelection editeddFilesSelection; diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp index c7e96b382d..b04db2da3b 100644 --- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp +++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp @@ -591,13 +591,13 @@ void DiagnosticFilterModel::setProject(ProjectExplorer::Project *project) { QTC_ASSERT(project, return); if (m_project) { - disconnect(ClangToolsProjectSettingsManager::getSettings(m_project), + disconnect(ClangToolsProjectSettings::getSettings(m_project).data(), &ClangToolsProjectSettings::suppressedDiagnosticsChanged, this, &DiagnosticFilterModel::handleSuppressedDiagnosticsChanged); } m_project = project; m_lastProjectDirectory = m_project->projectDirectory(); - connect(ClangToolsProjectSettingsManager::getSettings(m_project), + connect(ClangToolsProjectSettings::getSettings(m_project).data(), &ClangToolsProjectSettings::suppressedDiagnosticsChanged, this, &DiagnosticFilterModel::handleSuppressedDiagnosticsChanged); handleSuppressedDiagnosticsChanged(); @@ -755,7 +755,7 @@ void DiagnosticFilterModel::handleSuppressedDiagnosticsChanged() { QTC_ASSERT(m_project, return); m_suppressedDiagnostics - = ClangToolsProjectSettingsManager::getSettings(m_project)->suppressedDiagnostics(); + = ClangToolsProjectSettings::getSettings(m_project)->suppressedDiagnostics(); invalidate(); } diff --git a/src/plugins/clangtools/clangtoolsdiagnosticview.cpp b/src/plugins/clangtools/clangtoolsdiagnosticview.cpp index cf88a37c62..9e6f9d4b92 100644 --- a/src/plugins/clangtools/clangtoolsdiagnosticview.cpp +++ b/src/plugins/clangtools/clangtoolsdiagnosticview.cpp @@ -210,7 +210,7 @@ void DiagnosticView::suppressCurrentDiagnostic() if (!relativeFilePath.isEmpty()) filePath = relativeFilePath; const SuppressedDiagnostic supDiag(filePath, diag.description, diag.explainingSteps.count()); - ClangToolsProjectSettingsManager::getSettings(project)->addSuppressedDiagnostic(supDiag); + ClangToolsProjectSettings::getSettings(project)->addSuppressedDiagnostic(supDiag); } else { filterModel->addSuppressedDiagnostic(SuppressedDiagnostic(diag)); } diff --git a/src/plugins/clangtools/clangtoolsplugin.cpp b/src/plugins/clangtools/clangtoolsplugin.cpp index e9e04e8eb3..ebc85223f4 100644 --- a/src/plugins/clangtools/clangtoolsplugin.cpp +++ b/src/plugins/clangtools/clangtoolsplugin.cpp @@ -95,7 +95,6 @@ class ClangToolsPluginPrivate public: ClangTool clangTool; ClangToolsOptionsPage optionsPage; - ClangToolsProjectSettingsManager settingsManager; }; ClangToolsPlugin::~ClangToolsPlugin() diff --git a/src/plugins/clangtools/clangtoolsprojectsettings.cpp b/src/plugins/clangtools/clangtoolsprojectsettings.cpp index c7d692704e..e83c3b36f1 100644 --- a/src/plugins/clangtools/clangtoolsprojectsettings.cpp +++ b/src/plugins/clangtools/clangtoolsprojectsettings.cpp @@ -178,29 +178,19 @@ void ClangToolsProjectSettings::store() m_project->setNamedSettings(SETTINGS_KEY_MAIN, map); } -ClangToolsProjectSettingsManager::ClangToolsProjectSettingsManager() +ClangToolsProjectSettings::ClangToolsProjectSettingsPtr + ClangToolsProjectSettings::getSettings(ProjectExplorer::Project *project) { - QObject::connect(ProjectExplorer::SessionManager::instance(), - &ProjectExplorer::SessionManager::aboutToRemoveProject, - &ClangToolsProjectSettingsManager::handleProjectToBeRemoved); -} - -ClangToolsProjectSettings *ClangToolsProjectSettingsManager::getSettings( - ProjectExplorer::Project *project) -{ - auto &settings = m_settings[project]; - if (!settings) - settings.reset(new ClangToolsProjectSettings(project)); - return settings.data(); -} - -void ClangToolsProjectSettingsManager::handleProjectToBeRemoved(ProjectExplorer::Project *project) -{ - m_settings.remove(project); + const QString key = "ClangToolsProjectSettings"; + QVariant v = project->extraData(key); + if (v.isNull()) { + v = QVariant::fromValue( + ClangToolsProjectSettingsPtr{new ClangToolsProjectSettings(project)}); + project->setExtraData(key, v); + } + return v.value<QSharedPointer<ClangToolsProjectSettings>>(); } -ClangToolsProjectSettingsManager::SettingsMap ClangToolsProjectSettingsManager::m_settings; - SuppressedDiagnostic::SuppressedDiagnostic(const Diagnostic &diag) : filePath(Utils::FilePath::fromString(diag.location.filePath)) , description(diag.description) diff --git a/src/plugins/clangtools/clangtoolsprojectsettings.h b/src/plugins/clangtools/clangtoolsprojectsettings.h index aaf045f056..1b872c3c31 100644 --- a/src/plugins/clangtools/clangtoolsprojectsettings.h +++ b/src/plugins/clangtools/clangtoolsprojectsettings.h @@ -87,6 +87,9 @@ public: void removeSuppressedDiagnostic(const SuppressedDiagnostic &diag); void removeAllSuppressedDiagnostics(); + using ClangToolsProjectSettingsPtr = QSharedPointer<ClangToolsProjectSettings>; + static ClangToolsProjectSettingsPtr getSettings(ProjectExplorer::Project *project); + signals: void suppressedDiagnosticsChanged(); @@ -106,19 +109,7 @@ private: SuppressedDiagnosticsList m_suppressedDiagnostics; }; -class ClangToolsProjectSettingsManager -{ -public: - ClangToolsProjectSettingsManager(); - - static ClangToolsProjectSettings *getSettings(ProjectExplorer::Project *project); - -private: - static void handleProjectToBeRemoved(ProjectExplorer::Project *project); - - using SettingsMap = QHash<ProjectExplorer::Project *, QSharedPointer<ClangToolsProjectSettings>>; - static SettingsMap m_settings; -}; - } // namespace Internal } // namespace ClangTools + +Q_DECLARE_METATYPE(QSharedPointer<ClangTools::Internal::ClangToolsProjectSettings>) diff --git a/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp b/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp index b7a8c14a42..0e88791c42 100644 --- a/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp +++ b/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp @@ -70,7 +70,7 @@ enum { UseGlobalSettings, UseCustomSettings }; // Values in sync with m_ui->glob ProjectSettingsWidget::ProjectSettingsWidget(ProjectExplorer::Project *project, QWidget *parent) : QWidget(parent), m_ui(new Ui::ProjectSettingsWidget) - , m_projectSettings(ClangToolsProjectSettingsManager::getSettings(project)) + , m_projectSettings(ClangToolsProjectSettings::getSettings(project)) { m_ui->setupUi(this); @@ -117,7 +117,7 @@ ProjectSettingsWidget::ProjectSettingsWidget(ProjectExplorer::Project *project, // Suppressed diagnostics auto * const model = new SuppressedDiagnosticsModel(this); model->setDiagnostics(m_projectSettings->suppressedDiagnostics()); - connect(m_projectSettings, &ClangToolsProjectSettings::suppressedDiagnosticsChanged, + connect(m_projectSettings.data(), &ClangToolsProjectSettings::suppressedDiagnosticsChanged, [model, this] { model->setDiagnostics(m_projectSettings->suppressedDiagnostics()); updateButtonStates(); diff --git a/src/plugins/clangtools/clangtoolsprojectsettingswidget.h b/src/plugins/clangtools/clangtoolsprojectsettingswidget.h index b26fee90e3..a5b0a6267d 100644 --- a/src/plugins/clangtools/clangtoolsprojectsettingswidget.h +++ b/src/plugins/clangtools/clangtoolsprojectsettingswidget.h @@ -53,7 +53,7 @@ private: void removeSelected(); Ui::ProjectSettingsWidget *const m_ui; - ClangToolsProjectSettings *const m_projectSettings; + QSharedPointer<ClangToolsProjectSettings> const m_projectSettings; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 99afeb3df0..c549b53e83 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -206,6 +206,8 @@ public: Utils::MacroExpander m_macroExpander; Utils::FilePath m_rootProjectDirectory; mutable QVector<const Node *> m_sortedNodeList; + + QVariantMap m_extraData; }; ProjectPrivate::~ProjectPrivate() @@ -990,6 +992,16 @@ void Project::setPreferredKitPredicate(const Kit::Predicate &predicate) d->m_preferredKitPredicate = predicate; } +void Project::setExtraData(const QString &key, const QVariant &data) +{ + d->m_extraData.insert(key, data); +} + +QVariant Project::extraData(const QString &key) const +{ + return d->m_extraData.value(key); +} + #if defined(WITH_TESTS) } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 4e1118ca92..bc2bee3b45 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -173,6 +173,9 @@ public: void setProjectLanguage(Core::Id id, bool enabled); void addProjectLanguage(Core::Id id); + void setExtraData(const QString &key, const QVariant &data); + QVariant extraData(const QString &key) const; + signals: void projectFileIsDirty(const Utils::FilePath &path); |