From 66fe088ab80a3f0a679a916f9b4effe57fa35507 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Wed, 21 Feb 2018 13:00:06 +0100 Subject: Clang: Do not call processEvents call in local renaming Use QFutureWatcher and lambda instead. Task-number: QTCREATORBUG-19799 Change-Id: I00e9439d46609902cbfb02906280c0c96b8c884e Reviewed-by: Marco Bubke --- .../clangcodemodel/clangrefactoringengine.cpp | 40 ++++++++++------------ 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'src/plugins/clangcodemodel/clangrefactoringengine.cpp') 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 future = processor->requestLocalReferences(data.cursor()); - if (future.isCanceled()) + QFuture 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); } } -- cgit v1.2.1