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

View File

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

View File

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