aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-01-13 17:38:33 +0100
committerhjk <hjk@qt.io>2020-01-14 14:04:36 +0000
commit82265d51a7227f3a4d2b31dcf9987a3e8a0b16dc (patch)
tree71aeb6645cdd330c9e5a9b06c7cd38a81f367b1d /src/plugins
parent5a4b0b565a0996b3b0955aea088521dce1b73842 (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.cpp4
-rw-r--r--src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp6
-rw-r--r--src/plugins/clangtools/clangtoolsdiagnosticview.cpp2
-rw-r--r--src/plugins/clangtools/clangtoolsplugin.cpp1
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettings.cpp30
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettings.h19
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp4
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettingswidget.h2
-rw-r--r--src/plugins/projectexplorer/project.cpp12
-rw-r--r--src/plugins/projectexplorer/project.h3
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);