summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2023-04-28 14:04:50 +0200
committerDavid Schulz <david.schulz@qt.io>2023-05-02 12:08:04 +0000
commitba5e09f03f27e9454794e1658a764c3ad67ed946 (patch)
treecacdfe00b2161b42f7ae6826405dc43244284681
parent8aecf0d74935e9cb505eedbbfeedf531fd90a725 (diff)
downloadqt-creator-ba5e09f03f27e9454794e1658a764c3ad67ed946.tar.gz
TextEditor: always return a valid assist interface
It is required for updating currently visible proposals. Also guard against potential null assist interfaces. Amends 0bd6d7a69fab1cc622f6e00ee63a15c666967e0d Fixes: QTCREATORBUG-29096 Change-Id: Ic34d70561b471e7e529f2fb7c239b49712aca502 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
-rw-r--r--src/plugins/cppeditor/cppeditorwidget.cpp20
-rw-r--r--src/plugins/cppeditor/cppquickfixassistant.cpp3
-rw-r--r--src/plugins/qmljseditor/qmljseditor.cpp2
-rw-r--r--src/plugins/texteditor/codeassist/codeassistant.cpp9
4 files changed, 16 insertions, 18 deletions
diff --git a/src/plugins/cppeditor/cppeditorwidget.cpp b/src/plugins/cppeditor/cppeditorwidget.cpp
index 20fe8e6254..0430f210a0 100644
--- a/src/plugins/cppeditor/cppeditorwidget.cpp
+++ b/src/plugins/cppeditor/cppeditorwidget.cpp
@@ -1267,20 +1267,16 @@ std::unique_ptr<AssistInterface> CppEditorWidget::createAssistInterface(AssistKi
if (cap)
return cap->createAssistInterface(textDocument()->filePath(), this, getFeatures(), reason);
- else {
- if (isOldStyleSignalOrSlot())
- return CppModelManager::instance()
- ->completionAssistProvider()
- ->createAssistInterface(textDocument()->filePath(), this, getFeatures(), reason);
- return TextEditorWidget::createAssistInterface(kind, reason);
+
+ if (isOldStyleSignalOrSlot()) {
+ return CppModelManager::instance()
+ ->completionAssistProvider()
+ ->createAssistInterface(textDocument()->filePath(), this, getFeatures(), reason);
}
- } else if (kind == QuickFix) {
- if (isSemanticInfoValid())
- return std::make_unique<CppQuickFixInterface>(const_cast<CppEditorWidget *>(this), reason);
- } else {
- return TextEditorWidget::createAssistInterface(kind, reason);
}
- return nullptr;
+ if (kind == QuickFix && isSemanticInfoValid())
+ return std::make_unique<CppQuickFixInterface>(const_cast<CppEditorWidget *>(this), reason);
+ return TextEditorWidget::createAssistInterface(kind, reason);
}
QSharedPointer<FunctionDeclDefLink> CppEditorWidget::declDefLink() const
diff --git a/src/plugins/cppeditor/cppquickfixassistant.cpp b/src/plugins/cppeditor/cppquickfixassistant.cpp
index 89af86e334..19514387d7 100644
--- a/src/plugins/cppeditor/cppquickfixassistant.cpp
+++ b/src/plugins/cppeditor/cppquickfixassistant.cpp
@@ -149,7 +149,8 @@ QTextCursor CppQuickFixInterface::adjustedCursor()
QuickFixOperations quickFixOperations(const TextEditor::AssistInterface *interface)
{
const auto cppInterface = dynamic_cast<const CppQuickFixInterface *>(interface);
- QTC_ASSERT(cppInterface, return {});
+ if (!cppInterface)
+ return {};
QuickFixOperations quickFixes;
for (CppQuickFixFactory *factory : CppQuickFixFactory::cppQuickFixFactories())
factory->match(*cppInterface, quickFixes);
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 590ef1da58..ccc94a5ea4 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -1042,7 +1042,7 @@ std::unique_ptr<AssistInterface> QmlJSEditorWidget::createAssistInterface(
return std::make_unique<Internal::QmlJSQuickFixAssistInterface>(
const_cast<QmlJSEditorWidget *>(this), reason);
}
- return nullptr;
+ return TextEditorWidget::createAssistInterface(assistKind, reason);
}
QString QmlJSEditorWidget::foldReplacementText(const QTextBlock &block) const
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp
index 34ba897d8d..b3d9d477e2 100644
--- a/src/plugins/texteditor/codeassist/codeassistant.cpp
+++ b/src/plugins/texteditor/codeassist/codeassistant.cpp
@@ -175,8 +175,7 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
std::unique_ptr<AssistInterface> assistInterface =
m_editorWidget->createAssistInterface(kind, reason);
- if (!assistInterface)
- return;
+ QTC_ASSERT(assistInterface, return);
// We got an assist provider and interface so no need to reset the current context anymore
earlyReturnContextClear.reset({});
@@ -395,8 +394,10 @@ void CodeAssistantPrivate::notifyChange()
if (m_editorWidget->position() < m_proposalWidget->basePosition()) {
destroyContext();
} else {
- m_proposalWidget->updateProposal(
- m_editorWidget->createAssistInterface(m_assistKind, m_proposalWidget->reason()));
+ std::unique_ptr<AssistInterface> assistInterface
+ = m_editorWidget->createAssistInterface(m_assistKind, m_proposalWidget->reason());
+ QTC_ASSERT(assistInterface, destroyContext(); return);
+ m_proposalWidget->updateProposal(std::move(assistInterface));
if (!isDisplayingProposal())
requestActivationCharProposal();
}