From 44a155c6128d874da0902d6d3c95f159e486ec22 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Fri, 30 Apr 2010 14:22:55 +0200
Subject: [PATCH] QmlJS: Fix completion context when cursor is to the right of
 inserted ;

Done-with: Erik Verbruggen
---
 src/libs/qmljs/qmljscompletioncontextfinder.cpp | 3 +++
 src/libs/qmljs/qmljslineinfo.cpp                | 4 ++++
 src/libs/qmljs/qmljslineinfo.h                  | 4 +++-
 src/plugins/qmljseditor/qmljscodecompletion.cpp | 1 -
 4 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/libs/qmljs/qmljscompletioncontextfinder.cpp b/src/libs/qmljs/qmljscompletioncontextfinder.cpp
index 0fd7ab856b1..645472c2203 100644
--- a/src/libs/qmljs/qmljscompletioncontextfinder.cpp
+++ b/src/libs/qmljs/qmljscompletioncontextfinder.cpp
@@ -31,6 +31,9 @@ CompletionContextFinder::CompletionContextFinder(const QTextCursor &cursor)
             break;
     }
 
+    if (m_startTokenIndex == yyLinizerState.tokens.size() - 1 && yyLinizerState.insertedSemicolon)
+        --m_startTokenIndex;
+
     getQmlObjectTypeName(m_startTokenIndex);
     checkBinding();
 }
diff --git a/src/libs/qmljs/qmljslineinfo.cpp b/src/libs/qmljs/qmljslineinfo.cpp
index a4c8837d1b8..5bae0d727c5 100644
--- a/src/libs/qmljs/qmljslineinfo.cpp
+++ b/src/libs/qmljs/qmljslineinfo.cpp
@@ -208,6 +208,7 @@ QString LineInfo::trimmedCodeLine(const QString &t)
             const Token sc(trimmed.size(), 1, Token::Semicolon);
             yyLinizerState.tokens.append(sc);
             trimmed.append(QLatin1Char(';'));
+            yyLinizerState.insertedSemicolon = true;
         }
     }
 
@@ -276,6 +277,8 @@ bool LineInfo::readLine()
             (firstNonWhiteSpace(yyLinizerState.line) == QLatin1Char('{'));
 
     do {
+        yyLinizerState.insertedSemicolon = false;
+
         if (yyLinizerState.iter == yyProgram.firstBlock()) {
             yyLinizerState.line.clear();
             return false;
@@ -332,6 +335,7 @@ void LineInfo::startLinizer()
 {
     yyLinizerState.braceDepth = 0;
     yyLinizerState.pendingRightBrace = false;
+    yyLinizerState.insertedSemicolon = false;
 
     yyLine = &yyLinizerState.line;
     yyBraceDepth = &yyLinizerState.braceDepth;
diff --git a/src/libs/qmljs/qmljslineinfo.h b/src/libs/qmljs/qmljslineinfo.h
index 2112e313f0a..8173f9ddc72 100644
--- a/src/libs/qmljs/qmljslineinfo.h
+++ b/src/libs/qmljs/qmljslineinfo.h
@@ -84,12 +84,14 @@ protected:
         LinizerState()
             : braceDepth(0),
               leftBraceFollows(false),
-              pendingRightBrace(false)
+              pendingRightBrace(false),
+              insertedSemicolon(false)
         { }
 
         int braceDepth;
         bool leftBraceFollows;
         bool pendingRightBrace;
+        bool insertedSemicolon;
         QString line;
         QList<Token> tokens;
         QTextBlock iter;
diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp
index a5a5d15f575..aae8b16863b 100644
--- a/src/plugins/qmljseditor/qmljscodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp
@@ -690,7 +690,6 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
 
         if (contextFinder.isInRhsOfBinding() && qmlScopeType) {
             doQmlKeywordCompletion = false;
-            qDebug() << "property name: " << contextFinder.bindingPropertyName();
 
             if (!contextFinder.bindingPropertyName().isEmpty()) {
                 const Interpreter::Value *value = qmlScopeType;
-- 
GitLab