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 <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-11-22 13:26:59 +01:00
parent 7498b5523a
commit 0c53c2daef
6 changed files with 17 additions and 0 deletions

View File

@@ -209,6 +209,11 @@ bool ClangModelManagerSupport::supportsOutline(const TextEditor::TextDocument *d
return !clientForFile(document->filePath()); return !clientForFile(document->filePath());
} }
bool ClangModelManagerSupport::supportsLocalUses(const TextEditor::TextDocument *document) const
{
return !clientForFile(document->filePath());
}
CppEditor::BaseEditorDocumentProcessor *ClangModelManagerSupport::createEditorDocumentProcessor( CppEditor::BaseEditorDocumentProcessor *ClangModelManagerSupport::createEditorDocumentProcessor(
TextEditor::TextDocument *baseTextDocument) TextEditor::TextDocument *baseTextDocument)
{ {

View File

@@ -75,6 +75,7 @@ public:
CppEditor::RefactoringEngineInterface &refactoringEngineInterface() override; CppEditor::RefactoringEngineInterface &refactoringEngineInterface() override;
std::unique_ptr<CppEditor::AbstractOverviewModel> createOverviewModel() override; std::unique_ptr<CppEditor::AbstractOverviewModel> createOverviewModel() override;
bool supportsOutline(const TextEditor::TextDocument *document) const override; bool supportsOutline(const TextEditor::TextDocument *document) const override;
bool supportsLocalUses(const TextEditor::TextDocument *document) const override;
BackendCommunicator &communicator(); BackendCommunicator &communicator();
QString dummyUiHeaderOnDiskDirPath() const; QString dummyUiHeaderOnDiskDirPath() const;

View File

@@ -1321,6 +1321,11 @@ bool CppModelManager::supportsOutline(const TextEditor::TextDocument *document)
return instance()->d->m_activeModelManagerSupport->supportsOutline(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 bool CppModelManager::isClangCodeModelActive() const
{ {
return d->m_activeModelManagerSupport != d->m_builtinModelManagerSupport; return d->m_activeModelManagerSupport != d->m_builtinModelManagerSupport;

View File

@@ -140,6 +140,7 @@ public:
static bool isCppEditor(Core::IEditor *editor); static bool isCppEditor(Core::IEditor *editor);
static bool supportsOutline(const TextEditor::TextDocument *document); static bool supportsOutline(const TextEditor::TextDocument *document);
static bool supportsLocalUses(const TextEditor::TextDocument *document);
bool isClangCodeModelActive() const; bool isClangCodeModelActive() const;
QSet<AbstractEditorSupport*> abstractEditorSupports() const; QSet<AbstractEditorSupport*> abstractEditorSupports() const;

View File

@@ -62,6 +62,7 @@ public:
virtual RefactoringEngineInterface &refactoringEngineInterface() = 0; virtual RefactoringEngineInterface &refactoringEngineInterface() = 0;
virtual std::unique_ptr<AbstractOverviewModel> createOverviewModel() = 0; virtual std::unique_ptr<AbstractOverviewModel> createOverviewModel() = 0;
virtual bool supportsOutline(const TextEditor::TextDocument *) const { return true; } virtual bool supportsOutline(const TextEditor::TextDocument *) const { return true; }
virtual bool supportsLocalUses(const TextEditor::TextDocument *) const { return true; }
}; };
class CPPEDITOR_EXPORT ModelManagerSupportProvider class CPPEDITOR_EXPORT ModelManagerSupportProvider

View File

@@ -27,6 +27,7 @@
#include "cppeditorwidget.h" #include "cppeditorwidget.h"
#include "cppeditordocument.h" #include "cppeditordocument.h"
#include "cppmodelmanager.h"
#include "cpptoolsreuse.h" #include "cpptoolsreuse.h"
#include <utils/textutils.h> #include <utils/textutils.h>
@@ -73,6 +74,9 @@ CppUseSelectionsUpdater::RunnerInfo CppUseSelectionsUpdater::update(CallType cal
auto *cppEditorDocument = qobject_cast<CppEditorDocument *>(cppEditorWidget->textDocument()); auto *cppEditorDocument = qobject_cast<CppEditorDocument *>(cppEditorWidget->textDocument());
QTC_ASSERT(cppEditorDocument, return RunnerInfo::FailedToStart); QTC_ASSERT(cppEditorDocument, return RunnerInfo::FailedToStart);
if (!CppModelManager::instance()->supportsLocalUses(cppEditorDocument))
return RunnerInfo::AlreadyUpToDate;
CursorInfoParams params; CursorInfoParams params;
params.semanticInfo = cppEditorWidget->semanticInfo(); params.semanticInfo = cppEditorWidget->semanticInfo();
params.textCursor = Utils::Text::wordStartCursor(cppEditorWidget->textCursor()); params.textCursor = Utils::Text::wordStartCursor(cppEditorWidget->textCursor());