summaryrefslogtreecommitdiff
path: root/src/plugins/clangrefactoring/refactoringengine.cpp
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2017-09-19 15:38:20 +0200
committerIvan Donchevskii <ivan.donchevskii@qt.io>2017-10-24 10:46:52 +0000
commit050b4dd2f5b2545e3afcd5b7f2c7293be8ddb74c (patch)
tree7699d5fd6a4ae1603548e04f4f62e258d3405cbd /src/plugins/clangrefactoring/refactoringengine.cpp
parent263cdc03977a89eeb61d8dddd99efb7bf1e752fa (diff)
downloadqt-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/clangrefactoring/refactoringengine.cpp')
-rw-r--r--src/plugins/clangrefactoring/refactoringengine.cpp45
1 files changed, 40 insertions, 5 deletions
diff --git a/src/plugins/clangrefactoring/refactoringengine.cpp b/src/plugins/clangrefactoring/refactoringengine.cpp
index 083b0089ff..edccda68f8 100644
--- a/src/plugins/clangrefactoring/refactoringengine.cpp
+++ b/src/plugins/clangrefactoring/refactoringengine.cpp
@@ -24,20 +24,22 @@
****************************************************************************/
#include "refactoringengine.h"
-
#include "projectpartutilities.h"
-
#include <refactoringserverinterface.h>
#include <requestsourcelocationforrenamingmessage.h>
#include <cpptools/compileroptionsbuilder.h>
#include <cpptools/cpptoolsreuse.h>
-#include <texteditor/textdocument.h>
+#include <clangsupport/filepathcachinginterface.h>
+
+#include <utils/textutils.h>
#include <QTextCursor>
#include <QTextDocument>
+#include <QTextBlock>
+#include <QDir>
#include <algorithm>
@@ -47,13 +49,17 @@ using ClangBackEnd::RequestSourceLocationsForRenamingMessage;
RefactoringEngine::RefactoringEngine(ClangBackEnd::RefactoringServerInterface &server,
ClangBackEnd::RefactoringClientInterface &client,
- ClangBackEnd::FilePathCachingInterface &filePathCache)
+ ClangBackEnd::FilePathCachingInterface &filePathCache,
+ SymbolQueryInterface &symbolQuery)
: m_server(server),
m_client(client),
- m_filePathCache(filePathCache)
+ m_filePathCache(filePathCache),
+ m_symbolQuery(symbolQuery)
{
}
+RefactoringEngine::~RefactoringEngine() = default;
+
void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data,
CppTools::ProjectPart *projectPart,
RenameCallback &&renameSymbolsCallback)
@@ -89,6 +95,35 @@ void RefactoringEngine::startGlobalRenaming(const CppTools::CursorInEditor &)
// TODO: implement
}
+CppTools::Usages RefactoringEngine::locationsAt(const CppTools::CursorInEditor &data) const
+{
+ int line = 0, column = 0;
+ QTextCursor cursor = Utils::Text::wordStartCursor(data.cursor());
+ Utils::Text::convertPosition(cursor.document(), cursor.position(), &line, &column);
+
+ const QByteArray filePath = data.filePath().toString().toLatin1();
+ const ClangBackEnd::FilePathId filePathId = m_filePathCache.filePathId(filePath.constData());
+ ClangRefactoring::SourceLocations usages = m_symbolQuery.locationsAt(filePathId, line,
+ column + 1);
+ CppTools::Usages result;
+ result.reserve(usages.size());
+ for (const auto &location : usages) {
+ const Utils::SmallStringView path = m_filePathCache.filePath(location.filePathId).path();
+ result.push_back({path, location.line, location.column});
+ }
+ return result;
+}
+
+void RefactoringEngine::findUsages(const CppTools::CursorInEditor &data,
+ CppTools::UsagesCallback &&showUsagesCallback) const
+{
+ int line = 0, column = 0;
+ QTextCursor cursor = Utils::Text::wordStartCursor(data.cursor());
+ Utils::Text::convertPosition(cursor.document(), cursor.position(), &line, &column);
+
+ showUsagesCallback(locationsAt(data));
+}
+
bool RefactoringEngine::isRefactoringEngineAvailable() const
{
return m_server.isAvailable();