diff --git a/src/plugins/clangcodemodel/clangbackendcommunicator.cpp b/src/plugins/clangcodemodel/clangbackendcommunicator.cpp index a0f56e37570..029df103329 100644 --- a/src/plugins/clangcodemodel/clangbackendcommunicator.cpp +++ b/src/plugins/clangcodemodel/clangbackendcommunicator.cpp @@ -301,29 +301,6 @@ void BackendCommunicator::documentsChangedWithRevisionCheck(const FileContainer } } -QFuture BackendCommunicator::requestReferences( - const FileContainer &fileContainer, - quint32 line, - quint32 column, - const CppEditor::SemanticInfo::LocalUseMap &localUses) -{ - const RequestReferencesMessage message(fileContainer, line, column); - m_sender->requestReferences(message); - - return m_receiver.addExpectedReferencesMessage(message.ticketNumber, localUses); -} - -QFuture BackendCommunicator::requestLocalReferences( - const FileContainer &fileContainer, - quint32 line, - quint32 column) -{ - const RequestReferencesMessage message(fileContainer, line, column, true); - m_sender->requestReferences(message); - - return m_receiver.addExpectedReferencesMessage(message.ticketNumber); -} - void BackendCommunicator::documentsChangedWithRevisionCheck(Core::IDocument *document) { const auto textDocument = qobject_cast(document); diff --git a/src/plugins/clangcodemodel/clangbackendcommunicator.h b/src/plugins/clangcodemodel/clangbackendcommunicator.h index ac2068144db..7487be17b1e 100644 --- a/src/plugins/clangcodemodel/clangbackendcommunicator.h +++ b/src/plugins/clangcodemodel/clangbackendcommunicator.h @@ -91,15 +91,6 @@ public: qint32 funcNameStartLine = -1, qint32 funcNameStartColumn = -1); void cancelCompletions(TextEditor::IAssistProcessor *processor); - QFuture requestReferences( - const FileContainer &fileContainer, - quint32 line, - quint32 column, - const LocalUseMap &localUses); - QFuture requestLocalReferences( - const FileContainer &fileContainer, - quint32 line, - quint32 column); void updateChangeContentStartPosition(const QString &filePath, int position); bool isNotWaitingForCompletion() const; diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.cpp b/src/plugins/clangcodemodel/clangbackendreceiver.cpp index 496dfa0aec0..8764022a67b 100644 --- a/src/plugins/clangcodemodel/clangbackendreceiver.cpp +++ b/src/plugins/clangcodemodel/clangbackendreceiver.cpp @@ -108,21 +108,6 @@ void BackendReceiver::deleteProcessorsOfEditorWidget(TextEditor::TextEditorWidge m_assistProcessorsTable.remove(item); } -QFuture BackendReceiver::addExpectedReferencesMessage( - quint64 ticket, - const CppEditor::SemanticInfo::LocalUseMap &localUses) -{ - QTC_CHECK(!m_referencesTable.contains(ticket)); - - QFutureInterface futureInterface; - futureInterface.reportStarted(); - - const ReferencesEntry entry{futureInterface, localUses}; - m_referencesTable.insert(ticket, entry); - - return futureInterface.future(); -} - bool BackendReceiver::isExpectingCompletionsMessage() const { return !m_assistProcessorsTable.isEmpty(); diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.h b/src/plugins/clangcodemodel/clangbackendreceiver.h index 59e6f06b0d0..92bb878d359 100644 --- a/src/plugins/clangcodemodel/clangbackendreceiver.h +++ b/src/plugins/clangcodemodel/clangbackendreceiver.h @@ -58,10 +58,6 @@ public: void cancelProcessor(TextEditor::IAssistProcessor *processor); void deleteProcessorsOfEditorWidget(TextEditor::TextEditorWidget *textEditorWidget); - QFuture - addExpectedReferencesMessage(quint64 ticket, - const CppEditor::SemanticInfo::LocalUseMap &localUses - = CppEditor::SemanticInfo::LocalUseMap()); bool isExpectingCompletionsMessage() const; void reset(); diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 6b34d9b22c6..a1635b885a5 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -205,64 +205,10 @@ CppEditor::BaseEditorDocumentParser::Configuration ClangEditorDocumentProcessor: return m_parser->configuration(); } -static bool isCursorOnIdentifier(const QTextCursor &textCursor) -{ - QTextDocument *document = textCursor.document(); - return CppEditor::isValidIdentifierChar(document->characterAt(textCursor.position())); -} - -static QFuture defaultCursorInfoFuture() -{ - QFutureInterface futureInterface; - futureInterface.reportResult(CppEditor::CursorInfo()); - futureInterface.reportFinished(); - - return futureInterface.future(); -} - -static bool convertPosition(const QTextCursor &textCursor, int *line, int *column) -{ - const bool converted = ::Utils::Text::convertPosition(textCursor.document(), - textCursor.position(), - line, - column); - QTC_CHECK(converted); - return converted; -} - QFuture ClangEditorDocumentProcessor::cursorInfo(const CppEditor::CursorInfoParams ¶ms) { - int line, column; - convertPosition(params.textCursor, &line, &column); - - if (!isCursorOnIdentifier(params.textCursor)) - return defaultCursorInfoFuture(); - - column = clangColumn(params.textCursor.document()->findBlockByNumber(line - 1), column); - const CppEditor::SemanticInfo::LocalUseMap localUses - = CppEditor::BuiltinCursorInfo::findLocalUses(params.semanticInfo.doc, line, column); - - return m_communicator.requestReferences(simpleFileContainer(), - static_cast(line), - static_cast(column), - localUses); -} - -QFuture ClangEditorDocumentProcessor::requestLocalReferences( - const QTextCursor &cursor) -{ - int line, column; - convertPosition(cursor, &line, &column); - ++column; // for 1-based columns - - // TODO: check that by highlighting items - if (!isCursorOnIdentifier(cursor)) - return defaultCursorInfoFuture(); - - return m_communicator.requestLocalReferences(simpleFileContainer(), - static_cast(line), - static_cast(column)); + return m_builtinProcessor.cursorInfo(params); } ClangEditorDocumentProcessor *ClangEditorDocumentProcessor::get(const QString &filePath) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index 27eb79415d4..d049672037b 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -78,7 +78,6 @@ public: CppEditor::BaseEditorDocumentParser::Configuration parserConfig() const; QFuture cursorInfo(const CppEditor::CursorInfoParams ¶ms) override; - QFuture requestLocalReferences(const QTextCursor &cursor) override; void closeBackendDocument(); diff --git a/src/plugins/clangcodemodel/clangrefactoringengine.cpp b/src/plugins/clangcodemodel/clangrefactoringengine.cpp index 751700c1b9d..1edb6f6ae21 100644 --- a/src/plugins/clangcodemodel/clangrefactoringengine.cpp +++ b/src/plugins/clangcodemodel/clangrefactoringengine.cpp @@ -24,11 +24,9 @@ ****************************************************************************/ #include "clangrefactoringengine.h" -#include "clangeditordocumentprocessor.h" #include "clangdclient.h" #include "clangmodelmanagersupport.h" -#include "sourcelocationscontainer.h" #include #include @@ -39,7 +37,7 @@ namespace ClangCodeModel { namespace Internal { void RefactoringEngine::startLocalRenaming(const CppEditor::CursorInEditor &data, - const CppEditor::ProjectPart *, + const CppEditor::ProjectPart *projectPart, RenameCallback &&renameSymbolsCallback) { ClangdClient * const client @@ -50,47 +48,8 @@ void RefactoringEngine::startLocalRenaming(const CppEditor::CursorInEditor &data return; } - ClangEditorDocumentProcessor *processor = ClangEditorDocumentProcessor::get( - data.filePath().toString()); - const int startRevision = data.cursor().document()->revision(); - - using ClangBackEnd::SourceLocationsContainer; - auto defaultCallback = [renameSymbolsCallback, startRevision]() { - return renameSymbolsCallback(QString(), SourceLocationsContainer{}, startRevision); - }; - - if (!processor) - return defaultCallback(); - - QFuture cursorFuture = processor->requestLocalReferences(data.cursor()); - if (cursorFuture.isCanceled()) - return defaultCallback(); - - if (m_watcher) - m_watcher->cancel(); - - m_watcher.reset(new FutureCursorWatcher()); - QObject::connect(m_watcher.get(), &FutureCursorWatcher::finished, [=]() { - if (m_watcher->isCanceled()) - return defaultCallback(); - const CppEditor::CursorInfo info = m_watcher->result(); - if (info.useRanges.empty()) - return defaultCallback(); - - QTextCursor cursor = Utils::Text::wordStartCursor(data.cursor()); - cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, - info.useRanges.first().length); - const QString symbolName = cursor.selectedText(); - ClangBackEnd::SourceLocationsContainer container; - for (auto& use : info.useRanges) { - container.insertSourceLocation({}, - use.line, - use.column); - } - renameSymbolsCallback(symbolName, container, data.cursor().document()->revision()); - }); - - m_watcher->setFuture(cursorFuture); + CppEditor::CppModelManager::builtinRefactoringEngine() + ->startLocalRenaming(data, projectPart, std::move(renameSymbolsCallback)); } void RefactoringEngine::globalRename(const CppEditor::CursorInEditor &cursor, diff --git a/src/plugins/cppeditor/baseeditordocumentprocessor.h b/src/plugins/cppeditor/baseeditordocumentprocessor.h index 1c5720d1e99..d009dfc30f5 100644 --- a/src/plugins/cppeditor/baseeditordocumentprocessor.h +++ b/src/plugins/cppeditor/baseeditordocumentprocessor.h @@ -88,7 +88,6 @@ public: virtual void setParserConfig(const BaseEditorDocumentParser::Configuration &config); virtual QFuture cursorInfo(const CursorInfoParams ¶ms) = 0; - virtual QFuture requestLocalReferences(const QTextCursor &cursor) = 0; QString filePath() const { return m_filePath; } diff --git a/src/plugins/cppeditor/builtineditordocumentprocessor.cpp b/src/plugins/cppeditor/builtineditordocumentprocessor.cpp index 636beedb74a..df1100862cb 100644 --- a/src/plugins/cppeditor/builtineditordocumentprocessor.cpp +++ b/src/plugins/cppeditor/builtineditordocumentprocessor.cpp @@ -251,15 +251,6 @@ BuiltinEditorDocumentProcessor::cursorInfo(const CursorInfoParams ¶ms) return BuiltinCursorInfo::run(params); } -QFuture BuiltinEditorDocumentProcessor::requestLocalReferences(const QTextCursor &) -{ - QFutureInterface futureInterface; - futureInterface.reportResult(CursorInfo()); - futureInterface.reportFinished(); - - return futureInterface.future(); -} - void BuiltinEditorDocumentProcessor::setSemanticHighlightingChecker( const SemanticHighlightingChecker &checker) { diff --git a/src/plugins/cppeditor/builtineditordocumentprocessor.h b/src/plugins/cppeditor/builtineditordocumentprocessor.h index 4f04a168124..a058f4f6fcb 100644 --- a/src/plugins/cppeditor/builtineditordocumentprocessor.h +++ b/src/plugins/cppeditor/builtineditordocumentprocessor.h @@ -53,7 +53,6 @@ public: bool isParserRunning() const override; QFuture cursorInfo(const CursorInfoParams ¶ms) override; - QFuture requestLocalReferences(const QTextCursor &) override; using SemanticHighlightingChecker = std::function; void setSemanticHighlightingChecker(const SemanticHighlightingChecker &checker);