CppEditor: Simplify setup of global file settings

Change-Id: Icef29d5ac7417bf59a21318a1fa13750f2136221
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2024-01-19 18:11:32 +01:00
parent a6f57dc25e
commit 7d7f97a747
5 changed files with 24 additions and 28 deletions

View File

@@ -180,8 +180,7 @@ public:
CppModelManager modelManager; CppModelManager modelManager;
CppToolsSettings settings; CppToolsSettings settings;
CppFileSettings m_fileSettings; CppFileSettingsPage m_cppFileSettingsPage;
CppFileSettingsPage m_cppFileSettingsPage{&m_fileSettings};
CppCodeModelSettingsPage m_cppCodeModelSettingsPage; CppCodeModelSettingsPage m_cppCodeModelSettingsPage;
CppCodeStyleSettingsPage m_cppCodeStyleSettingsPage; CppCodeStyleSettingsPage m_cppCodeStyleSettingsPage;
CppProjectUpdaterFactory m_cppProjectUpdaterFactory; CppProjectUpdaterFactory m_cppProjectUpdaterFactory;
@@ -231,16 +230,13 @@ void CppEditorPlugin::initialize()
void CppEditorPlugin::extensionsInitialized() void CppEditorPlugin::extensionsInitialized()
{ {
setupCppQuickFixProjectPanel(); setupCppQuickFixProjectPanel();
setupCppFileSettingsProjectPanel(); setupCppFileSettings();
if (CppModelManager::isClangCodeModelActive()) { if (CppModelManager::isClangCodeModelActive()) {
setupClangdProjectSettingsPanel(); setupClangdProjectSettingsPanel();
setupClangdSettingsPage(); setupClangdSettingsPage();
} }
d->m_fileSettings.fromSettings(ICore::settings());
d->m_fileSettings.addMimeInitializer();
// Add the hover handler factories here instead of in initialize() // Add the hover handler factories here instead of in initialize()
// so that the Clang Code Model has a chance to hook in. // so that the Clang Code Model has a chance to hook in.
d->m_cppEditorFactory.addHoverHandler(CppModelManager::createHoverHandler()); d->m_cppEditorFactory.addHoverHandler(CppModelManager::createHoverHandler());
@@ -622,17 +618,10 @@ bool CppEditorPlugin::usePragmaOnce(Project *project)
CppFileSettings CppEditorPlugin::fileSettings(Project *project) CppFileSettings CppEditorPlugin::fileSettings(Project *project)
{ {
if (!project) if (!project)
return instance()->d->m_fileSettings; return globalCppFileSettings();
return CppFileSettingsForProject(project).settings(); return CppFileSettingsForProject(project).settings();
} }
#ifdef WITH_TESTS
void CppEditorPlugin::setGlobalFileSettings(const CppFileSettings &settings)
{
instance()->d->m_fileSettings = settings;
}
#endif
static FilePaths findFilesInProject(const QStringList &names, const Project *project, static FilePaths findFilesInProject(const QStringList &names, const Project *project,
FileType fileType) FileType fileType)
{ {

View File

@@ -37,9 +37,6 @@ public:
void switchDeclarationDefinition(); void switchDeclarationDefinition();
static CppFileSettings fileSettings(ProjectExplorer::Project *project); static CppFileSettings fileSettings(ProjectExplorer::Project *project);
#ifdef WITH_TESTS
static void setGlobalFileSettings(const CppFileSettings &settings);
#endif
signals: signals:
void typeHierarchyRequested(); void typeHierarchyRequested();

View File

@@ -450,14 +450,14 @@ void CppFileSettingsWidget::slotEdit()
Core::EditorManager::openEditor(path, CppEditor::Constants::CPPEDITOR_ID); Core::EditorManager::openEditor(path, CppEditor::Constants::CPPEDITOR_ID);
} }
// --------------- CppFileSettingsPage // CppFileSettingsPage
CppFileSettingsPage::CppFileSettingsPage(CppFileSettings *settings) CppFileSettingsPage::CppFileSettingsPage()
{ {
setId(Constants::CPP_FILE_SETTINGS_ID); setId(Constants::CPP_FILE_SETTINGS_ID);
setDisplayName(Tr::tr("File Naming")); setDisplayName(Tr::tr("File Naming"));
setCategory(Constants::CPP_SETTINGS_CATEGORY); setCategory(Constants::CPP_SETTINGS_CATEGORY);
setWidgetCreator([settings] { return new CppFileSettingsWidget(settings); }); setWidgetCreator([] { return new CppFileSettingsWidget(&globalCppFileSettings()); });
} }
CppFileSettingsForProject::CppFileSettingsForProject(ProjectExplorer::Project *project) CppFileSettingsForProject::CppFileSettingsForProject(ProjectExplorer::Project *project)
@@ -468,7 +468,7 @@ CppFileSettingsForProject::CppFileSettingsForProject(ProjectExplorer::Project *p
CppFileSettings CppFileSettingsForProject::settings() const CppFileSettings CppFileSettingsForProject::settings() const
{ {
return m_useGlobalSettings ? CppEditorPlugin::fileSettings(nullptr) : m_customSettings; return m_useGlobalSettings ? globalCppFileSettings() : m_customSettings;
} }
void CppFileSettingsForProject::setSettings(const CppFileSettings &settings) void CppFileSettingsForProject::setSettings(const CppFileSettings &settings)
@@ -600,9 +600,19 @@ public:
} }
}; };
void setupCppFileSettingsProjectPanel() void setupCppFileSettings()
{ {
static CppFileSettingsProjectPanelFactory theCppFileSettingsProjectPanelFactory; static CppFileSettingsProjectPanelFactory theCppFileSettingsProjectPanelFactory;
globalCppFileSettings().fromSettings(Core::ICore::settings());
globalCppFileSettings().addMimeInitializer();
}
CppFileSettings &globalCppFileSettings()
{
// This is the global instance. There could be more.
static CppFileSettings theGlobalCppFileSettings;
return theGlobalCppFileSettings;
} }
} // namespace CppEditor::Internal } // namespace CppEditor::Internal

View File

@@ -71,7 +71,7 @@ private:
class CppFileSettingsPage : public Core::IOptionsPage class CppFileSettingsPage : public Core::IOptionsPage
{ {
public: public:
explicit CppFileSettingsPage(CppFileSettings *settings); CppFileSettingsPage();
}; };
class CppFileSettingsForProjectWidget : public ProjectExplorer::ProjectSettingsWidget class CppFileSettingsForProjectWidget : public ProjectExplorer::ProjectSettingsWidget
@@ -85,6 +85,8 @@ private:
Private * const d; Private * const d;
}; };
void setupCppFileSettingsProjectPanel(); CppFileSettings &globalCppFileSettings();
void setupCppFileSettings();
} // namespace CppEditor::Internal } // namespace CppEditor::Internal

View File

@@ -71,27 +71,25 @@ void HeaderSourceTest::test_data()
void HeaderSourceTest::initTestCase() void HeaderSourceTest::initTestCase()
{ {
QDir(baseTestDir()).mkpath(_(".")); QDir(baseTestDir()).mkpath(_("."));
CppFileSettings fs = CppEditorPlugin::fileSettings(nullptr); CppFileSettings &fs = globalCppFileSettings();
fs.headerSearchPaths.append(QLatin1String("include")); fs.headerSearchPaths.append(QLatin1String("include"));
fs.headerSearchPaths.append(QLatin1String("../include")); fs.headerSearchPaths.append(QLatin1String("../include"));
fs.sourceSearchPaths.append(QLatin1String("src")); fs.sourceSearchPaths.append(QLatin1String("src"));
fs.sourceSearchPaths.append(QLatin1String("../src")); fs.sourceSearchPaths.append(QLatin1String("../src"));
fs.headerPrefixes.append(QLatin1String("testh_")); fs.headerPrefixes.append(QLatin1String("testh_"));
fs.sourcePrefixes.append(QLatin1String("testc_")); fs.sourcePrefixes.append(QLatin1String("testc_"));
CppEditorPlugin::setGlobalFileSettings(fs);
} }
void HeaderSourceTest::cleanupTestCase() void HeaderSourceTest::cleanupTestCase()
{ {
Utils::FilePath::fromString(baseTestDir()).removeRecursively(); Utils::FilePath::fromString(baseTestDir()).removeRecursively();
CppFileSettings fs = CppEditorPlugin::fileSettings(nullptr); CppFileSettings &fs = globalCppFileSettings();
fs.headerSearchPaths.removeLast(); fs.headerSearchPaths.removeLast();
fs.headerSearchPaths.removeLast(); fs.headerSearchPaths.removeLast();
fs.sourceSearchPaths.removeLast(); fs.sourceSearchPaths.removeLast();
fs.sourceSearchPaths.removeLast(); fs.sourceSearchPaths.removeLast();
fs.headerPrefixes.removeLast(); fs.headerPrefixes.removeLast();
fs.sourcePrefixes.removeLast(); fs.sourcePrefixes.removeLast();
CppEditorPlugin::setGlobalFileSettings(fs);
} }
} // namespace CppEditor::Internal } // namespace CppEditor::Internal