18 const QUrl &url, BaseNameHandler &&baseNameHandler, FailHandler &&failHandler)
20 const QString path = url.path();
23 const qsizetype lastSlash = path.lastIndexOf(QLatin1Char(
'/'));
28 const QStringView baseName = QStringView{path}.mid(lastSlash + 1, path.size() - lastSlash - 5);
31 return (!baseName.isEmpty() && baseName.at(0).isUpper())
32 ? baseNameHandler(baseName)
56 QByteArray baseName = processUrlForClassName(url, [](QStringView nameBase) {
57 return QByteArray(nameBase.toUtf8() +
"_QMLTYPE_");
59 return QByteArray(
"ANON_QML_IC_");
61 return baseName + url.fragment().toUtf8() +
'_'
62 + QByteArray::number(classIndexCounter.fetchAndAddRelaxed(1));
79 if (!instantiatingBinding
80 || instantiatingBinding->type() != QV4::CompiledData::Binding::Type_GroupProperty) {
84 if (!referencingObjectPropertyCache)
88 Q_ASSERT(instantiatingBinding->propertyNameIndex != 0);
90 bool notInRevision =
false;
91 instantiatingProperty = QQmlPropertyResolver(referencingObjectPropertyCache)
92 .property(instantiatingPropertyName, ¬InRevision,
93 QQmlPropertyResolver::IgnoreRevision);
94 return instantiatingProperty !=
nullptr;
99 if (instantiatingProperty) {
100 if (instantiatingProperty->isQObject()) {
103 auto result = QQmlMetaType::rawPropertyCacheForType(instantiatingProperty->propType(),
104 instantiatingProperty->typeVersion());
108
109
110 if (
auto metaObject = instantiatingProperty->propType().metaObject(); metaObject) {
112 if (!(QMetaObjectPrivate::get(metaObject)->flags & DynamicMetaObject))
113 return QQmlMetaType::propertyCache(metaObject);
116 }
else if (
const QMetaObject *vtmo = QQmlMetaType::metaObjectForValueType(instantiatingProperty->propType())) {
117 return QQmlMetaType::propertyCache(vtmo, instantiatingProperty->typeVersion());
120 return QQmlPropertyCache::ConstPtr();
124 QQmlPropertyCacheVector *propertyCaches)
const
126 for (QQmlBindingInstantiationContext pendingBinding: *
this) {
127 const int groupPropertyObjectIndex = pendingBinding.instantiatingBinding->value.objectIndex;
129 if (propertyCaches->at(groupPropertyObjectIndex))
132 Q_ASSERT(!pendingBinding.instantiatingPropertyName.isEmpty());
134 if (!pendingBinding.referencingObjectPropertyCache) {
135 pendingBinding.referencingObjectPropertyCache
136 = propertyCaches->at(pendingBinding.referencingObjectIndex);
139 if (!pendingBinding.resolveInstantiatingProperty())
141 if (
auto cache = pendingBinding.instantiatingPropertyCache())
142 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