diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp index 2bc0357bba1..ea1eed01fbf 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.cpp +++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp @@ -373,7 +373,7 @@ QModelIndex QmlOutlineModel::enterObjectDefinition(AST::UiObjectDefinition *objD if (typeName.at(0).isUpper()) { prototype.setText(typeName); - prototype.setAnnotation(getId(objDef)); + prototype.setAnnotation(getAnnotation(objDef)); if (!m_typeToIcon.contains(typeName)) { m_typeToIcon.insert(typeName, getIcon(objDef)); } @@ -689,23 +689,44 @@ QIcon QmlOutlineModel::getIcon(AST::UiObjectDefinition *objDef) { return QIcon(); } -QString QmlOutlineModel::getId(AST::UiObjectDefinition *objDef) { - QString id; +QString QmlOutlineModel::getAnnotation(AST::UiObjectDefinition *objDef) { + const QHash bindings = getScriptBindings(objDef); + + if (bindings.contains("id")) + return bindings.value("id"); + + if (bindings.contains("name")) + return bindings.value("name"); + + if (bindings.contains("target")) + return bindings.value("target"); + + return QString(); +} + +QHash QmlOutlineModel::getScriptBindings(AST::UiObjectDefinition *objDef) { + QHash scriptBindings; for (AST::UiObjectMemberList *it = objDef->initializer->members; it; it = it->next) { if (AST::UiScriptBinding *binding = AST::cast(it->member)) { - if (binding->qualifiedId->name->asString() == "id") { - AST::ExpressionStatement *expr = AST::cast(binding->statement); - if (!expr) - continue; - AST::IdentifierExpression *idExpr = AST::cast(expr->expression); - if (!idExpr) - continue; - id = idExpr->name->asString(); - break; + const QString bindingName = asString(binding->qualifiedId); + AST::ExpressionStatement *expr = AST::cast(binding->statement); + if (!expr) + continue; + + AST::StringLiteral *stringLiteral = AST::cast(expr->expression); + if (stringLiteral) { + scriptBindings.insert(bindingName, stringLiteral->value->asString()); + continue; + } + + AST::IdentifierExpression *idExpr = AST::cast(expr->expression); + if (idExpr) { + scriptBindings.insert(bindingName, idExpr->name->asString()); + continue; } } } - return id; + return scriptBindings; } } // namespace Internal diff --git a/src/plugins/qmljseditor/qmloutlinemodel.h b/src/plugins/qmljseditor/qmloutlinemodel.h index 6da69c4c139..647a382b308 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.h +++ b/src/plugins/qmljseditor/qmloutlinemodel.h @@ -108,7 +108,9 @@ private: static QString asString(QmlJS::AST::UiQualifiedId *id); static QmlJS::AST::SourceLocation getLocation(QmlJS::AST::UiObjectMember *objMember); QIcon getIcon(QmlJS::AST::UiObjectDefinition *objDef); - static QString getId(QmlJS::AST::UiObjectDefinition *objDef); + + static QString getAnnotation(QmlJS::AST::UiObjectDefinition *objDef); + static QHash getScriptBindings(QmlJS::AST::UiObjectDefinition *objDefinition); SemanticInfo m_semanticInfo;