summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cpprefactoringengine.cpp
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2017-09-25 10:51:39 +0200
committerIvan Donchevskii <ivan.donchevskii@qt.io>2017-10-25 13:35:48 +0000
commit81f5c1c8ec19bb58fc4cfb607e2c2f8ebf5cc6d8 (patch)
tree151894bc6af1cab7478de8bda1265870052d0a5e /src/plugins/cpptools/cpprefactoringengine.cpp
parent3bea2914276b3bd3578776e186977990da118c12 (diff)
downloadqt-creator-81f5c1c8ec19bb58fc4cfb607e2c2f8ebf5cc6d8.tar.gz
Clang: implement globalRename based on clang Index
Has the same limitations as findUsages. Change-Id: I8de4df2ecbfd8a4f3073666994398dc43af0d73c Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cpprefactoringengine.cpp')
-rw-r--r--src/plugins/cpptools/cpprefactoringengine.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/plugins/cpptools/cpprefactoringengine.cpp b/src/plugins/cpptools/cpprefactoringengine.cpp
index ffa48edbd0..ba391ec279 100644
--- a/src/plugins/cpptools/cpprefactoringengine.cpp
+++ b/src/plugins/cpptools/cpprefactoringengine.cpp
@@ -50,11 +50,29 @@ void CppRefactoringEngine::startLocalRenaming(const CursorInEditor &data,
data.cursor().document()->revision());
}
-void CppRefactoringEngine::startGlobalRenaming(const CursorInEditor &data)
+void CppRefactoringEngine::globalRename(const CursorInEditor &data,
+ UsagesCallback &&,
+ const QString &replacement)
{
+ CppModelManager *modelManager = CppModelManager::instance();
+ if (!modelManager)
+ return;
+
CppEditorWidgetInterface *editorWidget = data.editorWidget();
QTC_ASSERT(editorWidget, return;);
- editorWidget->renameUsages();
+
+ 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->renameMacroUsages(*macro, replacement);
+ } else {
+ CanonicalSymbol cs(info.doc, info.snapshot);
+ CPlusPlus::Symbol *canonicalSymbol = cs(cursor);
+ if (canonicalSymbol)
+ modelManager->renameUsages(canonicalSymbol, cs.context(), replacement);
+ }
}
void CppRefactoringEngine::findUsages(const CursorInEditor &data,