diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp index cfb52f15283..bb4d4c30104 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp @@ -129,8 +129,10 @@ void IpcReceiver::deleteProcessorsOfEditorWidget(TextEditor::TextEditorWidget *t } } -QFuture IpcReceiver::addExpectedReferencesMessage(quint64 ticket, - QTextDocument *textDocument) +QFuture IpcReceiver::addExpectedReferencesMessage( + quint64 ticket, + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses) { QTC_CHECK(textDocument); QTC_CHECK(!m_referencesTable.contains(ticket)); @@ -138,7 +140,7 @@ QFuture IpcReceiver::addExpectedReferencesMessage(quint64 QFutureInterface futureInterface; futureInterface.reportStarted(); - const ReferencesEntry entry{futureInterface, textDocument}; + const ReferencesEntry entry{futureInterface, textDocument, localUses}; m_referencesTable.insert(ticket, entry); return futureInterface.future(); @@ -229,6 +231,7 @@ CppTools::CursorInfo::Range toCursorInfoRange(const QTextDocument &textDocument, static CppTools::CursorInfo toCursorInfo(const QTextDocument &textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses, const ReferencesMessage &message) { CppTools::CursorInfo result; @@ -239,6 +242,7 @@ CppTools::CursorInfo toCursorInfo(const QTextDocument &textDocument, result.useRanges.append(toCursorInfoRange(textDocument, reference)); result.useRanges.reserve(references.size()); + result.localUses = localUses; return result; } @@ -257,7 +261,7 @@ void IpcReceiver::references(const ReferencesMessage &message) return; // Editor document closed or a new request was issued making this result outdated. QTC_ASSERT(entry.textDocument, return); - futureInterface.reportResult(toCursorInfo(*entry.textDocument, message)); + futureInterface.reportResult(toCursorInfo(*entry.textDocument, entry.localUses, message)); futureInterface.reportFinished(); } @@ -672,12 +676,14 @@ QFuture IpcCommunicator::requestReferences( const FileContainer &fileContainer, quint32 line, quint32 column, - QTextDocument *textDocument) + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses) { const RequestReferencesMessage message(fileContainer, line, column); m_ipcSender->requestReferences(message); - return m_ipcReceiver.addExpectedReferencesMessage(message.ticketNumber(), textDocument); + return m_ipcReceiver.addExpectedReferencesMessage(message.ticketNumber(), textDocument, + localUses); } void IpcCommunicator::updateTranslationUnitWithRevisionCheck(Core::IDocument *document) diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.h b/src/plugins/clangcodemodel/clangbackendipcintegration.h index e98565f48c1..842d68f2662 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.h +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.h @@ -75,8 +75,10 @@ public: void addExpectedCodeCompletedMessage(quint64 ticket, ClangCompletionAssistProcessor *processor); void deleteProcessorsOfEditorWidget(TextEditor::TextEditorWidget *textEditorWidget); - QFuture addExpectedReferencesMessage(quint64 ticket, - QTextDocument *textDocument); + QFuture + addExpectedReferencesMessage(quint64 ticket, + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses); bool isExpectingCodeCompletedMessage() const; void reset(); @@ -99,11 +101,14 @@ private: struct ReferencesEntry { ReferencesEntry() = default; ReferencesEntry(QFutureInterface futureInterface, - QTextDocument *textDocument) + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses) : futureInterface(futureInterface) - , textDocument(textDocument) {} + , textDocument(textDocument) + , localUses(localUses) {} QFutureInterface futureInterface; QPointer textDocument; + CppTools::SemanticInfo::LocalUseMap localUses; }; QHash m_referencesTable; }; @@ -149,9 +154,12 @@ public: void registerUnsavedFilesForEditor(const FileContainers &fileContainers); void unregisterUnsavedFilesForEditor(const FileContainers &fileContainers); void requestDocumentAnnotations(const ClangBackEnd::FileContainer &fileContainer); - QFuture requestReferences(const FileContainer &fileContainer, - quint32 line, - quint32 column, QTextDocument *textDocument); + QFuture requestReferences( + const FileContainer &fileContainer, + quint32 line, + quint32 column, + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses); void completeCode(ClangCompletionAssistProcessor *assistProcessor, const QString &filePath, quint32 line, quint32 column, diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index e29f72ae9ef..943c126c59f 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -334,11 +335,14 @@ ClangEditorDocumentProcessor::cursorInfo(const CppTools::CursorInfoParams ¶m const QTextBlock block = params.textCursor.document()->findBlockByNumber(line - 1); column += ClangCodeModel::Utils::extraUtf8CharsShift(block.text(), column); + const CppTools::SemanticInfo::LocalUseMap localUses + = CppTools::BuiltinCursorInfo::findLocalUses(params.semanticInfo.doc, line, column); return m_ipcCommunicator.requestReferences(simpleFileContainer(), static_cast(line), static_cast(column), - textDocument()); + textDocument(), + localUses); } ClangBackEnd::FileContainer ClangEditorDocumentProcessor::fileContainerWithArguments() const diff --git a/src/plugins/cpptools/builtincursorinfo.cpp b/src/plugins/cpptools/builtincursorinfo.cpp index cd46380e19c..6cdf19e5fef 100644 --- a/src/plugins/cpptools/builtincursorinfo.cpp +++ b/src/plugins/cpptools/builtincursorinfo.cpp @@ -47,7 +47,6 @@ using namespace CPlusPlus; using SemanticUses = QList; namespace CppTools { -namespace Internal { namespace { CursorInfo::Range toRange(const SemanticInfo::Use &use) @@ -186,7 +185,8 @@ private: { CursorInfo result; - const CppTools::SemanticInfo::LocalUseMap localUses = findLocalUses(); + const CppTools::SemanticInfo::LocalUseMap localUses + = BuiltinCursorInfo::findLocalUses(m_document, m_line, m_column); result.localUses = localUses; splitLocalUses(localUses, &result.useRanges, &result.unusedVariablesRanges); @@ -200,16 +200,6 @@ private: return result; // OK, result.unusedVariablesRanges will be passed on } - CppTools::SemanticInfo::LocalUseMap findLocalUses() const - { - AST *ast = m_document->translationUnit()->ast(); - FunctionDefinitionUnderCursor functionDefinitionUnderCursor(m_document->translationUnit()); - DeclarationAST *declaration = functionDefinitionUnderCursor(ast, - static_cast(m_line), - static_cast(m_column)); - return CppTools::LocalSymbols(m_document, declaration).uses; - } - void splitLocalUses(const CppTools::SemanticInfo::LocalUseMap &uses, CursorInfo::Ranges *rangesForLocalVariableUnderCursor, CursorInfo::Ranges *rangesForLocalUnusedVariables) const @@ -365,5 +355,15 @@ QFuture BuiltinCursorInfo::run(const CursorInfoParams &cursorInfoPar return Utils::runAsync(&FindUses::find, document, snapshot, line, column, scope, expression); } -} // namespace Internal +CppTools::SemanticInfo::LocalUseMap +BuiltinCursorInfo::findLocalUses(const Document::Ptr &document, int line, int column) +{ + AST *ast = document->translationUnit()->ast(); + FunctionDefinitionUnderCursor functionDefinitionUnderCursor(document->translationUnit()); + DeclarationAST *declaration = functionDefinitionUnderCursor(ast, + static_cast(line), + static_cast(column)); + return CppTools::LocalSymbols(document, declaration).uses; +} + } // namespace CppTools diff --git a/src/plugins/cpptools/builtincursorinfo.h b/src/plugins/cpptools/builtincursorinfo.h index 3e24378bde2..3a6ef71628d 100644 --- a/src/plugins/cpptools/builtincursorinfo.h +++ b/src/plugins/cpptools/builtincursorinfo.h @@ -26,17 +26,21 @@ #pragma once #include "cppcursorinfo.h" +#include "cpptools_global.h" + +#include #include namespace CppTools { -namespace Internal { -class BuiltinCursorInfo +class CPPTOOLS_EXPORT BuiltinCursorInfo { public: static QFuture run(const CursorInfoParams ¶ms); + + static CppTools::SemanticInfo::LocalUseMap + findLocalUses(const CPlusPlus::Document::Ptr &document, int line, int column); }; -} // namespace Internal } // namespace CppTools diff --git a/src/plugins/cpptools/builtineditordocumentprocessor.cpp b/src/plugins/cpptools/builtineditordocumentprocessor.cpp index d5c57003b6b..95f4932e085 100644 --- a/src/plugins/cpptools/builtineditordocumentprocessor.cpp +++ b/src/plugins/cpptools/builtineditordocumentprocessor.cpp @@ -257,7 +257,7 @@ bool BuiltinEditorDocumentProcessor::isParserRunning() const QFuture BuiltinEditorDocumentProcessor::cursorInfo(const CursorInfoParams ¶ms) { - return Internal::BuiltinCursorInfo::run(params); + return BuiltinCursorInfo::run(params); } void BuiltinEditorDocumentProcessor::onParserFinished(CPlusPlus::Document::Ptr document,