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 <hjk@qt.io>
This commit is contained in:
Christian Stenger
2024-07-01 13:56:25 +02:00
parent 6cb0c69c43
commit 6d4e5a0002
3 changed files with 62 additions and 11 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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