diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2017-10-17 12:48:07 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2017-10-19 07:43:21 +0000 |
commit | 7cbc7af0223d6a701a47bd63cd85cfc95686cee8 (patch) | |
tree | fa97d5ae63637fc0335761070ebe0a77167e611e /src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp | |
parent | 2aed9f5c9727883a5fc54bf8cd7ec223be52c942 (diff) | |
download | qt-creator-7cbc7af0223d6a701a47bd63cd85cfc95686cee8.tar.gz |
Clang: Fix completion after qualification (::)
...and maybe other cases.
Since
Clang: fix findStartOfName handling
commit 82d0650b116e0607e24021b0930e57759c53b449
the proposal's base position was calculated wrong. As a result, an early
return triggert in CodeAssistantPrivate::displayProposal (call to
newProposal->hasItemsToPropose(prefix, reason)) and no completions were
displayed.
Fix by ensuring that the added code from the mentioned commit is only
called when needed, namely only for function expressions.
Task-number: QTCREATORBUG-19083
Change-Id: I8f23c9b7186f9d81159939c8b3ef475a09bbe760
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp')
-rw-r--r-- | src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp b/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp index 62573c70fd..2b364a1d8c 100644 --- a/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp +++ b/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp @@ -243,11 +243,14 @@ static bool isValidIdentifierChar(const QChar &character) int ActivationSequenceContextProcessor::findStartOfName( const TextEditor::AssistInterface *assistInterface, - int startPosition) + int startPosition, + NameCategory category) { int position = startPosition; QChar character; - if (position > 2 && assistInterface->characterAt(position - 1) == '>' + + if (category == NameCategory::Function + && position > 2 && assistInterface->characterAt(position - 1) == '>' && assistInterface->characterAt(position - 2) != '-') { uint unbalancedLessGreater = 1; --position; @@ -267,11 +270,12 @@ int ActivationSequenceContextProcessor::findStartOfName( } while (isValidIdentifierChar(character)); int prevPosition = skipPrecedingWhitespace(assistInterface, position); - if (assistInterface->characterAt(prevPosition) == ':' + if (category == NameCategory::Function + && assistInterface->characterAt(prevPosition) == ':' && assistInterface->characterAt(prevPosition - 1) == ':') { // Handle :: case - go recursive prevPosition = skipPrecedingWhitespace(assistInterface, prevPosition - 2); - return findStartOfName(assistInterface, prevPosition + 1); + return findStartOfName(assistInterface, prevPosition + 1, category); } return position + 1; |