aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppcheck/cppcheckplugin.cpp
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/cppcheckplugin.cpp
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/cppcheckplugin.cpp')
-rw-r--r--src/plugins/cppcheck/cppcheckplugin.cpp57
1 files changed, 55 insertions, 2 deletions
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