diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2017-10-05 09:54:21 +0200 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2017-12-14 14:25:14 +0000 |
commit | 7a7123b1bc09c95b10eb1b2412669ed7c66a2e19 (patch) | |
tree | b9d35e29e1bb4398d4e1b78cc4b3522962579566 /src/plugins/clangrefactoring | |
parent | c76080410222685484515bbac86e3852138aa825 (diff) | |
download | qt-creator-7a7123b1bc09c95b10eb1b2412669ed7c66a2e19.tar.gz |
Clang: add globalFollowSymbol to RefactoringEngine
Allows to follow outside of current TU.
Change-Id: Ieea2fd72bfdf6d60a988b40efcf2f41c5a71d045
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src/plugins/clangrefactoring')
-rw-r--r-- | src/plugins/clangrefactoring/refactoringengine.cpp | 19 | ||||
-rw-r--r-- | src/plugins/clangrefactoring/refactoringengine.h | 7 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/plugins/clangrefactoring/refactoringengine.cpp b/src/plugins/clangrefactoring/refactoringengine.cpp index d76c5d61d6..75f79a7a2b 100644 --- a/src/plugins/clangrefactoring/refactoringengine.cpp +++ b/src/plugins/clangrefactoring/refactoringengine.cpp @@ -35,6 +35,7 @@ #include <clangsupport/filepathcachinginterface.h> +#include <utils/algorithm.h> #include <utils/textutils.h> #include <QTextCursor> @@ -115,6 +116,24 @@ void RefactoringEngine::findUsages(const CppTools::CursorInEditor &data, showUsagesCallback(locationsAt(data)); } +RefactoringEngine::Link RefactoringEngine::globalFollowSymbol(const CppTools::CursorInEditor &data, + const CPlusPlus::Snapshot &, + const CPlusPlus::Document::Ptr &, + CppTools::SymbolFinder *, + bool) const +{ + // TODO: replace that with specific followSymbol query + const CppTools::Usages usages = locationsAt(data); + CppTools::Usage usage = Utils::findOrDefault(usages, [&data](const CppTools::Usage &usage) { + // We've already searched in the current file, skip it. + if (usage.path == data.filePath().toString()) + return false; + return true; + }); + + return Link(usage.path, usage.line, usage.column); +} + bool RefactoringEngine::isRefactoringEngineAvailable() const { return m_server.isAvailable(); diff --git a/src/plugins/clangrefactoring/refactoringengine.h b/src/plugins/clangrefactoring/refactoringengine.h index 9f8450e961..951a18fb53 100644 --- a/src/plugins/clangrefactoring/refactoringengine.h +++ b/src/plugins/clangrefactoring/refactoringengine.h @@ -36,6 +36,8 @@ class RefactoringClientInterface; class RefactoringServerInterface; } +namespace CppTools { class SymbolFinder; } + namespace ClangRefactoring { class RefactoringEngine : public CppTools::RefactoringEngineInterface @@ -55,6 +57,11 @@ public: const QString &) override; void findUsages(const CppTools::CursorInEditor &data, CppTools::UsagesCallback &&showUsagesCallback) const override; + Link globalFollowSymbol(const CppTools::CursorInEditor &data, + const CPlusPlus::Snapshot &, + const CPlusPlus::Document::Ptr &, + CppTools::SymbolFinder *, + bool) const override; bool isRefactoringEngineAvailable() const override; void setRefactoringEngineAvailable(bool isAvailable); |