From a4f9267df1dba83c5a4ec3f0a9ae8d3d0533db0c Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 21 Dec 2023 15:01:12 +0100 Subject: [PATCH] TextEditor: avoid creating an highlighter to check a type check the type after construcing the highlighter instead and save that information. Change-Id: I7d942dae4be8471dba90dd266267ff7fa1b6f440 Reviewed-by: Artem Sokolovskii --- src/plugins/texteditor/highlighterhelper.cpp | 5 +++-- .../texteditor/syntaxhighlighterrunner.cpp | 16 ++++++++++++---- src/plugins/texteditor/syntaxhighlighterrunner.h | 5 +++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/plugins/texteditor/highlighterhelper.cpp b/src/plugins/texteditor/highlighterhelper.cpp index f27c2f3f394..6aa98439c05 100644 --- a/src/plugins/texteditor/highlighterhelper.cpp +++ b/src/plugins/texteditor/highlighterhelper.cpp @@ -210,9 +210,10 @@ void reload() highlightRepository()->reload(); for (auto editor : Core::DocumentModel::editorsForOpenedDocuments()) { if (auto textEditor = qobject_cast(editor)) { - auto highlighterCreator = textEditor->textDocument()->syntaxHighlighterRunner()->creator(); - if (highlighterCreator && qobject_cast(highlighterCreator())) + if (auto highlighterRunner = textEditor->textDocument()->syntaxHighlighterRunner(); + highlighterRunner && highlighterRunner->useGenericHighlighter()) { textEditor->editorWidget()->configureGenericHighlighter(); + } } } } diff --git a/src/plugins/texteditor/syntaxhighlighterrunner.cpp b/src/plugins/texteditor/syntaxhighlighterrunner.cpp index 3780ff47e61..a1358606ccb 100644 --- a/src/plugins/texteditor/syntaxhighlighterrunner.cpp +++ b/src/plugins/texteditor/syntaxhighlighterrunner.cpp @@ -6,6 +6,7 @@ #include "fontsettings.h" #include "textdocumentlayout.h" #include "texteditorsettings.h" +#include "highlighter.h" #include @@ -92,13 +93,13 @@ public: void rehighlight() { m_highlighter->rehighlight(); } -signals: - void resultsReady(const QList &result); - -private: std::unique_ptr m_highlighter; QTextDocument *m_document = nullptr; FontSettings m_fontSettings; + +signals: + void resultsReady(const QList &result); + }; // ----------------------------- BaseSyntaxHighlighterRunner -------------------------------------- @@ -110,6 +111,8 @@ BaseSyntaxHighlighterRunner::BaseSyntaxHighlighterRunner( : d(new SyntaxHighlighterRunnerPrivate(creator, document, fontSettings)) , m_document(document) { + m_useGenericHighlighter = qobject_cast(d->m_highlighter.get()); + if (document == nullptr) return; @@ -176,6 +179,11 @@ void BaseSyntaxHighlighterRunner::changeDocument(int from, int charsRemoved, int }); } +bool BaseSyntaxHighlighterRunner::useGenericHighlighter() const +{ + return m_useGenericHighlighter; +} + void BaseSyntaxHighlighterRunner::setExtraFormats( const QMap> &formatMap) { diff --git a/src/plugins/texteditor/syntaxhighlighterrunner.h b/src/plugins/texteditor/syntaxhighlighterrunner.h index b01c23df6b8..68825318c3f 100644 --- a/src/plugins/texteditor/syntaxhighlighterrunner.h +++ b/src/plugins/texteditor/syntaxhighlighterrunner.h @@ -48,9 +48,10 @@ public: void setDefinitionName(const QString &name); QTextDocument *document() const { return m_document; } - SyntaxHighLighterCreator creator() const { return m_creator; } + bool useGenericHighlighter() const; bool syntaxInfoUpdated() const { return m_syntaxInfoUpdated == SyntaxHighlighter::State::Done; } + signals: void highlightingFinished(); @@ -63,7 +64,7 @@ protected: SyntaxHighlighter::State m_syntaxInfoUpdated = SyntaxHighlighter::State::Done; private: - SyntaxHighLighterCreator m_creator; + bool m_useGenericHighlighter = false; QString m_definitionName; };