Clang: Fix possible future watcher issues in local renaming

Use the same code pattern as in asynchronous branch of
CppUseSelectionsUpdater::update.

Change-Id: I7c06b883a5abe1324cb63fa410247ef7f50321ae
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Ivan Donchevskii
2018-04-23 12:15:42 +02:00
parent 28062f0c68
commit feac99c9ac
2 changed files with 9 additions and 5 deletions

View File

@@ -51,10 +51,14 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data,
if (cursorFuture.isCanceled()) if (cursorFuture.isCanceled())
return defaultCallback(); return defaultCallback();
QObject::connect(&m_watcher, &FutureCursorWatcher::finished, [=]() { if (m_watcher)
if (m_watcher.isCanceled()) m_watcher->cancel();
m_watcher.reset(new FutureCursorWatcher());
QObject::connect(m_watcher.get(), &FutureCursorWatcher::finished, [=]() {
if (m_watcher->isCanceled())
return defaultCallback(); return defaultCallback();
const CppTools::CursorInfo info = m_watcher.result(); const CppTools::CursorInfo info = m_watcher->result();
if (info.useRanges.empty()) if (info.useRanges.empty())
return defaultCallback(); return defaultCallback();
@@ -72,7 +76,7 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data,
renameSymbolsCallback(symbolName, container, data.cursor().document()->revision()); renameSymbolsCallback(symbolName, container, data.cursor().document()->revision());
}); });
m_watcher.setFuture(cursorFuture); m_watcher->setFuture(cursorFuture);
} }
} }

View File

@@ -55,7 +55,7 @@ public:
private: private:
using FutureCursorWatcher = QFutureWatcher<CppTools::CursorInfo>; using FutureCursorWatcher = QFutureWatcher<CppTools::CursorInfo>;
FutureCursorWatcher m_watcher; std::unique_ptr<FutureCursorWatcher> m_watcher;
}; };
} // namespace ClangRefactoring } // namespace ClangRefactoring