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