aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppcheck
diff options
context:
space:
mode:
authorChristian Stenger <[email protected]>2024-07-01 13:56:25 +0200
committerChristian Stenger <[email protected]>2024-07-02 05:33:35 +0000
commit6d4e5a0002ff535380a3a5100c2ab294521ef5d2 (patch)
tree856d713f7451fae3434e792a216b2ce32c964652 /src/plugins/cppcheck
parent6cb0c69c436e5bd9a831297f838b3777dde24b84 (diff)
Cppcheck: Treat manual run settings as project settings
Instead of always deriving from global settings store the settings for the manual run into the project settings. Fixes: QTCREATORBUG-31092 Change-Id: I7854cff4e71b58225c7e9c1198c4e60128ed07e4 Reviewed-by: hjk <[email protected]>
Diffstat (limited to 'src/plugins/cppcheck')
-rw-r--r--src/plugins/cppcheck/cppcheckmanualrundialog.cpp8
-rw-r--r--src/plugins/cppcheck/cppcheckmanualrundialog.h8
-rw-r--r--src/plugins/cppcheck/cppcheckplugin.cpp57
3 files changed, 62 insertions, 11 deletions
diff --git a/src/plugins/cppcheck/cppcheckmanualrundialog.cpp b/src/plugins/cppcheck/cppcheckmanualrundialog.cpp
index f5d5f687581..9ba540f50fd 100644
--- a/src/plugins/cppcheck/cppcheckmanualrundialog.cpp
+++ b/src/plugins/cppcheck/cppcheckmanualrundialog.cpp
@@ -19,10 +19,12 @@
namespace Cppcheck::Internal {
-ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project)
+ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project,
+ CppcheckSettings *settings)
: m_model(new ProjectExplorer::SelectableFilesFromDirModel(this))
{
QTC_ASSERT(project, return );
+ QTC_ASSERT(settings, return);
setWindowTitle(Tr::tr("Cppcheck Run Configuration"));
@@ -52,9 +54,7 @@ ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project)
analyzeButton->setEnabled(m_model->hasCheckedFiles());
});
- m_manualRunSettings.readSettings();
- m_manualRunSettings.setAutoApply(true);
- auto optionsWidget = m_manualRunSettings.layouter()().emerge();
+ auto optionsWidget = settings->layouter()().emerge();
auto layout = new QVBoxLayout(this);
layout->addWidget(optionsWidget);
diff --git a/src/plugins/cppcheck/cppcheckmanualrundialog.h b/src/plugins/cppcheck/cppcheckmanualrundialog.h
index fe5b920ee23..1f9c91e576a 100644
--- a/src/plugins/cppcheck/cppcheckmanualrundialog.h
+++ b/src/plugins/cppcheck/cppcheckmanualrundialog.h
@@ -3,8 +3,6 @@
#pragma once
-#include "cppchecksettings.h"
-
#include <QDialog>
namespace Utils {
@@ -19,18 +17,18 @@ class SelectableFilesFromDirModel;
namespace Cppcheck::Internal {
+class CppcheckSettings;
+
class ManualRunDialog : public QDialog
{
public:
- explicit ManualRunDialog(const ProjectExplorer::Project *project);
+ explicit ManualRunDialog(const ProjectExplorer::Project *project, CppcheckSettings *settings);
Utils::FilePaths filePaths() const;
QSize sizeHint() const override;
- const CppcheckSettings &manualRunSettings() const { return m_manualRunSettings; }
private:
ProjectExplorer::SelectableFilesFromDirModel *m_model;
- CppcheckSettings m_manualRunSettings;
};
} // Cppcheck::Internal
diff --git a/src/plugins/cppcheck/cppcheckplugin.cpp b/src/plugins/cppcheck/cppcheckplugin.cpp
index 5bc99e54efb..341b25db029 100644
--- a/src/plugins/cppcheck/cppcheckplugin.cpp
+++ b/src/plugins/cppcheck/cppcheckplugin.cpp
@@ -40,6 +40,7 @@ class CppcheckPluginPrivate final : public QObject
{
public:
explicit CppcheckPluginPrivate();
+ ~CppcheckPluginPrivate();
CppcheckTextMarkManager marks;
CppcheckTool tool{marks, Constants::CHECK_PROGRESS_ID};
@@ -49,9 +50,12 @@ public:
Utils::Perspective perspective{Constants::PERSPECTIVE_ID, ::Cppcheck::Tr::tr("Cppcheck")};
Action *manualRunAction = nullptr;
+ QHash<Project *, CppcheckSettings *> projectSettings;
void startManualRun();
void updateManualRunAction();
+ void saveProjectSettings(Project *project);
+ void loadProjectSettings(Project *project);
};
CppcheckPluginPrivate::CppcheckPluginPrivate()
@@ -104,6 +108,29 @@ CppcheckPluginPrivate::CppcheckPluginPrivate()
action, &QAction::setEnabled);
perspective.addToolBarAction(action);
}
+ connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged,
+ this, [this](Project *project) {
+ if (!project)
+ return;
+ CppcheckSettings *settings = projectSettings.value(project, nullptr);
+ if (!settings) {
+ settings = new CppcheckSettings;
+ settings->readSettings();
+ settings->setAutoApply(true);
+ connect(project, &Project::aboutToSaveSettings,
+ this, [this, project]{ saveProjectSettings(project); });
+ connect(project, &Project::settingsLoaded,
+ this, [this, project]{ loadProjectSettings(project); });
+ projectSettings.insert(project, settings);
+ loadProjectSettings(project);
+ }
+ });
+}
+
+CppcheckPluginPrivate::~CppcheckPluginPrivate()
+{
+ qDeleteAll(projectSettings);
+ projectSettings.clear();
}
void CppcheckPluginPrivate::startManualRun()
@@ -112,7 +139,9 @@ void CppcheckPluginPrivate::startManualRun()
if (!project)
return;
- ManualRunDialog dialog(project);
+ CppcheckSettings *settings = projectSettings.value(project, nullptr);
+ QTC_ASSERT(settings, return);
+ ManualRunDialog dialog(project, settings);
if (dialog.exec() == ManualRunDialog::Rejected)
return;
@@ -123,7 +152,7 @@ void CppcheckPluginPrivate::startManualRun()
return;
manualRunTool.setProject(project);
- manualRunTool.updateOptions(dialog.manualRunSettings());
+ manualRunTool.updateOptions(*settings);
manualRunTool.check(files);
perspective.select();
}
@@ -138,6 +167,30 @@ void CppcheckPluginPrivate::updateManualRunAction()
manualRunAction->setEnabled(canRun);
}
+void CppcheckPluginPrivate::saveProjectSettings(Project *project)
+{
+ QTC_ASSERT(project, return);
+ CppcheckSettings *settings = projectSettings.value(project, nullptr);
+ QTC_ASSERT(settings, return);
+
+ Store store;
+ settings->toMap(store);
+ project->setNamedSettings("CppcheckManual", Utils::variantFromStore(store));
+}
+
+void CppcheckPluginPrivate::loadProjectSettings(Project *project)
+{
+ QTC_ASSERT(project, return);
+ CppcheckSettings *settings = projectSettings.value(project, nullptr);
+ QTC_ASSERT(settings, return);
+
+ const QVariant variant = project->namedSettings("CppcheckManual");
+ if (!variant.isValid())
+ return;
+ Store store = Utils::storeFromVariant(project->namedSettings("CppcheckManual"));
+ settings->fromMap(store);
+}
+
class CppcheckPlugin final : public ExtensionSystem::IPlugin
{
Q_OBJECT