diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp index a08e05cfa95..0d4c11359f4 100644 --- a/src/plugins/qmljseditor/qmlcodecompletion.cpp +++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp @@ -133,45 +133,48 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) QmlJS::Document::Ptr qmlDocument = edit->qmlDocument(); // qDebug() << "*** document:" << qmlDocument; if (qmlDocument.isNull()) - return pos; + return -1; if (!qmlDocument->qmlProgram()) qmlDocument = m_modelManager->snapshot().value(qmlDocument->fileName()); - const QIcon icon = iconForColor(Qt::darkGray); + const QIcon idIcon = iconForColor(Qt::darkGray); + QStringList ids = qmlDocument->ids().keys(); + foreach (const QString &id, ids) { + if (id.isEmpty()) + continue; + + TextEditor::CompletionItem item(this); + item.text = id; + item.icon = idIcon; + m_completions.append(item); + } + + const QIcon otherIcon = iconForColor(Qt::darkCyan); // FIXME: this completion strategy is not going to work when the document was never parsed correctly. - if (qmlDocument && qmlDocument->qmlProgram()) { - QmlJS::AST::UiProgram *program = qmlDocument->qmlProgram(); -// qDebug() << "*** program:" << program; - - if (program) { - QmlExpressionUnderCursor expressionUnderCursor; - QTextCursor cursor(edit->document()); - cursor.setPosition(pos); - expressionUnderCursor(cursor, qmlDocument); + if (qmlDocument->qmlProgram() != 0) { + // qDebug() << "*** program:" << program; + QmlExpressionUnderCursor expressionUnderCursor; + QTextCursor cursor(edit->document()); + cursor.setPosition(pos); + expressionUnderCursor(cursor, qmlDocument); - QmlLookupContext context(expressionUnderCursor.expressionScopes(), qmlDocument, m_modelManager->snapshot(), m_typeSystem); - QmlResolveExpression resolver(context); -// qDebug()<<"*** expression under cursor:"< symbols = resolver.visibleSymbols(expressionUnderCursor.expressionNode()); -// qDebug()<<"***"<snapshot(), m_typeSystem); + QmlResolveExpression resolver(context); + // qDebug()<<"*** expression under cursor:"< symbols = resolver.visibleSymbols(expressionUnderCursor.expressionNode()); + // qDebug()<<"***"<isIdSymbol()) + continue; // nothing to do here. - if (symbol->isIdSymbol()) { - word = symbol->asIdSymbol()->id(); - } else { - word = symbol->name(); - } - - if (word.isEmpty()) - continue; - + const QString word = symbol->name(); + if (! word.isEmpty()) { TextEditor::CompletionItem item(this); item.text = word; - item.icon = icon; + item.icon = otherIcon; m_completions.append(item); } }