From 5a7858f5ec36f01036bf36f5d60425a6c0ceef33 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Thu, 11 Mar 2010 10:57:46 +0100 Subject: [PATCH] Make sure the BackwardScanner has tokenized before asking for a string. The problem was that for Foo::Foo (|) when the user triggers completion at |, startOfLine() returns a token that's not on the current line and not yet tokenized by that instance of the BackwardScanner. As a fix I explicitly ask the instance to tokenize up to the given index. Task-number: QTCREATORBUG-673 Reviewed-by: Roberto Raggi --- src/plugins/cpptools/cppcodecompletion.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index ac0d9813e71..bbc63d9ee09 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -1076,7 +1076,11 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<LookupItem> &r QTextCursor tc(edit->document()); tc.setPosition(endOfExpression); BackwardsScanner bs(tc); - QString possibleDecl = bs.mid(bs.startOfLine(bs.startToken())).trimmed().append("();"); + const int startToken = bs.startToken(); + const int lineStartToken = bs.startOfLine(startToken); + // make sure the required tokens are actually available + bs.LA(startToken - lineStartToken); + QString possibleDecl = bs.mid(lineStartToken).trimmed().append("();"); Document::Ptr doc = Document::create(QLatin1String("<completion>")); doc->setSource(possibleDecl.toLatin1()); -- GitLab