summaryrefslogtreecommitdiff
path: root/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2017-10-17 12:48:07 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2017-10-19 07:43:21 +0000
commit7cbc7af0223d6a701a47bd63cd85cfc95686cee8 (patch)
treefa97d5ae63637fc0335761070ebe0a77167e611e /src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp
parent2aed9f5c9727883a5fc54bf8cd7ec223be52c942 (diff)
downloadqt-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.cpp12
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;