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 {
|
namespace Cppcheck::Internal {
|
||||||
|
|
||||||
ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project)
|
ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project,
|
||||||
|
CppcheckSettings *settings)
|
||||||
: m_model(new ProjectExplorer::SelectableFilesFromDirModel(this))
|
: m_model(new ProjectExplorer::SelectableFilesFromDirModel(this))
|
||||||
{
|
{
|
||||||
QTC_ASSERT(project, return );
|
QTC_ASSERT(project, return );
|
||||||
|
QTC_ASSERT(settings, return);
|
||||||
|
|
||||||
setWindowTitle(Tr::tr("Cppcheck Run Configuration"));
|
setWindowTitle(Tr::tr("Cppcheck Run Configuration"));
|
||||||
|
|
||||||
@@ -52,9 +54,7 @@ ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project)
|
|||||||
analyzeButton->setEnabled(m_model->hasCheckedFiles());
|
analyzeButton->setEnabled(m_model->hasCheckedFiles());
|
||||||
});
|
});
|
||||||
|
|
||||||
m_manualRunSettings.readSettings();
|
auto optionsWidget = settings->layouter()().emerge();
|
||||||
m_manualRunSettings.setAutoApply(true);
|
|
||||||
auto optionsWidget = m_manualRunSettings.layouter()().emerge();
|
|
||||||
|
|
||||||
auto layout = new QVBoxLayout(this);
|
auto layout = new QVBoxLayout(this);
|
||||||
layout->addWidget(optionsWidget);
|
layout->addWidget(optionsWidget);
|
||||||
|
@@ -3,8 +3,6 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "cppchecksettings.h"
|
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
@@ -19,18 +17,18 @@ class SelectableFilesFromDirModel;
|
|||||||
|
|
||||||
namespace Cppcheck::Internal {
|
namespace Cppcheck::Internal {
|
||||||
|
|
||||||
|
class CppcheckSettings;
|
||||||
|
|
||||||
class ManualRunDialog : public QDialog
|
class ManualRunDialog : public QDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit ManualRunDialog(const ProjectExplorer::Project *project);
|
explicit ManualRunDialog(const ProjectExplorer::Project *project, CppcheckSettings *settings);
|
||||||
|
|
||||||
Utils::FilePaths filePaths() const;
|
Utils::FilePaths filePaths() const;
|
||||||
QSize sizeHint() const override;
|
QSize sizeHint() const override;
|
||||||
|
|
||||||
const CppcheckSettings &manualRunSettings() const { return m_manualRunSettings; }
|
|
||||||
private:
|
private:
|
||||||
ProjectExplorer::SelectableFilesFromDirModel *m_model;
|
ProjectExplorer::SelectableFilesFromDirModel *m_model;
|
||||||
CppcheckSettings m_manualRunSettings;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Cppcheck::Internal
|
} // Cppcheck::Internal
|
||||||
|
@@ -40,6 +40,7 @@ class CppcheckPluginPrivate final : public QObject
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit CppcheckPluginPrivate();
|
explicit CppcheckPluginPrivate();
|
||||||
|
~CppcheckPluginPrivate();
|
||||||
|
|
||||||
CppcheckTextMarkManager marks;
|
CppcheckTextMarkManager marks;
|
||||||
CppcheckTool tool{marks, Constants::CHECK_PROGRESS_ID};
|
CppcheckTool tool{marks, Constants::CHECK_PROGRESS_ID};
|
||||||
@@ -49,9 +50,12 @@ public:
|
|||||||
Utils::Perspective perspective{Constants::PERSPECTIVE_ID, ::Cppcheck::Tr::tr("Cppcheck")};
|
Utils::Perspective perspective{Constants::PERSPECTIVE_ID, ::Cppcheck::Tr::tr("Cppcheck")};
|
||||||
|
|
||||||
Action *manualRunAction = nullptr;
|
Action *manualRunAction = nullptr;
|
||||||
|
QHash<Project *, CppcheckSettings *> projectSettings;
|
||||||
|
|
||||||
void startManualRun();
|
void startManualRun();
|
||||||
void updateManualRunAction();
|
void updateManualRunAction();
|
||||||
|
void saveProjectSettings(Project *project);
|
||||||
|
void loadProjectSettings(Project *project);
|
||||||
};
|
};
|
||||||
|
|
||||||
CppcheckPluginPrivate::CppcheckPluginPrivate()
|
CppcheckPluginPrivate::CppcheckPluginPrivate()
|
||||||
@@ -104,6 +108,29 @@ CppcheckPluginPrivate::CppcheckPluginPrivate()
|
|||||||
action, &QAction::setEnabled);
|
action, &QAction::setEnabled);
|
||||||
perspective.addToolBarAction(action);
|
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()
|
void CppcheckPluginPrivate::startManualRun()
|
||||||
@@ -112,7 +139,9 @@ void CppcheckPluginPrivate::startManualRun()
|
|||||||
if (!project)
|
if (!project)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ManualRunDialog dialog(project);
|
CppcheckSettings *settings = projectSettings.value(project, nullptr);
|
||||||
|
QTC_ASSERT(settings, return);
|
||||||
|
ManualRunDialog dialog(project, settings);
|
||||||
if (dialog.exec() == ManualRunDialog::Rejected)
|
if (dialog.exec() == ManualRunDialog::Rejected)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -123,7 +152,7 @@ void CppcheckPluginPrivate::startManualRun()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
manualRunTool.setProject(project);
|
manualRunTool.setProject(project);
|
||||||
manualRunTool.updateOptions(dialog.manualRunSettings());
|
manualRunTool.updateOptions(*settings);
|
||||||
manualRunTool.check(files);
|
manualRunTool.check(files);
|
||||||
perspective.select();
|
perspective.select();
|
||||||
}
|
}
|
||||||
@@ -138,6 +167,30 @@ void CppcheckPluginPrivate::updateManualRunAction()
|
|||||||
manualRunAction->setEnabled(canRun);
|
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
|
class CppcheckPlugin final : public ExtensionSystem::IPlugin
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Reference in New Issue
Block a user