diff --git a/src/plugins/languageclient/languageclientcodeassist.cpp b/src/plugins/languageclient/languageclientcodeassist.cpp index 332511a9644..0096d9b454b 100644 --- a/src/plugins/languageclient/languageclientcodeassist.cpp +++ b/src/plugins/languageclient/languageclientcodeassist.cpp @@ -219,6 +219,7 @@ public: LanguageClientCompletionAssistProcessor(BaseClient *client); TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override; bool running() override; + bool needsRestart() const override { return true; } private: void handleCompletionResponse(const Response &response); diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 2a01ada15c9..15c7f56cc82 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -245,10 +245,17 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason, case IAssistProvider::Asynchronous: { processor->setAsyncCompletionAvailableHandler( [this, reason](IAssistProposal *newProposal){ - invalidateCurrentRequestData(); - displayProposal(newProposal, reason); + if (m_asyncProcessor && m_asyncProcessor->needsRestart() && m_receivedContentWhileWaiting) { + delete newProposal; + m_receivedContentWhileWaiting = false; + invalidateCurrentRequestData(); + requestProposal(reason, m_assistKind, m_requestProvider); + } else { + invalidateCurrentRequestData(); + displayProposal(newProposal, reason); - emit q->finished(); + emit q->finished(); + } }); // If there is a proposal, nothing asynchronous happened... diff --git a/src/plugins/texteditor/codeassist/iassistprocessor.h b/src/plugins/texteditor/codeassist/iassistprocessor.h index 23c06b68355..6ed29b66f11 100644 --- a/src/plugins/texteditor/codeassist/iassistprocessor.h +++ b/src/plugins/texteditor/codeassist/iassistprocessor.h @@ -50,6 +50,7 @@ public: void setAsyncCompletionAvailableHandler(const AsyncCompletionsAvailableHandler &finalizer); virtual bool running() { return false; } + virtual bool needsRestart() const { return false; } private: AsyncCompletionsAvailableHandler m_asyncCompletionsAvailableHandler;