17 const QUrl &url, BaseNameHandler &&baseNameHandler, FailHandler &&failHandler)
19 const QString path = url.path();
22 const qsizetype lastSlash = path.lastIndexOf(QLatin1Char(
'/'));
27 const QStringView baseName = QStringView{path}.mid(lastSlash + 1, path.size() - lastSlash - 5);
30 return (!baseName.isEmpty() && baseName.at(0).isUpper())
31 ? baseNameHandler(baseName)
55 QByteArray baseName = processUrlForClassName(url, [](QStringView nameBase) {
56 return QByteArray(nameBase.toUtf8() +
"_QMLTYPE_");
58 return QByteArray(
"ANON_QML_IC_");
60 return baseName + url.fragment().toUtf8() +
'_'
61 + QByteArray::number(classIndexCounter.fetchAndAddRelaxed(1));
78 if (!instantiatingBinding
79 || instantiatingBinding->type() != QV4::CompiledData::Binding::Type_GroupProperty) {
83 if (!referencingObjectPropertyCache)
87 Q_ASSERT(instantiatingBinding->propertyNameIndex != 0);
89 bool notInRevision =
false;
90 instantiatingProperty = QQmlPropertyResolver(referencingObjectPropertyCache)
91 .property(instantiatingPropertyName, ¬InRevision,
92 QQmlPropertyResolver::IgnoreRevision);
93 return instantiatingProperty !=
nullptr;
98 if (instantiatingProperty) {
99 if (instantiatingProperty->isQObject()) {
102 auto result = QQmlMetaType::rawPropertyCacheForType(instantiatingProperty->propType(),
103 instantiatingProperty->typeVersion());
107
108
109 if (
auto metaObject = instantiatingProperty->propType().metaObject(); metaObject) {
111 if (!(QMetaObjectPrivate::get(metaObject)->flags & DynamicMetaObject))
112 return QQmlMetaType::propertyCache(metaObject);
115 }
else if (
const QMetaObject *vtmo = QQmlMetaType::metaObjectForValueType(instantiatingProperty->propType())) {
116 return QQmlMetaType::propertyCache(vtmo, instantiatingProperty->typeVersion());
119 return QQmlPropertyCache::ConstPtr();
123 QQmlPropertyCacheVector *propertyCaches)
const
125 for (QQmlBindingInstantiationContext pendingBinding: *
this) {
126 const int groupPropertyObjectIndex = pendingBinding.instantiatingBinding->value.objectIndex;
128 if (propertyCaches->at(groupPropertyObjectIndex))
131 Q_ASSERT(!pendingBinding.instantiatingPropertyName.isEmpty());
133 if (!pendingBinding.referencingObjectPropertyCache) {
134 pendingBinding.referencingObjectPropertyCache
135 = propertyCaches->at(pendingBinding.referencingObjectIndex);
138 if (!pendingBinding.resolveInstantiatingProperty())
140 if (
auto cache = pendingBinding.instantiatingPropertyCache())
141 propertyCaches->set(groupPropertyObjectIndex, cache);
QQmlBindingInstantiationContext(int referencingObjectIndex, const QV4::CompiledData::Binding *instantiatingBinding, const QString &instantiatingPropertyName, const QQmlPropertyCache::ConstPtr &referencingObjectPropertyCache)
bool resolveInstantiatingProperty()
QQmlPropertyCache::ConstPtr instantiatingPropertyCache() const