summaryrefslogtreecommitdiff
path: root/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2017-08-10 09:57:18 +0200
committerIvan Donchevskii <ivan.donchevskii@qt.io>2017-09-05 14:16:04 +0000
commit82d0650b116e0607e24021b0930e57759c53b449 (patch)
tree6242340b0b12d4aa96e431dacc7ab96f6fa1e50f /src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp
parent5fb54e7cddcda2ae14f4bd988cb30c60fb432d7f (diff)
downloadqt-creator-82d0650b116e0607e24021b0930e57759c53b449.tar.gz
Clang: fix findStartOfName handling
... of templates and qualified names Change-Id: Ic8c2dec35cb74484f474c0c608857e7cf48c7468 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp')
-rw-r--r--src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp b/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp
index 80b42c11b4..62573c70fd 100644
--- a/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangactivationsequencecontextprocessor.cpp
@@ -247,10 +247,33 @@ int ActivationSequenceContextProcessor::findStartOfName(
{
int position = startPosition;
QChar character;
+ if (position > 2 && assistInterface->characterAt(position - 1) == '>'
+ && assistInterface->characterAt(position - 2) != '-') {
+ uint unbalancedLessGreater = 1;
+ --position;
+ while (unbalancedLessGreater > 0 && position > 2) {
+ character = assistInterface->characterAt(--position);
+ // Do not count -> usage inside temlate argument list
+ if (character == '<')
+ --unbalancedLessGreater;
+ else if (character == '>' && assistInterface->characterAt(position-1) != '-')
+ ++unbalancedLessGreater;
+ }
+ position = skipPrecedingWhitespace(assistInterface, position) - 1;
+ }
+
do {
character = assistInterface->characterAt(--position);
} while (isValidIdentifierChar(character));
+ int prevPosition = skipPrecedingWhitespace(assistInterface, position);
+ if (assistInterface->characterAt(prevPosition) == ':'
+ && assistInterface->characterAt(prevPosition - 1) == ':') {
+ // Handle :: case - go recursive
+ prevPosition = skipPrecedingWhitespace(assistInterface, prevPosition - 2);
+ return findStartOfName(assistInterface, prevPosition + 1);
+ }
+
return position + 1;
}