diff options
author | Ivan Donchevskii <[email protected]> | 2017-11-29 16:08:06 +0100 |
---|---|---|
committer | Ivan Donchevskii <[email protected]> | 2018-01-26 15:39:31 +0000 |
commit | 09310bcdc68e4242106e3f15761116797f8f0d78 (patch) | |
tree | 478b750fe83632d4c66f131792322a11df4a6193 /src/plugins/clangcodemodel/clangbackendreceiver.cpp | |
parent | 6deec195f1b00ba941c12eee9ea1024d3ddabc54 (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 <[email protected]>
Diffstat (limited to 'src/plugins/clangcodemodel/clangbackendreceiver.cpp')
-rw-r--r-- | src/plugins/clangcodemodel/clangbackendreceiver.cpp | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.cpp b/src/plugins/clangcodemodel/clangbackendreceiver.cpp index 3794eb0b6ba..306dfb05f1a 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(); } |