From 0c53c2daefdef4f7a6ccdfd394ab1f5b78b52a56 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 22 Nov 2021 13:26:59 +0100 Subject: [PATCH] CppEditor: Do not overwrite extra selections from language client The broken libclang-based implementation used to remove the correct results we got from clangd. Task-number: QTCREATORBUG-26339 Task-number: QTCREATORBUG-26596 Change-Id: I9b7c1214c376b616fe204986ed37c287e2307f81 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangmodelmanagersupport.cpp | 5 +++++ src/plugins/clangcodemodel/clangmodelmanagersupport.h | 1 + src/plugins/cppeditor/cppmodelmanager.cpp | 5 +++++ src/plugins/cppeditor/cppmodelmanager.h | 1 + src/plugins/cppeditor/cppmodelmanagersupport.h | 1 + src/plugins/cppeditor/cppuseselectionsupdater.cpp | 4 ++++ 6 files changed, 17 insertions(+) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 371fb224524..1d8a3f8af2e 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -209,6 +209,11 @@ bool ClangModelManagerSupport::supportsOutline(const TextEditor::TextDocument *d return !clientForFile(document->filePath()); } +bool ClangModelManagerSupport::supportsLocalUses(const TextEditor::TextDocument *document) const +{ + return !clientForFile(document->filePath()); +} + CppEditor::BaseEditorDocumentProcessor *ClangModelManagerSupport::createEditorDocumentProcessor( TextEditor::TextDocument *baseTextDocument) { diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.h b/src/plugins/clangcodemodel/clangmodelmanagersupport.h index 5d591d6925f..8307ece252f 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.h +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.h @@ -75,6 +75,7 @@ public: CppEditor::RefactoringEngineInterface &refactoringEngineInterface() override; std::unique_ptr createOverviewModel() override; bool supportsOutline(const TextEditor::TextDocument *document) const override; + bool supportsLocalUses(const TextEditor::TextDocument *document) const override; BackendCommunicator &communicator(); QString dummyUiHeaderOnDiskDirPath() const; diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp index b87e1098da1..097dcf15f98 100644 --- a/src/plugins/cppeditor/cppmodelmanager.cpp +++ b/src/plugins/cppeditor/cppmodelmanager.cpp @@ -1321,6 +1321,11 @@ bool CppModelManager::supportsOutline(const TextEditor::TextDocument *document) return instance()->d->m_activeModelManagerSupport->supportsOutline(document); } +bool CppModelManager::supportsLocalUses(const TextEditor::TextDocument *document) +{ + return instance()->d->m_activeModelManagerSupport->supportsLocalUses(document); +} + bool CppModelManager::isClangCodeModelActive() const { return d->m_activeModelManagerSupport != d->m_builtinModelManagerSupport; diff --git a/src/plugins/cppeditor/cppmodelmanager.h b/src/plugins/cppeditor/cppmodelmanager.h index e6dc746a1f1..fadb00657d9 100644 --- a/src/plugins/cppeditor/cppmodelmanager.h +++ b/src/plugins/cppeditor/cppmodelmanager.h @@ -140,6 +140,7 @@ public: static bool isCppEditor(Core::IEditor *editor); static bool supportsOutline(const TextEditor::TextDocument *document); + static bool supportsLocalUses(const TextEditor::TextDocument *document); bool isClangCodeModelActive() const; QSet abstractEditorSupports() const; diff --git a/src/plugins/cppeditor/cppmodelmanagersupport.h b/src/plugins/cppeditor/cppmodelmanagersupport.h index 70da6fedc70..ca287d8baf7 100644 --- a/src/plugins/cppeditor/cppmodelmanagersupport.h +++ b/src/plugins/cppeditor/cppmodelmanagersupport.h @@ -62,6 +62,7 @@ public: virtual RefactoringEngineInterface &refactoringEngineInterface() = 0; virtual std::unique_ptr createOverviewModel() = 0; virtual bool supportsOutline(const TextEditor::TextDocument *) const { return true; } + virtual bool supportsLocalUses(const TextEditor::TextDocument *) const { return true; } }; class CPPEDITOR_EXPORT ModelManagerSupportProvider diff --git a/src/plugins/cppeditor/cppuseselectionsupdater.cpp b/src/plugins/cppeditor/cppuseselectionsupdater.cpp index 70b0cba81f8..99e0f8befc5 100644 --- a/src/plugins/cppeditor/cppuseselectionsupdater.cpp +++ b/src/plugins/cppeditor/cppuseselectionsupdater.cpp @@ -27,6 +27,7 @@ #include "cppeditorwidget.h" #include "cppeditordocument.h" +#include "cppmodelmanager.h" #include "cpptoolsreuse.h" #include @@ -73,6 +74,9 @@ CppUseSelectionsUpdater::RunnerInfo CppUseSelectionsUpdater::update(CallType cal auto *cppEditorDocument = qobject_cast(cppEditorWidget->textDocument()); QTC_ASSERT(cppEditorDocument, return RunnerInfo::FailedToStart); + if (!CppModelManager::instance()->supportsLocalUses(cppEditorDocument)) + return RunnerInfo::AlreadyUpToDate; + CursorInfoParams params; params.semanticInfo = cppEditorWidget->semanticInfo(); params.textCursor = Utils::Text::wordStartCursor(cppEditorWidget->textCursor());