summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2017-11-23 14:30:09 +0100
committerMarco Bubke <marco.bubke@qt.io>2018-01-17 12:22:30 +0000
commite0ea602f6cd3c3289722cd6b22ca2ba02eefc846 (patch)
tree6040ac23abfb9454cd877fdd653e90b23f000f2a /src
parent7666db896d093e450c18f6a6f12d7fa289fb789b (diff)
downloadqt-creator-e0ea602f6cd3c3289722cd6b22ca2ba02eefc846.tar.gz
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 <tobias.hunger@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/libs/utils/linecolumn.h13
-rw-r--r--src/libs/utils/textutils.cpp12
-rw-r--r--src/libs/utils/textutils.h3
-rw-r--r--src/plugins/clangrefactoring/refactoringengine.cpp17
4 files changed, 35 insertions, 10 deletions
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<LineColumn>;
+
+} // 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 <QString>
@@ -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,