diff options
author | Andrei Golubev <andrei.golubev@qt.io> | 2021-12-30 13:09:54 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-01-26 22:43:20 +0000 |
commit | a7e092f05f4ba2e1ebf043185f1c49a66a913088 (patch) | |
tree | b6bdba3b18ae7d2ecb1a960491b3f7d597a7150f /tools | |
parent | 8c7275616336f76f6c5bea3caa43268677b58526 (diff) |
qmltc: Simplify internal property name lookup logic
Change-Id: I51a7a063e90598dd3c68e5e430f4d73903c42957
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
(cherry picked from commit 900697e9dc3bad54c19c1472ec1aa415a663367b)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qmltc/prototype/qml2cppdefaultpasses.cpp | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/tools/qmltc/prototype/qml2cppdefaultpasses.cpp b/tools/qmltc/prototype/qml2cppdefaultpasses.cpp index bbf462b8f6..13ce81202c 100644 --- a/tools/qmltc/prototype/qml2cppdefaultpasses.cpp +++ b/tools/qmltc/prototype/qml2cppdefaultpasses.cpp @@ -176,6 +176,20 @@ static bool isComponentBased(const QQmlJSScope::ConstPtr &type) return base && base->internalName() == u"QQmlComponent"_qs; } +static QString findPropertyName(const Qml2CppContext &context, const QQmlJSScope::ConstPtr &type, + const QmlIR::Binding &binding) +{ + QString name = context.document->stringAt(binding.propertyNameIndex); + if (name.isEmpty()) { + Q_ASSERT(type); + auto base = type->baseType(); + if (!base) + return name; + name = base->defaultPropertyName(); + } + return name; +} + void verifyTypes(const Qml2CppContext &context, QList<Qml2CppObject> &objects) { const auto verifyProperty = [&](const QQmlJSMetaProperty &property, @@ -260,22 +274,12 @@ void verifyTypes(const Qml2CppContext &context, QList<Qml2CppObject> &objects) if (isComponent(type)) return; - QString propName = context.document->stringAt(binding.propertyNameIndex); + const QString propName = findPropertyName(context, type, binding); + // it's an error here if (propName.isEmpty()) { - Q_ASSERT(type); - if (propName.isEmpty()) { - // if empty, try default property - for (QQmlJSScope::ConstPtr t = type->baseType(); t && propName.isEmpty(); - t = t->baseType()) { - propName = t->defaultPropertyName(); - } - } - // otherwise, it's an error - if (propName.isEmpty()) { - context.recordError(binding.location, - u"Cannot assign to non-existent default property"_qs); - return; - } + context.recordError(binding.location, + u"Cannot assign to non-existent default property"_qs); + return; } // ignore signal properties @@ -894,14 +898,7 @@ static void updateImplicitComponents(const Qml2CppContext &context, Qml2CppObjec if (object.irObject->flags & QV4::CompiledData::Object::IsComponent) // already set return; - QString propName = context.document->stringAt(binding.propertyNameIndex); - if (propName.isEmpty()) { - Q_ASSERT(object.type); - // if empty, try default property - for (QQmlJSScope::ConstPtr t = object.type->baseType(); t && propName.isEmpty(); - t = t->baseType()) - propName = t->defaultPropertyName(); - } + const QString propName = findPropertyName(context, object.type, binding); Q_ASSERT(!propName.isEmpty()); // assume verified QQmlJSMetaProperty p = object.type->property(propName); Q_ASSERT(p.isValid()); // assume verified |