aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangcodemodel/clangrefactoringengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/clangcodemodel/clangrefactoringengine.cpp')
-rw-r--r--src/plugins/clangcodemodel/clangrefactoringengine.cpp40
1 files changed, 19 insertions, 21 deletions
diff --git a/src/plugins/clangcodemodel/clangrefactoringengine.cpp b/src/plugins/clangcodemodel/clangrefactoringengine.cpp
index c9ddef546f..ff082e0a7a 100644
--- a/src/plugins/clangcodemodel/clangrefactoringengine.cpp
+++ b/src/plugins/clangcodemodel/clangrefactoringengine.cpp
@@ -47,32 +47,30 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data,
if (!processor)
return defaultCallback();
- QFuture<CppTools::CursorInfo> future = processor->requestLocalReferences(data.cursor());
- if (future.isCanceled())
+ QFuture<CppTools::CursorInfo> cursorFuture = processor->requestLocalReferences(data.cursor());
+ if (cursorFuture.isCanceled())
return defaultCallback();
- // QFuture::waitForFinished seems to block completely, not even
- // allowing to process events from QLocalSocket.
- while (!future.isFinished()) {
- if (future.isCanceled())
+ QObject::connect(&m_watcher, &FutureCursorWatcher::finished, [=]() {
+ const CppTools::CursorInfo info = m_watcher.result();
+ if (info.useRanges.empty())
return defaultCallback();
- QTC_ASSERT(startRevision == data.cursor().document()->revision(), return;);
- QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
- }
+ 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(ClangBackEnd::FilePathId(),
+ use.line,
+ use.column,
+ use.length);
+ }
+ renameSymbolsCallback(symbolName, container, data.cursor().document()->revision());
+ });
- const CppTools::CursorInfo info = future.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(ClangBackEnd::FilePathId(), use.line, use.column, use.length);
- renameSymbolsCallback(symbolName, container, data.cursor().document()->revision());
+ m_watcher.setFuture(cursorFuture);
}
}