Editor: always configured assistant

A code assistant is not usable without a text editor widget and is
always created as part of one, so make the dependency obvious by require
it in the construction of the code assistant. This removes a bunch of
functions and cheks.

Change-Id: I96556430082ff729d99d2ae2516599f9b8cbc704
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2022-11-10 14:38:34 +01:00
parent be3a781581
commit f297b3f1b5
3 changed files with 7 additions and 31 deletions

View File

@@ -34,10 +34,7 @@ namespace TextEditor {
class CodeAssistantPrivate : public QObject class CodeAssistantPrivate : public QObject
{ {
public: public:
CodeAssistantPrivate(CodeAssistant *assistant); CodeAssistantPrivate(CodeAssistant *assistant, TextEditorWidget *editorWidget);
void configure(TextEditorWidget *editorWidget);
bool isConfigured() const;
void invoke(AssistKind kind, IAssistProvider *provider = nullptr); void invoke(AssistKind kind, IAssistProvider *provider = nullptr);
void process(); void process();
@@ -99,8 +96,9 @@ private:
// -------------------- // --------------------
const QChar CodeAssistantPrivate::m_null; const QChar CodeAssistantPrivate::m_null;
CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant) CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant, TextEditorWidget *editorWidget)
: q(assistant) : q(assistant)
, m_editorWidget(editorWidget)
{ {
m_automaticProposalTimer.setSingleShot(true); m_automaticProposalTimer.setSingleShot(true);
connect(&m_automaticProposalTimer, &QTimer::timeout, connect(&m_automaticProposalTimer, &QTimer::timeout,
@@ -112,24 +110,11 @@ CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant)
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged, connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged,
this, &CodeAssistantPrivate::clearAbortedPosition); this, &CodeAssistantPrivate::clearAbortedPosition);
}
void CodeAssistantPrivate::configure(TextEditorWidget *editorWidget)
{
m_editorWidget = editorWidget;
m_editorWidget->installEventFilter(this); m_editorWidget->installEventFilter(this);
} }
bool CodeAssistantPrivate::isConfigured() const
{
return m_editorWidget != nullptr;
}
void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider) void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider)
{ {
if (!isConfigured())
return;
stopAutomaticProposalTimer(); stopAutomaticProposalTimer();
if (isDisplayingProposal() && m_assistKind == kind && !m_proposal->isFragile() if (isDisplayingProposal() && m_assistKind == kind && !m_proposal->isFragile()
@@ -159,9 +144,6 @@ bool CodeAssistantPrivate::requestActivationCharProposal()
void CodeAssistantPrivate::process() void CodeAssistantPrivate::process()
{ {
if (!isConfigured())
return;
stopAutomaticProposalTimer(); stopAutomaticProposalTimer();
if (m_assistKind == TextEditor::Completion) { if (m_assistKind == TextEditor::Completion) {
@@ -552,7 +534,8 @@ bool CodeAssistantPrivate::eventFilter(QObject *o, QEvent *e)
// ------------- // -------------
// CodeAssistant // CodeAssistant
// ------------- // -------------
CodeAssistant::CodeAssistant() : d(new CodeAssistantPrivate(this)) CodeAssistant::CodeAssistant(TextEditorWidget *editorWidget)
: d(new CodeAssistantPrivate(this, editorWidget))
{ {
} }
@@ -562,11 +545,6 @@ CodeAssistant::~CodeAssistant()
delete d; delete d;
} }
void CodeAssistant::configure(TextEditorWidget *editorWidget)
{
d->configure(editorWidget);
}
void CodeAssistant::process() void CodeAssistant::process()
{ {
d->process(); d->process();

View File

@@ -20,11 +20,9 @@ class CodeAssistant : public QObject
Q_OBJECT Q_OBJECT
public: public:
CodeAssistant(); CodeAssistant(TextEditorWidget *editorWidget);
~CodeAssistant() override; ~CodeAssistant() override;
void configure(TextEditorWidget *editorWidget);
void process(); void process();
void notifyChange(); void notifyChange();
bool hasContext() const; bool hasContext() const;

View File

@@ -904,6 +904,7 @@ TextEditorWidgetPrivate::TextEditorWidgetPrivate(TextEditorWidget *parent)
, m_requestMarkEnabled(true) , m_requestMarkEnabled(true)
, m_lineSeparatorsAllowed(false) , m_lineSeparatorsAllowed(false)
, m_maybeFakeTooltipEvent(false) , m_maybeFakeTooltipEvent(false)
, m_codeAssistant(parent)
, m_hoverHandlerRunner(parent, m_hoverHandlers) , m_hoverHandlerRunner(parent, m_hoverHandlers)
, m_clipboardAssistProvider(new ClipboardAssistProvider) , m_clipboardAssistProvider(new ClipboardAssistProvider)
, m_autoCompleter(new AutoCompleter) , m_autoCompleter(new AutoCompleter)
@@ -8876,7 +8877,6 @@ BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentP
textEditorWidget->autoCompleter()->setTabSettings(document->tabSettings()); textEditorWidget->autoCompleter()->setTabSettings(document->tabSettings());
textEditorWidget->d->m_hoverHandlers = m_hoverHandlers; textEditorWidget->d->m_hoverHandlers = m_hoverHandlers;
textEditorWidget->d->m_codeAssistant.configure(textEditorWidget);
textEditorWidget->d->m_commentDefinition = m_commentDefinition; textEditorWidget->d->m_commentDefinition = m_commentDefinition;
QObject::connect(textEditorWidget, QObject::connect(textEditorWidget,