forked from qt-creator/qt-creator
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:
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user