aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmltc
diff options
context:
space:
mode:
authorAndrei Golubev <andrei.golubev@qt.io>2021-12-30 13:09:54 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-01-26 22:43:20 +0000
commita7e092f05f4ba2e1ebf043185f1c49a66a913088 (patch)
treeb6bdba3b18ae7d2ecb1a960491b3f7d597a7150f /tools/qmltc
parent8c7275616336f76f6c5bea3caa43268677b58526 (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/qmltc')
-rw-r--r--tools/qmltc/prototype/qml2cppdefaultpasses.cpp43
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