diff options
| author | Christian Stenger <[email protected]> | 2024-07-01 13:56:25 +0200 |
|---|---|---|
| committer | Christian Stenger <[email protected]> | 2024-07-02 05:33:35 +0000 |
| commit | 6d4e5a0002ff535380a3a5100c2ab294521ef5d2 (patch) | |
| tree | 856d713f7451fae3434e792a216b2ce32c964652 /src/plugins/cppcheck/cppcheckplugin.cpp | |
| parent | 6cb0c69c436e5bd9a831297f838b3777dde24b84 (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.cpp | 57 |
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 |
