diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp index 5c31904d09196aed0d830fe5e719375e1b84e638..20b0515c5743c4d0897d284d05e87fc5f4aeeae8 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.cpp +++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp @@ -487,6 +487,7 @@ QModelIndex QmlOutlineModel::enterScriptBinding(AST::UiScriptBinding *scriptBind prototype.setText(asString(scriptBinding->qualifiedId)); prototype.setIcon(m_icons->scriptBindingIcon()); + prototype.setAnnotation(getAnnotation(scriptBinding->statement)); prototype.setData(NonElementBindingType, ItemTypeRole); prototype.setSourceLocation(getLocation(scriptBinding)); prototype.setNode(scriptBinding); @@ -507,6 +508,7 @@ QModelIndex QmlOutlineModel::enterPublicMember(AST::UiPublicMember *publicMember if (publicMember->name) prototype.setText(publicMember->name->asString()); prototype.setIcon(m_icons->publicMemberIcon()); + prototype.setAnnotation(getAnnotation(publicMember->expression)); prototype.setData(NonElementBindingType, ItemTypeRole); prototype.setSourceLocation(getLocation(publicMember)); prototype.setNode(publicMember); @@ -789,26 +791,28 @@ QString QmlOutlineModel::getAnnotation(AST::UiObjectInitializer *objectInitializ return QString(); } +QString QmlOutlineModel::getAnnotation(QmlJS::AST::Statement *statement) +{ + if (AST::ExpressionStatement *expr = AST::cast<AST::ExpressionStatement*>(statement)) + return getAnnotation(expr->expression); + return QString(); +} + +QString QmlOutlineModel::getAnnotation(QmlJS::AST::ExpressionNode *expression) +{ + if (!expression) + return QString(); + QString source = m_semanticInfo.document->source(); + return source.mid(expression->firstSourceLocation().begin(), + expression->lastSourceLocation().end() - expression->firstSourceLocation().begin()); +} + QHash<QString,QString> QmlOutlineModel::getScriptBindings(AST::UiObjectInitializer *objectInitializer) { QHash <QString,QString> scriptBindings; for (AST::UiObjectMemberList *it = objectInitializer->members; it; it = it->next) { if (AST::UiScriptBinding *binding = AST::cast<AST::UiScriptBinding*>(it->member)) { const QString bindingName = asString(binding->qualifiedId); - AST::ExpressionStatement *expr = AST::cast<AST::ExpressionStatement*>(binding->statement); - if (!expr) - continue; - - AST::StringLiteral *stringLiteral = AST::cast<AST::StringLiteral*>(expr->expression); - if (stringLiteral) { - scriptBindings.insert(bindingName, stringLiteral->value->asString()); - continue; - } - - AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression*>(expr->expression); - if (idExpr) { - scriptBindings.insert(bindingName, idExpr->name->asString()); - continue; - } + scriptBindings.insert(bindingName, getAnnotation(binding->statement)); } } return scriptBindings; diff --git a/src/plugins/qmljseditor/qmloutlinemodel.h b/src/plugins/qmljseditor/qmloutlinemodel.h index 42b07270da42a37e138e2180a32527a01a0abda3..8459877334190255132340311d4a0466f9697645 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.h +++ b/src/plugins/qmljseditor/qmloutlinemodel.h @@ -116,8 +116,10 @@ private: static QmlJS::AST::SourceLocation getLocation(QmlJS::AST::UiObjectMember *objMember); QIcon getIcon(QmlJS::AST::UiQualifiedId *objDef); - static QString getAnnotation(QmlJS::AST::UiObjectInitializer *objInitializer); - static QHash<QString,QString> getScriptBindings(QmlJS::AST::UiObjectInitializer *objInitializer); + QString getAnnotation(QmlJS::AST::UiObjectInitializer *objInitializer); + QString getAnnotation(QmlJS::AST::Statement *statement); + QString getAnnotation(QmlJS::AST::ExpressionNode *expression); + QHash<QString,QString> getScriptBindings(QmlJS::AST::UiObjectInitializer *objInitializer); SemanticInfo m_semanticInfo;