diff --git a/src/plugins/clangcodemodel/clangrefactoringengine.cpp b/src/plugins/clangcodemodel/clangrefactoringengine.cpp index 4f4dfb1a551..3ef8a56f759 100644 --- a/src/plugins/clangcodemodel/clangrefactoringengine.cpp +++ b/src/plugins/clangcodemodel/clangrefactoringengine.cpp @@ -119,5 +119,28 @@ void RefactoringEngine::findUsages(const CppTools::CursorInEditor &cursor, client->findUsages(cursor.textDocument(), cursor.cursor(), {}); } +void RefactoringEngine::globalFollowSymbol( + const CppTools::CursorInEditor &cursor, + Utils::ProcessLinkCallback &&callback, + const CPlusPlus::Snapshot &snapshot, + const CPlusPlus::Document::Ptr &doc, + CppTools::SymbolFinder *symbolFinder, + bool inNextSplit) const +{ + ProjectExplorer::Project * const project + = ProjectExplorer::SessionManager::projectForFile(cursor.filePath()); + ClangdClient * const client = ClangModelManagerSupport::instance()->clientForProject(project); + if (!client || !client->isFullyIndexed()) { + CppTools::CppModelManager::builtinRefactoringEngine() + ->globalFollowSymbol(cursor, std::move(callback), snapshot, doc, symbolFinder, + inNextSplit); + return; + } + QTC_ASSERT(client->documentOpen(cursor.textDocument()), + client->openDocument(cursor.textDocument())); + client->symbolSupport().findLinkAt(cursor.textDocument(), cursor.cursor(), std::move(callback), + true); +} + } // namespace Internal } // namespace ClangCodeModel diff --git a/src/plugins/clangcodemodel/clangrefactoringengine.h b/src/plugins/clangcodemodel/clangrefactoringengine.h index 30729c86b96..c4e728b0229 100644 --- a/src/plugins/clangcodemodel/clangrefactoringengine.h +++ b/src/plugins/clangcodemodel/clangrefactoringengine.h @@ -48,14 +48,12 @@ public: const QString &replacement) override; void findUsages(const CppTools::CursorInEditor &cursor, CppTools::UsagesCallback &&callback) const override; - void globalFollowSymbol(const CppTools::CursorInEditor &, - ::Utils::ProcessLinkCallback &&, - const CPlusPlus::Snapshot &, - const CPlusPlus::Document::Ptr &, - CppTools::SymbolFinder *, - bool) const override - { - } + void globalFollowSymbol(const CppTools::CursorInEditor &cursor, + ::Utils::ProcessLinkCallback &&callback, + const CPlusPlus::Snapshot &snapshot, + const CPlusPlus::Document::Ptr &doc, + CppTools::SymbolFinder *symbolFinder, + bool inNextSplit) const override; private: using FutureCursorWatcher = QFutureWatcher; diff --git a/src/plugins/cppeditor/cppeditorwidget.cpp b/src/plugins/cppeditor/cppeditorwidget.cpp index 9f8854baeac..3c317ae0639 100644 --- a/src/plugins/cppeditor/cppeditorwidget.cpp +++ b/src/plugins/cppeditor/cppeditorwidget.cpp @@ -786,13 +786,14 @@ void CppEditorWidget::findLinkAt(const QTextCursor &cursor, const Utils::FilePath &filePath = textDocument()->filePath(); - followSymbolInterface().findLink(CppTools::CursorInEditor{cursor, filePath, this}, - std::move(processLinkCallback), - resolveTarget, - d->m_modelManager->snapshot(), - d->m_lastSemanticInfo.doc, - d->m_modelManager->symbolFinder(), - inNextSplit); + followSymbolInterface().findLink( + CppTools::CursorInEditor{cursor, filePath, this, textDocument()}, + std::move(processLinkCallback), + resolveTarget, + d->m_modelManager->snapshot(), + d->m_lastSemanticInfo.doc, + d->m_modelManager->symbolFinder(), + inNextSplit); } unsigned CppEditorWidget::documentRevision() const diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index ea899371895..55c5098878e 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -344,7 +344,7 @@ void CppModelManager::globalFollowSymbol( SymbolFinder *symbolFinder, bool inNextSplit) const { - RefactoringEngineInterface *engine = getRefactoringEngine(d->m_refactoringEngines); + RefactoringEngineInterface *engine = getRefactoringEngine(d->m_refactoringEngines, false); QTC_ASSERT(engine, return;); engine->globalFollowSymbol(data, std::move(processLinkCallback), snapshot, documentFromSemanticInfo, symbolFinder, inNextSplit);