From e0ea602f6cd3c3289722cd6b22ca2ba02eefc846 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 23 Nov 2017 14:30:09 +0100 Subject: Clang: Use LineColumn instead of explicit integers for line and column With OptionalLineColumn we don't need any bool return parameter any more. Change-Id: I6f57f221c1bfdf08a92a87a7d71ea0eecf83dbcf Reviewed-by: Tobias Hunger Reviewed-by: Eike Ziller --- src/libs/utils/linecolumn.h | 13 ++++++++----- src/libs/utils/textutils.cpp | 12 ++++++++++++ src/libs/utils/textutils.h | 3 +++ src/plugins/clangrefactoring/refactoringengine.cpp | 17 ++++++++++++----- 4 files changed, 35 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/libs/utils/linecolumn.h b/src/libs/utils/linecolumn.h index d63775c8e7..20da4c7f06 100644 --- a/src/libs/utils/linecolumn.h +++ b/src/libs/utils/linecolumn.h @@ -25,6 +25,10 @@ #pragma once +#include "optional.h" + +namespace Utils { + class LineColumn { public: @@ -34,11 +38,10 @@ public: column(column) {} - bool isValid() const - { - return line >= 0 && column >= 0; - } - int line = -1; int column = -1; }; + +using OptionalLineColumn = optional; + +} // namespace Utils diff --git a/src/libs/utils/textutils.cpp b/src/libs/utils/textutils.cpp index 65b7093c5a..c42f84166f 100644 --- a/src/libs/utils/textutils.cpp +++ b/src/libs/utils/textutils.cpp @@ -46,6 +46,18 @@ bool convertPosition(const QTextDocument *document, int pos, int *line, int *col } } +Utils::OptionalLineColumn convertPosition(const QTextDocument *document, int pos) +{ + Utils::OptionalLineColumn optional; + + QTextBlock block = document->findBlock(pos); + + if (block.isValid()) + optional.emplace(block.blockNumber() + 1, pos - block.position()); + + return optional; +} + QString textAt(QTextCursor tc, int pos, int length) { if (pos < 0) diff --git a/src/libs/utils/textutils.h b/src/libs/utils/textutils.h index 9e81884271..f0143165eb 100644 --- a/src/libs/utils/textutils.h +++ b/src/libs/utils/textutils.h @@ -25,6 +25,7 @@ #pragma once +#include "linecolumn.h" #include "utils_global.h" #include @@ -39,6 +40,8 @@ namespace Text { QTCREATOR_UTILS_EXPORT bool convertPosition(const QTextDocument *document, int pos, int *line, int *column); +QTCREATOR_UTILS_EXPORT +Utils::OptionalLineColumn convertPosition(const QTextDocument *document, int pos); QTCREATOR_UTILS_EXPORT QString textAt(QTextCursor tc, int pos, int length); diff --git a/src/plugins/clangrefactoring/refactoringengine.cpp b/src/plugins/clangrefactoring/refactoringengine.cpp index 75f79a7a2b..7c69cfc9d1 100644 --- a/src/plugins/clangrefactoring/refactoringengine.cpp +++ b/src/plugins/clangrefactoring/refactoringengine.cpp @@ -94,13 +94,20 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data, CppTools::Usages RefactoringEngine::locationsAt(const CppTools::CursorInEditor &data) const { - int line = 0, column = 0; + CppTools::Usages usages; + QTextCursor cursor = Utils::Text::wordStartCursor(data.cursor()); - Utils::Text::convertPosition(cursor.document(), cursor.position(), &line, &column); + Utils::OptionalLineColumn lineColumn = Utils::Text::convertPosition(cursor.document(), + cursor.position()); + + if (lineColumn) { + const QByteArray filePath = data.filePath().toString().toUtf8(); + const ClangBackEnd::FilePathId filePathId = m_filePathCache.filePathId(ClangBackEnd::FilePathView(filePath)); + + usages = m_symbolQuery.sourceUsagesAt(filePathId, lineColumn->line, lineColumn->column + 1); + } - const QByteArray filePath = data.filePath().toString().toUtf8(); - const ClangBackEnd::FilePathId filePathId = m_filePathCache.filePathId(ClangBackEnd::FilePathView(filePath)); - return m_symbolQuery.sourceUsagesAt(filePathId, line, column + 1); + return usages; } void RefactoringEngine::globalRename(const CppTools::CursorInEditor &data, -- cgit v1.2.1