diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2019-07-05 11:22:49 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2019-07-08 14:43:12 +0200 |
commit | fb7ad454f57924e86dd0bbb6e7dbbd4570ae24ce (patch) | |
tree | 3070a67c562f4bdd93f23e5158a138eefd95bbfb /src/qml/qml/qqmlpropertycachecreator_p.h | |
parent | b4d4e077340e7a1c031be15415410c20adc74887 (diff) |
Internal API cleanup
In QQmlPropertyCacheCreator, move the code to determine the meta-type
for a signal parameter type into a helper function. Makes the code more
readable and available for re-use later.
Change-Id: I2876ed247d0c42f4e6d90872fa4b6a2dc4e1ba7e
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlpropertycachecreator_p.h')
-rw-r--r-- | src/qml/qml/qqmlpropertycachecreator_p.h | 61 |
1 files changed, 38 insertions, 23 deletions
diff --git a/src/qml/qml/qqmlpropertycachecreator_p.h b/src/qml/qml/qqmlpropertycachecreator_p.h index 54455fb560..a207ea7e86 100644 --- a/src/qml/qml/qqmlpropertycachecreator_p.h +++ b/src/qml/qml/qqmlpropertycachecreator_p.h @@ -116,6 +116,8 @@ protected: QQmlRefPointer<QQmlPropertyCache> propertyCacheForObject(const CompiledObject *obj, const QQmlBindingInstantiationContext &context, QQmlJS::DiagnosticMessage *error) const; QQmlJS::DiagnosticMessage createMetaObject(int objectIndex, const CompiledObject *obj, const QQmlRefPointer<QQmlPropertyCache> &baseTypeCache); + int metaTypeForParameter(const QV4::CompiledData::ParameterType ¶m, QString *customTypeName = nullptr); + QString stringAt(int index) const { return objectContainer->stringAt(index); } QQmlEnginePrivate * const enginePrivate; @@ -414,29 +416,13 @@ inline QQmlJS::DiagnosticMessage QQmlPropertyCacheCreator<ObjectContainer>::crea auto end = s->parametersEnd(); for ( ; param != end; ++param, ++i) { names.append(stringAt(param->nameIndex).toUtf8()); - const auto &type = param->type; - if (type.indexIsBuiltinType) { - // built-in type - paramTypes[i + 1] = metaTypeForPropertyType(static_cast<QV4::CompiledData::BuiltinType>(int(type.typeNameIndexOrBuiltinType))); - } else { - // lazily resolved type - const QString customTypeName = stringAt(type.typeNameIndexOrBuiltinType); - QQmlType qmltype; - if (!imports->resolveType(customTypeName, &qmltype, nullptr, nullptr, nullptr)) - return qQmlCompileError(s->location, QQmlPropertyCacheCreatorBase::tr("Invalid signal parameter type: %1").arg(customTypeName)); - - if (qmltype.isComposite()) { - QQmlRefPointer<QQmlTypeData> tdata = enginePrivate->typeLoader.getType(qmltype.sourceUrl()); - Q_ASSERT(tdata); - Q_ASSERT(tdata->isComplete()); - - auto compilationUnit = tdata->compilationUnit(); - - paramTypes[i + 1] = compilationUnit->metaTypeId; - } else { - paramTypes[i + 1] = qmltype.typeId(); - } - } + + QString customTypeName; + auto type = metaTypeForParameter(param->type, &customTypeName); + if (type == QMetaType::UnknownType) + return qQmlCompileError(s->location, QQmlPropertyCacheCreatorBase::tr("Invalid signal parameter type: %1").arg(customTypeName)); + + paramTypes[i + 1] = type; } } @@ -553,6 +539,35 @@ inline QQmlJS::DiagnosticMessage QQmlPropertyCacheCreator<ObjectContainer>::crea } template <typename ObjectContainer> +inline int QQmlPropertyCacheCreator<ObjectContainer>::metaTypeForParameter(const QV4::CompiledData::ParameterType ¶m, + QString *customTypeName) +{ + if (param.indexIsBuiltinType) { + // built-in type + return metaTypeForPropertyType(static_cast<QV4::CompiledData::BuiltinType>(int(param.typeNameIndexOrBuiltinType))); + } + + // lazily resolved type + const QString typeName = stringAt(param.typeNameIndexOrBuiltinType); + if (customTypeName) + *customTypeName = typeName; + QQmlType qmltype; + if (!imports->resolveType(typeName, &qmltype, nullptr, nullptr, nullptr)) + return QMetaType::UnknownType; + + if (!qmltype.isComposite()) + return qmltype.typeId(); + + QQmlRefPointer<QQmlTypeData> tdata = enginePrivate->typeLoader.getType(qmltype.sourceUrl()); + Q_ASSERT(tdata); + Q_ASSERT(tdata->isComplete()); + + auto compilationUnit = tdata->compilationUnit(); + + return compilationUnit->metaTypeId; +} + +template <typename ObjectContainer> class QQmlPropertyCacheAliasCreator { public: |