TextEditor: De-qobjectify SnippetProvider

It's really not much more than a struct with three items.
And there's no need to have them in the global object pool.

Change-Id: Ie4f46ba2ecb1b90ef22479a0e81d03d9301c2e7a
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
hjk
2018-02-06 14:26:17 +01:00
parent 58a168db82
commit c685dd1d83
4 changed files with 26 additions and 37 deletions

View File

@@ -31,27 +31,19 @@
using namespace TextEditor; using namespace TextEditor;
static QList<SnippetProvider *> g_snippetProviders; static QList<SnippetProvider> g_snippetProviders;
const QList<SnippetProvider *> SnippetProvider::snippetProviders() const QList<SnippetProvider> &SnippetProvider::snippetProviders()
{ {
return g_snippetProviders; return g_snippetProviders;
} }
SnippetProvider *SnippetProvider::snippetProviderForGroupId(const QString &groupId) SnippetProvider *SnippetProvider::snippetProviderForGroupId(const QString &groupId)
{ {
return Utils::findOrDefault(g_snippetProviders, auto end = std::end(g_snippetProviders);
Utils::equal(&SnippetProvider::groupId, groupId)); auto it = std::find_if(std::begin(g_snippetProviders), end,
} Utils::equal(&SnippetProvider::groupId, groupId));
return (it == end) ? nullptr : &*it;
SnippetProvider::SnippetProvider()
{
g_snippetProviders.append(this);
}
SnippetProvider::~SnippetProvider()
{
g_snippetProviders.removeOne(this);
} }
/*! /*!
@@ -137,10 +129,9 @@ static void doNotDecorate(TextEditorWidget *) { }
void SnippetProvider::registerGroup(const QString &groupId, const QString &displayName, void SnippetProvider::registerGroup(const QString &groupId, const QString &displayName,
EditorDecorator editorDecorator) EditorDecorator editorDecorator)
{ {
auto provider = new SnippetProvider; SnippetProvider provider;
provider->m_groupId = groupId; provider.m_groupId = groupId;
provider->m_displayName = displayName; provider.m_displayName = displayName;
provider->m_editorDecorator = editorDecorator ? editorDecorator : EditorDecorator(doNotDecorate); provider.m_editorDecorator = editorDecorator ? editorDecorator : EditorDecorator(doNotDecorate);
Internal::TextEditorPlugin::instance()->addAutoReleasedObject(provider); g_snippetProviders.append(provider);
} }

View File

@@ -27,7 +27,7 @@
#include <texteditor/texteditor_global.h> #include <texteditor/texteditor_global.h>
#include <QObject> #include <QString>
#include <functional> #include <functional>
@@ -35,13 +35,14 @@ namespace TextEditor {
class TextEditorWidget; class TextEditorWidget;
class TEXTEDITOR_EXPORT SnippetProvider : public QObject class TEXTEDITOR_EXPORT SnippetProvider
{ {
Q_OBJECT
public: public:
SnippetProvider() = default;
using EditorDecorator = std::function<void(TextEditorWidget *)>; using EditorDecorator = std::function<void(TextEditorWidget *)>;
static const QList<SnippetProvider *> snippetProviders(); static const QList<SnippetProvider> &snippetProviders();
static SnippetProvider *snippetProviderForGroupId(const QString &groupId); static SnippetProvider *snippetProviderForGroupId(const QString &groupId);
static void registerGroup(const QString &groupId, const QString &displayName, static void registerGroup(const QString &groupId, const QString &displayName,
@@ -54,9 +55,6 @@ public:
void decorateEditor(TextEditorWidget *editor) const; void decorateEditor(TextEditorWidget *editor) const;
private: private:
SnippetProvider();
~SnippetProvider() override;
QString m_groupId; QString m_groupId;
QString m_displayName; QString m_displayName;
EditorDecorator m_editorDecorator; EditorDecorator m_editorDecorator;

View File

@@ -409,9 +409,9 @@ int SnippetsCollection::groupIndex(const QString &groupId) const
void SnippetsCollection::identifyGroups() void SnippetsCollection::identifyGroups()
{ {
for (SnippetProvider *provider : SnippetProvider::snippetProviders()) { for (const SnippetProvider &provider : SnippetProvider::snippetProviders()) {
const int groupIndex = m_groupIndexById.size(); const int groupIndex = m_groupIndexById.size();
m_groupIndexById.insert(provider->groupId(), groupIndex); m_groupIndexById.insert(provider.groupId(), groupIndex);
m_snippets.resize(groupIndex + 1); m_snippets.resize(groupIndex + 1);
m_activeSnippetsEnd.resize(groupIndex + 1); m_activeSnippetsEnd.resize(groupIndex + 1);
m_activeSnippetsEnd[groupIndex] = m_snippets[groupIndex].end(); m_activeSnippetsEnd[groupIndex] = m_snippets[groupIndex].end();

View File

@@ -328,11 +328,11 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w)
{ {
m_ui.setupUi(w); m_ui.setupUi(w);
const QList<SnippetProvider *> &providers = SnippetProvider::snippetProviders(); const QList<SnippetProvider> &providers = SnippetProvider::snippetProviders();
for (SnippetProvider *provider : providers) { for (const SnippetProvider &provider : providers) {
m_ui.groupCombo->addItem(provider->displayName(), provider->groupId()); m_ui.groupCombo->addItem(provider.displayName(), provider.groupId());
SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w); SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w);
provider->decorateEditor(snippetEditor); provider.decorateEditor(snippetEditor);
m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor); m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor);
connect(snippetEditor, &SnippetEditorWidget::snippetContentChanged, connect(snippetEditor, &SnippetEditorWidget::snippetContentChanged,
this, &SnippetsSettingsPagePrivate::setSnippetContent); this, &SnippetsSettingsPagePrivate::setSnippetContent);
@@ -536,15 +536,15 @@ void SnippetsSettingsPagePrivate::setSnippetContent()
void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings) void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings)
{ {
const QList<SnippetProvider *> &providers = SnippetProvider::snippetProviders(); const QList<SnippetProvider> &providers = SnippetProvider::snippetProviders();
for (int i = 0; i < m_ui.groupCombo->count(); ++i) { for (int i = 0; i < m_ui.groupCombo->count(); ++i) {
SnippetEditorWidget *snippetEditor = editorAt(i); SnippetEditorWidget *snippetEditor = editorAt(i);
snippetEditor->textDocument()->setFontSettings(fontSettings); snippetEditor->textDocument()->setFontSettings(fontSettings);
const QString &id = m_ui.groupCombo->itemData(i).toString(); const QString &id = m_ui.groupCombo->itemData(i).toString();
// This list should be quite short... Re-iterating over it is ok. // This list should be quite short... Re-iterating over it is ok.
foreach (const SnippetProvider *provider, providers) { foreach (const SnippetProvider &provider, providers) {
if (provider->groupId() == id) if (provider.groupId() == id)
provider->decorateEditor(snippetEditor); provider.decorateEditor(snippetEditor);
} }
} }
} }