diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2017-09-19 15:38:20 +0200 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2017-10-24 10:46:52 +0000 |
commit | 050b4dd2f5b2545e3afcd5b7f2c7293be8ddb74c (patch) | |
tree | 7699d5fd6a4ae1603548e04f4f62e258d3405cbd /src/plugins/cpptools/cpprefactoringengine.cpp | |
parent | 263cdc03977a89eeb61d8dddd99efb7bf1e752fa (diff) | |
download | qt-creator-050b4dd2f5b2545e3afcd5b7f2c7293be8ddb74c.tar.gz |
Clang: implement findUsages with existing index
Functionality is limited to the abilities of
current index which is not updated and is
generated only at project open.
Search box temporarily doesn't allow to "Search again".
Change-Id: Id1047f27ad0aafc901f06aa51ad38ceab95eaebb
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cpprefactoringengine.cpp')
-rw-r--r-- | src/plugins/cpptools/cpprefactoringengine.cpp | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/src/plugins/cpptools/cpprefactoringengine.cpp b/src/plugins/cpptools/cpprefactoringengine.cpp index 705a8ecc99..ffa48edbd0 100644 --- a/src/plugins/cpptools/cpprefactoringengine.cpp +++ b/src/plugins/cpptools/cpprefactoringengine.cpp @@ -23,15 +23,20 @@ ** ****************************************************************************/ +#include "cppcanonicalsymbol.h" +#include "cppmodelmanager.h" #include "cpprefactoringengine.h" -#include "texteditor/texteditor.h" +#include "cppsemanticinfo.h" +#include "cpptoolsreuse.h" -#include "utils/qtcassert.h" +#include <texteditor/texteditor.h> + +#include <utils/qtcassert.h> namespace CppTools { -void CppRefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data, - CppTools::ProjectPart *, +void CppRefactoringEngine::startLocalRenaming(const CursorInEditor &data, + ProjectPart *, RenameCallback &&renameSymbolsCallback) { CppEditorWidgetInterface *editorWidget = data.editorWidget(); @@ -45,11 +50,35 @@ void CppRefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &da data.cursor().document()->revision()); } -void CppRefactoringEngine::startGlobalRenaming(const CppTools::CursorInEditor &data) +void CppRefactoringEngine::startGlobalRenaming(const CursorInEditor &data) { CppEditorWidgetInterface *editorWidget = data.editorWidget(); QTC_ASSERT(editorWidget, return;); editorWidget->renameUsages(); } +void CppRefactoringEngine::findUsages(const CursorInEditor &data, + UsagesCallback &&) const +{ + CppModelManager *modelManager = CppModelManager::instance(); + if (!modelManager) + return; + + CppEditorWidgetInterface *editorWidget = data.editorWidget(); + QTC_ASSERT(editorWidget, return;); + + SemanticInfo info = editorWidget->semanticInfo(); + info.snapshot = modelManager->snapshot(); + info.snapshot.insert(info.doc); + const QTextCursor &cursor = data.cursor(); + if (const CPlusPlus::Macro *macro = findCanonicalMacro(cursor, info.doc)) { + modelManager->findMacroUsages(*macro); + } else { + CanonicalSymbol cs(info.doc, info.snapshot); + CPlusPlus::Symbol *canonicalSymbol = cs(cursor); + if (canonicalSymbol) + modelManager->findUsages(canonicalSymbol, cs.context()); + } +} + } // namespace CppEditor |