aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qqmltypecompiler.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-02-26 10:53:02 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-02 14:48:59 +0100
commit849de77470ca81bc97a547af28c4caa3b8a84078 (patch)
tree91fac20f584c89deb375363a94b73145828107ca /src/qml/compiler/qqmltypecompiler.cpp
parentbf47d66216e649fe947956e02edd0a4b24ddb0fe (diff)
[new compiler] Fix implicit component determination inside group properties
Don't only scan full-typed objects for property bindings that may define components implicitly, do this for any types we know (propertyCache populated) and that aren't explicitly of Component type. Change-Id: I918b636be6d524e919cdd4efd49c33e63da64de3 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/compiler/qqmltypecompiler.cpp')
-rw-r--r--src/qml/compiler/qqmltypecompiler.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp
index a1085b1388..2165f3d651 100644
--- a/src/qml/compiler/qqmltypecompiler.cpp
+++ b/src/qml/compiler/qqmltypecompiler.cpp
@@ -1040,12 +1040,8 @@ QQmlComponentAndAliasResolver::QQmlComponentAndAliasResolver(QQmlTypeCompiler *t
{
}
-void QQmlComponentAndAliasResolver::findAndRegisterImplicitComponents(const QtQml::QmlObject *obj, int objectIndex)
+void QQmlComponentAndAliasResolver::findAndRegisterImplicitComponents(const QtQml::QmlObject *obj, QQmlPropertyCache *propertyCache)
{
- QQmlPropertyCache *propertyCache = propertyCaches.value(objectIndex);
- if (!propertyCache)
- return;
-
PropertyResolver propertyResolver(propertyCache);
QQmlPropertyData *defaultProperty = obj->indexOfDefaultProperty != -1 ? propertyCache->parent()->defaultProperty() : propertyCache->defaultProperty();
@@ -1124,13 +1120,20 @@ bool QQmlComponentAndAliasResolver::resolve()
const int objCountWithoutSynthesizedComponents = qmlObjects->count();
for (int i = 0; i < objCountWithoutSynthesizedComponents; ++i) {
const QtQml::QmlObject *obj = qmlObjects->at(i);
- if (obj->inheritedTypeNameIndex == 0)
+ QQmlPropertyCache *cache = propertyCaches.value(i);
+ if (obj->inheritedTypeNameIndex == 0 && !cache)
continue;
- QQmlCompiledData::TypeReference *tref = resolvedTypes->value(obj->inheritedTypeNameIndex);
- Q_ASSERT(tref);
- if (!tref->type || tref->type->metaObject() != &QQmlComponent::staticMetaObject) {
- findAndRegisterImplicitComponents(obj, i);
+ bool isExplicitComponent = false;
+
+ if (obj->inheritedTypeNameIndex) {
+ QQmlCompiledData::TypeReference *tref = resolvedTypes->value(obj->inheritedTypeNameIndex);
+ Q_ASSERT(tref);
+ if (tref->type && tref->type->metaObject() == &QQmlComponent::staticMetaObject)
+ isExplicitComponent = true;
+ }
+ if (!isExplicitComponent) {
+ findAndRegisterImplicitComponents(obj, cache);
continue;
}