forked from qt-creator/qt-creator
CppEditor: Simplify CppCodeModelSettings
We don't need the QObject wrapper. Change-Id: Ief0e1314db40cb403c56fe0e660c5dffa326f83c Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -24,7 +24,7 @@ public:
|
|||||||
CppEditor::ProjectPart::ConstPtr projectPart)
|
CppEditor::ProjectPart::ConstPtr projectPart)
|
||||||
: file(std::move(file))
|
: file(std::move(file))
|
||||||
, kind(kind)
|
, kind(kind)
|
||||||
, settings(settings.data())
|
, settings(settings)
|
||||||
, projectPart(projectPart)
|
, projectPart(projectPart)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ public:
|
|||||||
|
|
||||||
Utils::FilePath file;
|
Utils::FilePath file;
|
||||||
CppEditor::ProjectFile::Kind kind;
|
CppEditor::ProjectFile::Kind kind;
|
||||||
CppEditor::CppCodeModelSettings::Data settings;
|
CppEditor::CppCodeModelSettings settings;
|
||||||
CppEditor::ProjectPart::ConstPtr projectPart;
|
CppEditor::ProjectPart::ConstPtr projectPart;
|
||||||
};
|
};
|
||||||
using FileInfos = std::vector<FileInfo>;
|
using FileInfos = std::vector<FileInfo>;
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ BaseEditorDocumentProcessor::~BaseEditorDocumentProcessor() = default;
|
|||||||
void BaseEditorDocumentProcessor::run(bool projectsUpdated)
|
void BaseEditorDocumentProcessor::run(bool projectsUpdated)
|
||||||
{
|
{
|
||||||
if (projectsUpdated)
|
if (projectsUpdated)
|
||||||
m_settings.setData(CppCodeModelSettings::settingsForFile(m_filePath).data());
|
m_settings = CppCodeModelSettings::settingsForFile(m_filePath);
|
||||||
|
|
||||||
const Utils::Language languagePreference
|
const Utils::Language languagePreference
|
||||||
= m_settings.interpretAmbigiousHeadersAsC() ? Utils::Language::C : Utils::Language::Cxx;
|
= m_settings.interpretAmbigiousHeadersAsC ? Utils::Language::C : Utils::Language::Cxx;
|
||||||
|
|
||||||
runImpl({CppModelManager::workingCopy(),
|
runImpl({CppModelManager::workingCopy(),
|
||||||
ProjectExplorer::ProjectManager::startupProject(),
|
ProjectExplorer::ProjectManager::startupProject(),
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(TextEditor::TextD
|
|||||||
using namespace Internal;
|
using namespace Internal;
|
||||||
|
|
||||||
BaseEditorDocumentParser::Configuration config = m_parser->configuration();
|
BaseEditorDocumentParser::Configuration config = m_parser->configuration();
|
||||||
config.usePrecompiledHeaders = settings().pchUsage() != CppCodeModelSettings::PchUse_None;
|
config.usePrecompiledHeaders = settings().pchUsage != CppCodeModelSettings::PchUse_None;
|
||||||
m_parser->setConfiguration(config);
|
m_parser->setConfiguration(config);
|
||||||
|
|
||||||
m_semanticHighlighter->setHighlightingRunner(
|
m_semanticHighlighter->setHighlightingRunner(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "compileroptionsbuilder.h"
|
#include "compileroptionsbuilder.h"
|
||||||
#include "cppeditorconstants.h"
|
#include "cppeditorconstants.h"
|
||||||
#include "cppeditortr.h"
|
#include "cppeditortr.h"
|
||||||
|
#include "cppmodelmanager.h"
|
||||||
|
|
||||||
#include <coreplugin/dialogs/ioptionspage.h>
|
#include <coreplugin/dialogs/ioptionspage.h>
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
@@ -49,19 +50,19 @@ static Key useBuiltinPreprocessorKey() { return Constants::CPPEDITOR_USE_BUILTIN
|
|||||||
static Key indexerFileSizeLimitKey() { return Constants::CPPEDITOR_INDEXER_FILE_SIZE_LIMIT; }
|
static Key indexerFileSizeLimitKey() { return Constants::CPPEDITOR_INDEXER_FILE_SIZE_LIMIT; }
|
||||||
static Key useGlobalSettingsKey() { return "useGlobalSettings"; }
|
static Key useGlobalSettingsKey() { return "useGlobalSettings"; }
|
||||||
|
|
||||||
bool operator==(const CppEditor::CppCodeModelSettings::Data &s1,
|
bool operator==(const CppEditor::CppCodeModelSettings &s1,
|
||||||
const CppEditor::CppCodeModelSettings::Data &s2)
|
const CppEditor::CppCodeModelSettings &s2)
|
||||||
{
|
{
|
||||||
return s1.pchUsage == s2.pchUsage
|
return s1.pchUsage == s2.pchUsage
|
||||||
&& s1.interpretAmbigiousHeadersAsC == s2.interpretAmbigiousHeadersAsC
|
&& s1.interpretAmbigiousHeadersAsC == s2.interpretAmbigiousHeadersAsC
|
||||||
&& s1.skipIndexingBigFiles == s2.skipIndexingBigFiles
|
&& s1.skipIndexingBigFiles == s2.skipIndexingBigFiles
|
||||||
&& s1.useBuiltinPreprocessor == s2.useBuiltinPreprocessor
|
&& s1.useBuiltinPreprocessor == s2.useBuiltinPreprocessor
|
||||||
&& s1.indexerFileSizeLimitInMb == s2.indexerFileSizeLimitInMb
|
&& s1.indexerFileSizeLimitInMb == s2.indexerFileSizeLimitInMb
|
||||||
&& s1.categorizeFindReferences == s2.categorizeFindReferences
|
&& s1.m_categorizeFindReferences == s2.m_categorizeFindReferences
|
||||||
&& s1.ignoreFiles == s2.ignoreFiles && s1.ignorePattern == s2.ignorePattern;
|
&& s1.ignoreFiles == s2.ignoreFiles && s1.ignorePattern == s2.ignorePattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
Store CppCodeModelSettings::Data::toMap() const
|
Store CppCodeModelSettings::toMap() const
|
||||||
{
|
{
|
||||||
Store store;
|
Store store;
|
||||||
store.insert(pchUsageKey(), pchUsage);
|
store.insert(pchUsageKey(), pchUsage);
|
||||||
@@ -74,15 +75,15 @@ Store CppCodeModelSettings::Data::toMap() const
|
|||||||
return store;
|
return store;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppCodeModelSettings::Data::fromMap(const Utils::Store &store)
|
void CppCodeModelSettings::fromMap(const Utils::Store &store)
|
||||||
{
|
{
|
||||||
const CppCodeModelSettings::Data def;
|
const CppCodeModelSettings def;
|
||||||
pchUsage = static_cast<PCHUsage>(store.value(pchUsageKey(), def.pchUsage).toInt());
|
pchUsage = static_cast<PCHUsage>(store.value(pchUsageKey(), def.pchUsage).toInt());
|
||||||
interpretAmbigiousHeadersAsC = store
|
interpretAmbigiousHeadersAsC
|
||||||
.value(interpretAmbiguousHeadersAsCHeadersKey(),
|
= store.value(interpretAmbiguousHeadersAsCHeadersKey(), def.interpretAmbigiousHeadersAsC)
|
||||||
def.interpretAmbigiousHeadersAsC)
|
.toBool();
|
||||||
.toBool();
|
skipIndexingBigFiles
|
||||||
skipIndexingBigFiles = store.value(skipIndexingBigFilesKey(), def.skipIndexingBigFiles).toBool();
|
= store.value(skipIndexingBigFilesKey(), def.skipIndexingBigFiles).toBool();
|
||||||
ignoreFiles = store.value(ignoreFilesKey(), def.ignoreFiles).toBool();
|
ignoreFiles = store.value(ignoreFilesKey(), def.ignoreFiles).toBool();
|
||||||
ignorePattern = store.value(ignorePatternKey(), def.ignorePattern).toString();
|
ignorePattern = store.value(ignorePatternKey(), def.ignorePattern).toString();
|
||||||
useBuiltinPreprocessor
|
useBuiltinPreprocessor
|
||||||
@@ -93,12 +94,13 @@ void CppCodeModelSettings::Data::fromMap(const Utils::Store &store)
|
|||||||
|
|
||||||
void CppCodeModelSettings::fromSettings(QtcSettings *s)
|
void CppCodeModelSettings::fromSettings(QtcSettings *s)
|
||||||
{
|
{
|
||||||
m_data.fromMap(storeFromSettings(Constants::CPPEDITOR_SETTINGSGROUP, s));
|
fromMap(storeFromSettings(Constants::CPPEDITOR_SETTINGSGROUP, s));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppCodeModelSettings::toSettings(QtcSettings *s)
|
void CppCodeModelSettings::toSettings(QtcSettings *s)
|
||||||
{
|
{
|
||||||
storeToSettingsWithDefault(Constants::CPPEDITOR_SETTINGSGROUP, s, m_data.toMap(), Data().toMap());
|
storeToSettingsWithDefault(
|
||||||
|
Constants::CPPEDITOR_SETTINGSGROUP, s, toMap(), CppCodeModelSettings().toMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
CppCodeModelSettings &CppCodeModelSettings::globalInstance()
|
CppCodeModelSettings &CppCodeModelSettings::globalInstance()
|
||||||
@@ -109,7 +111,7 @@ CppCodeModelSettings &CppCodeModelSettings::globalInstance()
|
|||||||
|
|
||||||
CppCodeModelSettings CppCodeModelSettings::settingsForProject(const ProjectExplorer::Project *project)
|
CppCodeModelSettings CppCodeModelSettings::settingsForProject(const ProjectExplorer::Project *project)
|
||||||
{
|
{
|
||||||
return {CppCodeModelProjectSettings(const_cast<ProjectExplorer::Project *>(project)).data()};
|
return {CppCodeModelProjectSettings(const_cast<ProjectExplorer::Project *>(project)).settings()};
|
||||||
}
|
}
|
||||||
|
|
||||||
CppCodeModelSettings CppCodeModelSettings::settingsForProject(const Utils::FilePath &projectFile)
|
CppCodeModelSettings CppCodeModelSettings::settingsForProject(const Utils::FilePath &projectFile)
|
||||||
@@ -122,25 +124,25 @@ CppCodeModelSettings CppCodeModelSettings::settingsForFile(const Utils::FilePath
|
|||||||
return settingsForProject(ProjectManager::projectForFile(file));
|
return settingsForProject(ProjectManager::projectForFile(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppCodeModelSettings::setGlobalData(const Data &data)
|
void CppCodeModelSettings::setGlobal(const CppCodeModelSettings &settings)
|
||||||
{
|
{
|
||||||
if (globalInstance().m_data == data)
|
if (globalInstance() == settings)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
globalInstance().m_data = data;
|
globalInstance() = settings;
|
||||||
globalInstance().toSettings(Core::ICore::settings());
|
globalInstance().toSettings(Core::ICore::settings());
|
||||||
emit globalInstance().changed(nullptr);
|
CppModelManager::handleSettingsChange(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
CppCodeModelSettings::PCHUsage CppCodeModelSettings::pchUsage(const Project *project)
|
CppCodeModelSettings::PCHUsage CppCodeModelSettings::pchUsageForProject(const Project *project)
|
||||||
{
|
{
|
||||||
return CppCodeModelSettings::settingsForProject(project).pchUsage();
|
return CppCodeModelSettings::settingsForProject(project).pchUsage;
|
||||||
}
|
}
|
||||||
|
|
||||||
UsePrecompiledHeaders CppCodeModelSettings::usePrecompiledHeaders() const
|
UsePrecompiledHeaders CppCodeModelSettings::usePrecompiledHeaders() const
|
||||||
{
|
{
|
||||||
return pchUsage() == CppCodeModelSettings::PchUse_None ? UsePrecompiledHeaders::No
|
return pchUsage == CppCodeModelSettings::PchUse_None ? UsePrecompiledHeaders::No
|
||||||
: UsePrecompiledHeaders::Yes;
|
: UsePrecompiledHeaders::Yes;
|
||||||
}
|
}
|
||||||
|
|
||||||
UsePrecompiledHeaders CppCodeModelSettings::usePrecompiledHeaders(const Project *project)
|
UsePrecompiledHeaders CppCodeModelSettings::usePrecompiledHeaders(const Project *project)
|
||||||
@@ -150,17 +152,17 @@ UsePrecompiledHeaders CppCodeModelSettings::usePrecompiledHeaders(const Project
|
|||||||
|
|
||||||
int CppCodeModelSettings::effectiveIndexerFileSizeLimitInMb() const
|
int CppCodeModelSettings::effectiveIndexerFileSizeLimitInMb() const
|
||||||
{
|
{
|
||||||
return skipIndexingBigFiles() ? indexerFileSizeLimitInMb() : -1;
|
return skipIndexingBigFiles ? indexerFileSizeLimitInMb : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CppCodeModelSettings::categorizeFindReferences()
|
bool CppCodeModelSettings::categorizeFindReferences()
|
||||||
{
|
{
|
||||||
return globalInstance().m_data.categorizeFindReferences;
|
return globalInstance().m_categorizeFindReferences;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppCodeModelSettings::setCategorizeFindReferences(bool categorize)
|
void CppCodeModelSettings::setCategorizeFindReferences(bool categorize)
|
||||||
{
|
{
|
||||||
globalInstance().m_data.categorizeFindReferences = categorize;
|
globalInstance().m_categorizeFindReferences = categorize;
|
||||||
}
|
}
|
||||||
|
|
||||||
CppCodeModelProjectSettings::CppCodeModelProjectSettings(ProjectExplorer::Project *project)
|
CppCodeModelProjectSettings::CppCodeModelProjectSettings(ProjectExplorer::Project *project)
|
||||||
@@ -169,23 +171,23 @@ CppCodeModelProjectSettings::CppCodeModelProjectSettings(ProjectExplorer::Projec
|
|||||||
loadSettings();
|
loadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
CppCodeModelSettings::Data CppCodeModelProjectSettings::data() const
|
CppCodeModelSettings CppCodeModelProjectSettings::settings() const
|
||||||
{
|
{
|
||||||
return m_useGlobalSettings ? CppCodeModelSettings::globalInstance().data() : m_customSettings;
|
return m_useGlobalSettings ? CppCodeModelSettings::globalInstance() : m_customSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppCodeModelProjectSettings::setData(const CppCodeModelSettings::Data &data)
|
void CppCodeModelProjectSettings::setSettings(const CppCodeModelSettings &settings)
|
||||||
{
|
{
|
||||||
m_customSettings = data;
|
m_customSettings = settings;
|
||||||
saveSettings();
|
saveSettings();
|
||||||
emit CppCodeModelSettings::globalInstance().changed(m_project);
|
CppModelManager::handleSettingsChange(m_project);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppCodeModelProjectSettings::setUseGlobalSettings(bool useGlobal)
|
void CppCodeModelProjectSettings::setUseGlobalSettings(bool useGlobal)
|
||||||
{
|
{
|
||||||
m_useGlobalSettings = useGlobal;
|
m_useGlobalSettings = useGlobal;
|
||||||
saveSettings();
|
saveSettings();
|
||||||
emit CppCodeModelSettings::globalInstance().changed(m_project);
|
CppModelManager::handleSettingsChange(m_project);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppCodeModelProjectSettings::loadSettings()
|
void CppCodeModelProjectSettings::loadSettings()
|
||||||
@@ -212,15 +214,14 @@ class CppCodeModelSettingsWidget final : public Core::IOptionsPageWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
CppCodeModelSettingsWidget(const CppCodeModelSettings::Data &data);
|
CppCodeModelSettingsWidget(const CppCodeModelSettings &settings);
|
||||||
|
CppCodeModelSettings settings() const;
|
||||||
CppCodeModelSettings::Data data() const;
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void settingsDataChanged();
|
void settingsDataChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void apply() final { CppCodeModelSettings::globalInstance().setGlobalData(data()); }
|
void apply() final { CppCodeModelSettings::globalInstance().setGlobal(settings()); }
|
||||||
|
|
||||||
QCheckBox *m_interpretAmbiguousHeadersAsCHeaders;
|
QCheckBox *m_interpretAmbiguousHeadersAsCHeaders;
|
||||||
QCheckBox *m_ignorePchCheckBox;
|
QCheckBox *m_ignorePchCheckBox;
|
||||||
@@ -231,18 +232,18 @@ private:
|
|||||||
QPlainTextEdit *m_ignorePatternTextEdit;
|
QPlainTextEdit *m_ignorePatternTextEdit;
|
||||||
};
|
};
|
||||||
|
|
||||||
CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(const CppCodeModelSettings::Data &data)
|
CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(const CppCodeModelSettings &settings)
|
||||||
{
|
{
|
||||||
m_interpretAmbiguousHeadersAsCHeaders
|
m_interpretAmbiguousHeadersAsCHeaders
|
||||||
= new QCheckBox(Tr::tr("Interpret ambiguous headers as C headers"));
|
= new QCheckBox(Tr::tr("Interpret ambiguous headers as C headers"));
|
||||||
|
|
||||||
m_skipIndexingBigFilesCheckBox = new QCheckBox(Tr::tr("Do not index files greater than"));
|
m_skipIndexingBigFilesCheckBox = new QCheckBox(Tr::tr("Do not index files greater than"));
|
||||||
m_skipIndexingBigFilesCheckBox->setChecked(data.skipIndexingBigFiles);
|
m_skipIndexingBigFilesCheckBox->setChecked(settings.skipIndexingBigFiles);
|
||||||
|
|
||||||
m_bigFilesLimitSpinBox = new QSpinBox;
|
m_bigFilesLimitSpinBox = new QSpinBox;
|
||||||
m_bigFilesLimitSpinBox->setSuffix(Tr::tr("MB"));
|
m_bigFilesLimitSpinBox->setSuffix(Tr::tr("MB"));
|
||||||
m_bigFilesLimitSpinBox->setRange(1, 500);
|
m_bigFilesLimitSpinBox->setRange(1, 500);
|
||||||
m_bigFilesLimitSpinBox->setValue(data.indexerFileSizeLimitInMb);
|
m_bigFilesLimitSpinBox->setValue(settings.indexerFileSizeLimitInMb);
|
||||||
|
|
||||||
m_ignoreFilesCheckBox = new QCheckBox(Tr::tr("Ignore files"));
|
m_ignoreFilesCheckBox = new QCheckBox(Tr::tr("Ignore files"));
|
||||||
m_ignoreFilesCheckBox->setToolTip(
|
m_ignoreFilesCheckBox->setToolTip(
|
||||||
@@ -250,8 +251,8 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(const CppCodeModelSetting
|
|||||||
+ Tr::tr("Ignore files that match these wildcard patterns, one wildcard per line.")
|
+ Tr::tr("Ignore files that match these wildcard patterns, one wildcard per line.")
|
||||||
+ "</p></body></html>");
|
+ "</p></body></html>");
|
||||||
|
|
||||||
m_ignoreFilesCheckBox->setChecked(data.ignoreFiles);
|
m_ignoreFilesCheckBox->setChecked(settings.ignoreFiles);
|
||||||
m_ignorePatternTextEdit = new QPlainTextEdit(data.ignorePattern);
|
m_ignorePatternTextEdit = new QPlainTextEdit(settings.ignorePattern);
|
||||||
m_ignorePatternTextEdit->setToolTip(m_ignoreFilesCheckBox->toolTip());
|
m_ignorePatternTextEdit->setToolTip(m_ignoreFilesCheckBox->toolTip());
|
||||||
m_ignorePatternTextEdit->setEnabled(m_ignoreFilesCheckBox->isChecked());
|
m_ignorePatternTextEdit->setEnabled(m_ignoreFilesCheckBox->isChecked());
|
||||||
|
|
||||||
@@ -271,9 +272,9 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(const CppCodeModelSetting
|
|||||||
(Tr::tr("Uncheck this to invoke the actual compiler "
|
(Tr::tr("Uncheck this to invoke the actual compiler "
|
||||||
"to show a pre-processed source file in the editor."));
|
"to show a pre-processed source file in the editor."));
|
||||||
|
|
||||||
m_interpretAmbiguousHeadersAsCHeaders->setChecked(data.interpretAmbigiousHeadersAsC);
|
m_interpretAmbiguousHeadersAsCHeaders->setChecked(settings.interpretAmbigiousHeadersAsC);
|
||||||
m_ignorePchCheckBox->setChecked(data.pchUsage == CppCodeModelSettings::PchUse_None);
|
m_ignorePchCheckBox->setChecked(settings.pchUsage == CppCodeModelSettings::PchUse_None);
|
||||||
m_useBuiltinPreprocessorCheckBox->setChecked(data.useBuiltinPreprocessor);
|
m_useBuiltinPreprocessorCheckBox->setChecked(settings.useBuiltinPreprocessor);
|
||||||
|
|
||||||
using namespace Layouting;
|
using namespace Layouting;
|
||||||
|
|
||||||
@@ -309,18 +310,18 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(const CppCodeModelSetting
|
|||||||
timer, qOverload<>(&QTimer::start));
|
timer, qOverload<>(&QTimer::start));
|
||||||
}
|
}
|
||||||
|
|
||||||
CppCodeModelSettings::Data CppCodeModelSettingsWidget::data() const
|
CppCodeModelSettings CppCodeModelSettingsWidget::settings() const
|
||||||
{
|
{
|
||||||
CppCodeModelSettings::Data data;
|
CppCodeModelSettings settings;
|
||||||
data.interpretAmbigiousHeadersAsC = m_interpretAmbiguousHeadersAsCHeaders->isChecked();
|
settings.interpretAmbigiousHeadersAsC = m_interpretAmbiguousHeadersAsCHeaders->isChecked();
|
||||||
data.skipIndexingBigFiles = m_skipIndexingBigFilesCheckBox->isChecked();
|
settings.skipIndexingBigFiles = m_skipIndexingBigFilesCheckBox->isChecked();
|
||||||
data.useBuiltinPreprocessor = m_useBuiltinPreprocessorCheckBox->isChecked();
|
settings.useBuiltinPreprocessor = m_useBuiltinPreprocessorCheckBox->isChecked();
|
||||||
data.ignoreFiles = m_ignoreFilesCheckBox->isChecked();
|
settings.ignoreFiles = m_ignoreFilesCheckBox->isChecked();
|
||||||
data.ignorePattern = m_ignorePatternTextEdit->toPlainText();
|
settings.ignorePattern = m_ignorePatternTextEdit->toPlainText();
|
||||||
data.indexerFileSizeLimitInMb = m_bigFilesLimitSpinBox->value();
|
settings.indexerFileSizeLimitInMb = m_bigFilesLimitSpinBox->value();
|
||||||
data.pchUsage = m_ignorePchCheckBox->isChecked() ? CppCodeModelSettings::PchUse_None
|
settings.pchUsage = m_ignorePchCheckBox->isChecked() ? CppCodeModelSettings::PchUse_None
|
||||||
: CppCodeModelSettings::PchUse_BuildSystem;
|
: CppCodeModelSettings::PchUse_BuildSystem;
|
||||||
return data;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CppCodeModelSettingsPage final : public Core::IOptionsPage
|
class CppCodeModelSettingsPage final : public Core::IOptionsPage
|
||||||
@@ -334,7 +335,7 @@ public:
|
|||||||
setDisplayCategory(Tr::tr("C++"));
|
setDisplayCategory(Tr::tr("C++"));
|
||||||
setCategoryIconPath(":/projectexplorer/images/settingscategory_cpp.png");
|
setCategoryIconPath(":/projectexplorer/images/settingscategory_cpp.png");
|
||||||
setWidgetCreator(
|
setWidgetCreator(
|
||||||
[] { return new CppCodeModelSettingsWidget(CppCodeModelSettings::globalInstance().data()); });
|
[] { return new CppCodeModelSettingsWidget(CppCodeModelSettings::globalInstance()); });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -347,7 +348,7 @@ class CppCodeModelProjectSettingsWidget : public ProjectSettingsWidget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CppCodeModelProjectSettingsWidget(const CppCodeModelProjectSettings &settings)
|
CppCodeModelProjectSettingsWidget(const CppCodeModelProjectSettings &settings)
|
||||||
: m_settings(settings), m_widget(settings.data())
|
: m_settings(settings), m_widget(settings.settings())
|
||||||
{
|
{
|
||||||
setGlobalSettingsId(Constants::CPP_CODE_MODEL_SETTINGS_ID);
|
setGlobalSettingsId(Constants::CPP_CODE_MODEL_SETTINGS_ID);
|
||||||
const auto layout = new QVBoxLayout(this);
|
const auto layout = new QVBoxLayout(this);
|
||||||
@@ -361,11 +362,11 @@ public:
|
|||||||
m_widget.setEnabled(!checked);
|
m_widget.setEnabled(!checked);
|
||||||
m_settings.setUseGlobalSettings(checked);
|
m_settings.setUseGlobalSettings(checked);
|
||||||
if (!checked)
|
if (!checked)
|
||||||
m_settings.setData(m_widget.data());
|
m_settings.setSettings(m_widget.settings());
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(&m_widget, &CppCodeModelSettingsWidget::settingsDataChanged,
|
connect(&m_widget, &CppCodeModelSettingsWidget::settingsDataChanged,
|
||||||
this, [this] { m_settings.setData(m_widget.data()); });
|
this, [this] { m_settings.setSettings(m_widget.settings()); });
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
#include <utils/store.h>
|
#include <utils/store.h>
|
||||||
#include <utils/qtcsettings.h>
|
#include <utils/qtcsettings.h>
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
namespace ProjectExplorer { class Project; }
|
namespace ProjectExplorer { class Project; }
|
||||||
@@ -18,75 +17,56 @@ namespace ProjectExplorer { class Project; }
|
|||||||
namespace CppEditor {
|
namespace CppEditor {
|
||||||
enum class UsePrecompiledHeaders;
|
enum class UsePrecompiledHeaders;
|
||||||
|
|
||||||
class CPPEDITOR_EXPORT CppCodeModelSettings : public QObject
|
class CPPEDITOR_EXPORT CppCodeModelSettings
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum PCHUsage {
|
enum PCHUsage {
|
||||||
PchUse_None = 1,
|
PchUse_None = 1,
|
||||||
PchUse_BuildSystem = 2
|
PchUse_BuildSystem = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
class Data
|
CppCodeModelSettings() = default;
|
||||||
|
CppCodeModelSettings(const Utils::Store &store) { fromMap(store); }
|
||||||
|
|
||||||
|
friend bool operator==(const CppCodeModelSettings &s1, const CppCodeModelSettings &s2);
|
||||||
|
friend bool operator!=(const CppCodeModelSettings &s1, const CppCodeModelSettings &s2)
|
||||||
{
|
{
|
||||||
public:
|
return !(s1 == s2);
|
||||||
Data() = default;
|
}
|
||||||
Data(const Utils::Store &store) { fromMap(store); }
|
|
||||||
Utils::Store toMap() const;
|
|
||||||
void fromMap(const Utils::Store &store);
|
|
||||||
|
|
||||||
friend bool operator==(const Data &s1, const Data &s2);
|
Utils::Store toMap() const;
|
||||||
friend bool operator!=(const Data &s1, const Data &s2) { return !(s1 == s2); }
|
void fromMap(const Utils::Store &store);
|
||||||
|
|
||||||
PCHUsage pchUsage = PchUse_BuildSystem;
|
|
||||||
bool interpretAmbigiousHeadersAsC = false;
|
|
||||||
bool skipIndexingBigFiles = true;
|
|
||||||
bool useBuiltinPreprocessor = true;
|
|
||||||
int indexerFileSizeLimitInMb = 5;
|
|
||||||
bool categorizeFindReferences = false; // Ephemeral!
|
|
||||||
bool ignoreFiles = false;
|
|
||||||
QString ignorePattern;
|
|
||||||
};
|
|
||||||
|
|
||||||
CppCodeModelSettings(const Data &data) : m_data(data) {}
|
|
||||||
|
|
||||||
static CppCodeModelSettings &globalInstance(); // TODO: Make inaccessible.
|
static CppCodeModelSettings &globalInstance(); // TODO: Make inaccessible.
|
||||||
static CppCodeModelSettings settingsForProject(const ProjectExplorer::Project *project);
|
static CppCodeModelSettings settingsForProject(const ProjectExplorer::Project *project);
|
||||||
static CppCodeModelSettings settingsForProject(const Utils::FilePath &projectFile);
|
static CppCodeModelSettings settingsForProject(const Utils::FilePath &projectFile);
|
||||||
static CppCodeModelSettings settingsForFile(const Utils::FilePath &file);
|
static CppCodeModelSettings settingsForFile(const Utils::FilePath &file);
|
||||||
|
|
||||||
static void setGlobalData(const Data &data); // TODO: Make inaccessible.
|
static void setGlobal(const CppCodeModelSettings &settings); // TODO: Make inaccessible.
|
||||||
void setData(const Data &data) { m_data = data; }
|
|
||||||
Data data() const { return m_data; }
|
|
||||||
|
|
||||||
PCHUsage pchUsage() const { return m_data.pchUsage; }
|
static PCHUsage pchUsageForProject(const ProjectExplorer::Project *project);
|
||||||
static PCHUsage pchUsage(const ProjectExplorer::Project *project);
|
|
||||||
UsePrecompiledHeaders usePrecompiledHeaders() const;
|
UsePrecompiledHeaders usePrecompiledHeaders() const;
|
||||||
static UsePrecompiledHeaders usePrecompiledHeaders(const ProjectExplorer::Project *project);
|
static UsePrecompiledHeaders usePrecompiledHeaders(const ProjectExplorer::Project *project);
|
||||||
|
|
||||||
bool interpretAmbigiousHeadersAsC() const { return m_data.interpretAmbigiousHeadersAsC; }
|
|
||||||
bool skipIndexingBigFiles() const { return m_data.skipIndexingBigFiles; }
|
|
||||||
bool useBuiltinPreprocessor() const { return m_data.useBuiltinPreprocessor; }
|
|
||||||
int indexerFileSizeLimitInMb() const { return m_data.indexerFileSizeLimitInMb; }
|
|
||||||
int effectiveIndexerFileSizeLimitInMb() const;
|
int effectiveIndexerFileSizeLimitInMb() const;
|
||||||
bool ignoreFiles() const { return m_data.ignoreFiles; }
|
|
||||||
QString ignorePattern() const { return m_data.ignorePattern; }
|
|
||||||
|
|
||||||
static bool categorizeFindReferences();
|
static bool categorizeFindReferences();
|
||||||
static void setCategorizeFindReferences(bool categorize);
|
static void setCategorizeFindReferences(bool categorize);
|
||||||
|
|
||||||
signals:
|
QString ignorePattern;
|
||||||
void changed(ProjectExplorer::Project *project);
|
PCHUsage pchUsage = PchUse_BuildSystem;
|
||||||
|
int indexerFileSizeLimitInMb = 5;
|
||||||
|
bool interpretAmbigiousHeadersAsC = false;
|
||||||
|
bool skipIndexingBigFiles = true;
|
||||||
|
bool useBuiltinPreprocessor = true;
|
||||||
|
bool ignoreFiles = false;
|
||||||
|
bool m_categorizeFindReferences = false; // Ephemeral!
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CppCodeModelSettings() = default;
|
|
||||||
CppCodeModelSettings(Utils::QtcSettings *s) { fromSettings(s); }
|
CppCodeModelSettings(Utils::QtcSettings *s) { fromSettings(s); }
|
||||||
|
|
||||||
void toSettings(Utils::QtcSettings *s);
|
void toSettings(Utils::QtcSettings *s);
|
||||||
void fromSettings(Utils::QtcSettings *s);
|
void fromSettings(Utils::QtcSettings *s);
|
||||||
|
|
||||||
Data m_data;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CppCodeModelProjectSettings
|
class CppCodeModelProjectSettings
|
||||||
@@ -94,8 +74,8 @@ class CppCodeModelProjectSettings
|
|||||||
public:
|
public:
|
||||||
CppCodeModelProjectSettings(ProjectExplorer::Project *project);
|
CppCodeModelProjectSettings(ProjectExplorer::Project *project);
|
||||||
|
|
||||||
CppCodeModelSettings::Data data() const;
|
CppCodeModelSettings settings() const;
|
||||||
void setData(const CppCodeModelSettings::Data &data);
|
void setSettings(const CppCodeModelSettings &settings);
|
||||||
bool useGlobalSettings() const { return m_useGlobalSettings; }
|
bool useGlobalSettings() const { return m_useGlobalSettings; }
|
||||||
void setUseGlobalSettings(bool useGlobal);
|
void setUseGlobalSettings(bool useGlobal);
|
||||||
|
|
||||||
@@ -104,7 +84,7 @@ private:
|
|||||||
void saveSettings();
|
void saveSettings();
|
||||||
|
|
||||||
ProjectExplorer::Project * const m_project;
|
ProjectExplorer::Project * const m_project;
|
||||||
CppCodeModelSettings::Data m_customSettings;
|
CppCodeModelSettings m_customSettings;
|
||||||
bool m_useGlobalSettings = true;
|
bool m_useGlobalSettings = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ void CppEditorPlugin::initialize()
|
|||||||
setupCppQuickFixSettings();
|
setupCppQuickFixSettings();
|
||||||
setupCppCodeModelSettingsPage();
|
setupCppCodeModelSettingsPage();
|
||||||
provideCppSettingsRetriever([](const Project *p) {
|
provideCppSettingsRetriever([](const Project *p) {
|
||||||
return CppCodeModelSettings::settingsForProject(p).data().toMap();
|
return CppCodeModelSettings::settingsForProject(p).toMap();
|
||||||
});
|
});
|
||||||
setupCppOutline();
|
setupCppOutline();
|
||||||
setupCppCodeStyleSettings();
|
setupCppCodeStyleSettings();
|
||||||
|
|||||||
@@ -407,7 +407,7 @@ void CppModelManager::showPreprocessedFile(bool inNextSplit)
|
|||||||
saveAndOpen(outFilePath, content.append(preprocessedDoc->utf8Source()), inNextSplit);
|
saveAndOpen(outFilePath, content.append(preprocessedDoc->utf8Source()), inNextSplit);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (CppCodeModelSettings::settingsForFile(filePath).useBuiltinPreprocessor()) {
|
if (CppCodeModelSettings::settingsForFile(filePath).useBuiltinPreprocessor) {
|
||||||
useBuiltinPreprocessor();
|
useBuiltinPreprocessor();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1023,9 +1023,6 @@ CppModelManager::CppModelManager()
|
|||||||
connect(ICore::instance(), &ICore::coreAboutToClose,
|
connect(ICore::instance(), &ICore::coreAboutToClose,
|
||||||
this, &CppModelManager::onCoreAboutToClose);
|
this, &CppModelManager::onCoreAboutToClose);
|
||||||
|
|
||||||
connect(&CppCodeModelSettings::globalInstance(), &CppCodeModelSettings::changed,
|
|
||||||
this, &CppModelManager::onSettingsChange);
|
|
||||||
|
|
||||||
d->m_fallbackProjectPartTimer.setSingleShot(true);
|
d->m_fallbackProjectPartTimer.setSingleShot(true);
|
||||||
d->m_fallbackProjectPartTimer.setInterval(5000);
|
d->m_fallbackProjectPartTimer.setInterval(5000);
|
||||||
connect(&d->m_fallbackProjectPartTimer, &QTimer::timeout,
|
connect(&d->m_fallbackProjectPartTimer, &QTimer::timeout,
|
||||||
@@ -1360,8 +1357,8 @@ QFuture<void> CppModelManager::updateSourceFiles(const QSet<FilePath> &sourceFil
|
|||||||
const CppCodeModelSettings settings = CppCodeModelSettings::settingsForProject(it.key());
|
const CppCodeModelSettings settings = CppCodeModelSettings::settingsForProject(it.key());
|
||||||
filteredFiles.unite(filteredFilesRemoved(it.value(),
|
filteredFiles.unite(filteredFilesRemoved(it.value(),
|
||||||
settings.effectiveIndexerFileSizeLimitInMb(),
|
settings.effectiveIndexerFileSizeLimitInMb(),
|
||||||
settings.ignoreFiles(),
|
settings.ignoreFiles,
|
||||||
settings.ignorePattern()));
|
settings.ignorePattern));
|
||||||
}
|
}
|
||||||
|
|
||||||
return d->m_internalIndexingSupport->refreshSourceFiles(filteredFiles, mode);
|
return d->m_internalIndexingSupport->refreshSourceFiles(filteredFiles, mode);
|
||||||
@@ -2013,7 +2010,7 @@ void CppModelManager::onCoreAboutToClose()
|
|||||||
d->m_enableGC = false;
|
d->m_enableGC = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppModelManager::onSettingsChange(Project *project)
|
void CppModelManager::handleSettingsChange(Project *project)
|
||||||
{
|
{
|
||||||
ProjectInfoList info;
|
ProjectInfoList info;
|
||||||
if (project)
|
if (project)
|
||||||
@@ -2023,7 +2020,7 @@ void CppModelManager::onSettingsChange(Project *project)
|
|||||||
for (const ProjectInfo::ConstPtr &pi : std::as_const(info)) {
|
for (const ProjectInfo::ConstPtr &pi : std::as_const(info)) {
|
||||||
const CppCodeModelSettings newSettings = CppCodeModelSettings::settingsForProject(
|
const CppCodeModelSettings newSettings = CppCodeModelSettings::settingsForProject(
|
||||||
pi->projectFilePath());
|
pi->projectFilePath());
|
||||||
if (pi->settings().data() != newSettings.data())
|
if (pi->settings() != newSettings)
|
||||||
updateProjectInfo(ProjectInfo::cloneWithNewSettings(pi, newSettings));
|
updateProjectInfo(ProjectInfo::cloneWithNewSettings(pi, newSettings));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,6 +110,8 @@ public:
|
|||||||
static QFuture<void> updateProjectInfo(const ProjectInfo::ConstPtr &newProjectInfo,
|
static QFuture<void> updateProjectInfo(const ProjectInfo::ConstPtr &newProjectInfo,
|
||||||
const QSet<Utils::FilePath> &additionalFiles = {});
|
const QSet<Utils::FilePath> &additionalFiles = {});
|
||||||
|
|
||||||
|
static void handleSettingsChange(ProjectExplorer::Project *project);
|
||||||
|
|
||||||
/// \return The project part with the given project file
|
/// \return The project part with the given project file
|
||||||
static ProjectPart::ConstPtr projectPartForId(const QString &projectPartId);
|
static ProjectPart::ConstPtr projectPartForId(const QString &projectPartId);
|
||||||
/// \return All project parts that mention the given file name as one of the sources/headers.
|
/// \return All project parts that mention the given file name as one of the sources/headers.
|
||||||
@@ -288,7 +290,6 @@ private:
|
|||||||
static void onSourceFilesRefreshed();
|
static void onSourceFilesRefreshed();
|
||||||
static void onCurrentEditorChanged(Core::IEditor *editor);
|
static void onCurrentEditorChanged(Core::IEditor *editor);
|
||||||
static void onCoreAboutToClose();
|
static void onCoreAboutToClose();
|
||||||
static void onSettingsChange(ProjectExplorer::Project *project);
|
|
||||||
static void setupFallbackProjectPart();
|
static void setupFallbackProjectPart();
|
||||||
|
|
||||||
static void delayedGC();
|
static void delayedGC();
|
||||||
|
|||||||
@@ -1283,10 +1283,9 @@ void ModelManagerTest::testSettingsChanges()
|
|||||||
|
|
||||||
// Change global settings. Only the second project should get re-indexed, as the first one
|
// Change global settings. Only the second project should get re-indexed, as the first one
|
||||||
// has its own settings, which are still the same.
|
// has its own settings, which are still the same.
|
||||||
CppCodeModelSettings::Data globalSettings
|
CppCodeModelSettings globalSettings = CppCodeModelSettings::settingsForProject(nullptr);
|
||||||
= CppCodeModelSettings::settingsForProject(nullptr).data();
|
|
||||||
globalSettings.indexerFileSizeLimitInMb = 1;
|
globalSettings.indexerFileSizeLimitInMb = 1;
|
||||||
CppCodeModelSettings::setGlobalData(globalSettings);
|
CppCodeModelSettings::setGlobal(globalSettings);
|
||||||
if (refreshCount == 0)
|
if (refreshCount == 0)
|
||||||
QVERIFY(waitForRefresh());
|
QVERIFY(waitForRefresh());
|
||||||
QVERIFY(!waitForRefresh());
|
QVERIFY(!waitForRefresh());
|
||||||
@@ -1295,10 +1294,10 @@ void ModelManagerTest::testSettingsChanges()
|
|||||||
// Change first project's settings. Only this project should get re-indexed.
|
// Change first project's settings. Only this project should get re-indexed.
|
||||||
refreshCount = 0;
|
refreshCount = 0;
|
||||||
refreshedFiles.clear();
|
refreshedFiles.clear();
|
||||||
CppCodeModelSettings::Data p1Data = p1Settings.data();
|
CppCodeModelSettings p1Data = p1Settings.settings();
|
||||||
p1Data.ignoreFiles = true;
|
p1Data.ignoreFiles = true;
|
||||||
p1Data.ignorePattern = "baz3.h";
|
p1Data.ignorePattern = "baz3.h";
|
||||||
p1Settings.setData(p1Data);
|
p1Settings.setSettings(p1Data);
|
||||||
if (refreshCount == 0)
|
if (refreshCount == 0)
|
||||||
QVERIFY(waitForRefresh());
|
QVERIFY(waitForRefresh());
|
||||||
QVERIFY(!waitForRefresh());
|
QVERIFY(!waitForRefresh());
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ bool ProjectInfo::operator ==(const ProjectInfo &other) const
|
|||||||
&& m_projectParts == other.m_projectParts
|
&& m_projectParts == other.m_projectParts
|
||||||
&& m_headerPaths == other.m_headerPaths
|
&& m_headerPaths == other.m_headerPaths
|
||||||
&& m_sourceFiles == other.m_sourceFiles
|
&& m_sourceFiles == other.m_sourceFiles
|
||||||
&& m_settings.data() == other.m_settings.data()
|
&& m_settings == other.m_settings
|
||||||
&& m_defines == other.m_defines;
|
&& m_defines == other.m_defines;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ bool ProjectInfo::definesChanged(const ProjectInfo &other) const
|
|||||||
bool ProjectInfo::configurationChanged(const ProjectInfo &other) const
|
bool ProjectInfo::configurationChanged(const ProjectInfo &other) const
|
||||||
{
|
{
|
||||||
return definesChanged(other) || m_headerPaths != other.m_headerPaths
|
return definesChanged(other) || m_headerPaths != other.m_headerPaths
|
||||||
|| m_settings.data() != other.settings().data();
|
|| m_settings != other.settings();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProjectInfo::configurationOrFilesChanged(const ProjectInfo &other) const
|
bool ProjectInfo::configurationOrFilesChanged(const ProjectInfo &other) const
|
||||||
@@ -98,7 +98,7 @@ ProjectInfo::ProjectInfo(const ProjectExplorer::ProjectUpdateInfo &updateInfo,
|
|||||||
m_headerPaths(getHeaderPaths(projectParts)),
|
m_headerPaths(getHeaderPaths(projectParts)),
|
||||||
m_sourceFiles(getSourceFiles(projectParts)),
|
m_sourceFiles(getSourceFiles(projectParts)),
|
||||||
m_defines(getDefines(projectParts)),
|
m_defines(getDefines(projectParts)),
|
||||||
m_settings(CppCodeModelSettings::Data(updateInfo.cppSettings))
|
m_settings(updateInfo.cppSettings)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ ProjectInfo::ProjectInfo(const ConstPtr &pi, const CppCodeModelSettings &setting
|
|||||||
m_headerPaths(pi->m_headerPaths),
|
m_headerPaths(pi->m_headerPaths),
|
||||||
m_sourceFiles(pi->sourceFiles()),
|
m_sourceFiles(pi->sourceFiles()),
|
||||||
m_defines(pi->m_defines),
|
m_defines(pi->m_defines),
|
||||||
m_settings(settings.data())
|
m_settings(settings)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user