aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangcodemodel/clangbackendreceiver.cpp
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2017-11-29 16:08:06 +0100
committerIvan Donchevskii <ivan.donchevskii@qt.io>2018-01-26 15:39:31 +0000
commit09310bcdc68e4242106e3f15761116797f8f0d78 (patch)
tree478b750fe83632d4c66f131792322a11df4a6193 /src/plugins/clangcodemodel/clangbackendreceiver.cpp
parent6deec195f1b00ba941c12eee9ea1024d3ddabc54 (diff)
Clang: fix utf8 related column numbers
Use new clang_getFileContents to efficiently convert utf8 byte offsets from line start to column numbers. Also provide simplier backwards convertion to pass resulting utf8 offset to clang. Task-number: QTCREATORBUG-16941 Change-Id: If0e58fe01ad3e281b7e952e972b9e86f6e75aadb Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src/plugins/clangcodemodel/clangbackendreceiver.cpp')
-rw-r--r--src/plugins/clangcodemodel/clangbackendreceiver.cpp22
1 files changed, 6 insertions, 16 deletions
diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.cpp b/src/plugins/clangcodemodel/clangbackendreceiver.cpp
index 3794eb0b6b..306dfb05f1 100644
--- a/src/plugins/clangcodemodel/clangbackendreceiver.cpp
+++ b/src/plugins/clangcodemodel/clangbackendreceiver.cpp
@@ -101,16 +101,14 @@ void BackendReceiver::deleteProcessorsOfEditorWidget(TextEditor::TextEditorWidge
QFuture<CppTools::CursorInfo> BackendReceiver::addExpectedReferencesMessage(
quint64 ticket,
- QTextDocument *textDocument,
const CppTools::SemanticInfo::LocalUseMap &localUses)
{
- QTC_CHECK(textDocument);
QTC_CHECK(!m_referencesTable.contains(ticket));
QFutureInterface<CppTools::CursorInfo> futureInterface;
futureInterface.reportStarted();
- const ReferencesEntry entry{futureInterface, textDocument, localUses};
+ const ReferencesEntry entry{futureInterface, localUses};
m_referencesTable.insert(ticket, entry);
return futureInterface.future();
@@ -221,24 +219,17 @@ void BackendReceiver::documentAnnotationsChanged(const DocumentAnnotationsChange
}
static
-CppTools::CursorInfo::Range toCursorInfoRange(const QTextDocument &textDocument,
- const SourceRangeContainer &sourceRange)
+CppTools::CursorInfo::Range toCursorInfoRange(const SourceRangeContainer &sourceRange)
{
const SourceLocationContainer start = sourceRange.start();
const SourceLocationContainer end = sourceRange.end();
const unsigned length = end.column() - start.column();
- const QTextBlock block = textDocument.findBlockByNumber(static_cast<int>(start.line()) - 1);
- const int shift = ClangCodeModel::Utils::extraUtf8CharsShift(block.text(),
- static_cast<int>(start.column()));
- const uint column = start.column() - static_cast<uint>(shift);
-
- return CppTools::CursorInfo::Range(start.line(), column, length);
+ return CppTools::CursorInfo::Range(start.line(), start.column(), length);
}
static
-CppTools::CursorInfo toCursorInfo(const QTextDocument &textDocument,
- const CppTools::SemanticInfo::LocalUseMap &localUses,
+CppTools::CursorInfo toCursorInfo(const CppTools::SemanticInfo::LocalUseMap &localUses,
const ReferencesMessage &message)
{
CppTools::CursorInfo result;
@@ -246,7 +237,7 @@ CppTools::CursorInfo toCursorInfo(const QTextDocument &textDocument,
result.areUseRangesForLocalVariable = message.isLocalVariable();
for (const SourceRangeContainer &reference : references)
- result.useRanges.append(toCursorInfoRange(textDocument, reference));
+ result.useRanges.append(toCursorInfoRange(reference));
result.useRanges.reserve(references.size());
result.localUses = localUses;
@@ -284,8 +275,7 @@ void BackendReceiver::references(const ReferencesMessage &message)
if (futureInterface.isCanceled())
return; // Editor document closed or a new request was issued making this result outdated.
- QTC_ASSERT(entry.textDocument, return);
- futureInterface.reportResult(toCursorInfo(*entry.textDocument, entry.localUses, message));
+ futureInterface.reportResult(toCursorInfo(entry.localUses, message));
futureInterface.reportFinished();
}