summaryrefslogtreecommitdiffstats
path: root/src/linguist/lupdate/qdeclarative.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2018-03-28 11:12:57 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2018-03-29 15:11:46 +0000
commitf1c59c4e73236f8a93489776f3746d72dde94cc4 (patch)
tree337e34c02aa9f7ff7b41e3316a624ecb1b1c7350 /src/linguist/lupdate/qdeclarative.cpp
parentb34f81532688f6b3809e17a9bbd98f72015fe915 (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.cpp14
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: