diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2018-03-28 11:12:57 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-03-29 15:11:46 +0000 |
commit | f1c59c4e73236f8a93489776f3746d72dde94cc4 (patch) | |
tree | 337e34c02aa9f7ff7b41e3316a624ecb1b1c7350 /src/linguist/lupdate/qdeclarative.cpp | |
parent | b34f81532688f6b3809e17a9bbd98f72015fe915 (diff) |
Add support for translation function aliases that are member expressions
When traversing the AST for call expressions, it may happen that the
base of the call expression is a field member expression instead of a
plain identifier. For example with CustomTranslator.myTr() the base is a
field member, with an identifier as base and myTr as name. We can
construct a qualified name from that quite easily and this way support
qualified tr aliases in qml files.
Task-number: QTBUG-67278
Change-Id: I106243d8eed6d8cec75819a44942cf750de2829a
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Diffstat (limited to 'src/linguist/lupdate/qdeclarative.cpp')
-rw-r--r-- | src/linguist/lupdate/qdeclarative.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/linguist/lupdate/qdeclarative.cpp b/src/linguist/lupdate/qdeclarative.cpp index 11d37259d..40af15566 100644 --- a/src/linguist/lupdate/qdeclarative.cpp +++ b/src/linguist/lupdate/qdeclarative.cpp @@ -90,10 +90,20 @@ protected: void endVisit(AST::CallExpression *node) { - if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(node->base)) { + QString name; + AST::ExpressionNode *base = node->base; + + while (base && base->kind == AST::Node::Kind_FieldMemberExpression) { + auto memberExpr = static_cast<AST::FieldMemberExpression *>(base); + name.prepend(memberExpr->name); + name.prepend(QLatin1Char('.')); + base = memberExpr->base; + } + + if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(base)) { processComments(idExpr->identifierToken.begin()); - const QString name = idExpr->name.toString(); + name = idExpr->name.toString() + name; const int identLineNo = idExpr->identifierToken.startLine; switch (trFunctionAliasManager.trFunctionByName(name)) { case TrFunctionAliasManager::Function_qsTr: |