diff --git a/src/libs/qmljs/qmljscompletioncontextfinder.cpp b/src/libs/qmljs/qmljscompletioncontextfinder.cpp index 0fd7ab856b193b9fe818c3c1b3ee853cf49d6f26..645472c220340e682f008bcf670036e3ef889793 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 a4c8837d1b81ec04b8171afcfc9ec4974b996777..5bae0d727c5789febba8c8c54ea4e1d76eee9b15 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 2112e313f0a890b4ec3e0b49cc6012c7d9a75db5..8173f9ddc72ff4891db8fd3c99887b421d58d32f 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 a5a5d15f5759d0e72df7a21d6b8cf298d381ccb9..aae8b16863bacd34d8b44cdcc7ad806761683285 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;