From 55d0327ddf2b7b59d686218a9eb7f340732136ef Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 20 Jul 2018 15:04:16 +0200 Subject: Clean up QQmlCustomParser API Consistently provide a smart pointer to the compilation unit in the two virtual functions. Change-Id: I2f43d4d17102082577f2502424d288d40eb7479d Reviewed-by: Lars Knoll --- src/imports/statemachine/signaltransition.cpp | 6 +++--- src/imports/statemachine/signaltransition.h | 4 ++-- src/qml/compiler/qqmlpropertyvalidator.cpp | 2 +- src/qml/qml/qqmlcustomparser_p.h | 4 ++-- src/qml/types/qqmlconnections.cpp | 10 ++++----- src/qml/types/qqmlconnections_p.h | 4 ++-- src/qml/types/qqmllistmodel.cpp | 24 +++++++++++----------- src/qml/types/qqmllistmodel_p.h | 8 ++++---- .../designer/qquickdesignercustomparserobject.cpp | 4 ++-- .../designer/qquickdesignercustomparserobject_p.h | 4 ++-- src/quick/util/qquickpropertychanges.cpp | 14 ++++++------- src/quick/util/qquickpropertychanges_p.h | 6 +++--- 12 files changed, 45 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/imports/statemachine/signaltransition.cpp b/src/imports/statemachine/signaltransition.cpp index ab625788bb..d4ea25cc4b 100644 --- a/src/imports/statemachine/signaltransition.cpp +++ b/src/imports/statemachine/signaltransition.cpp @@ -185,12 +185,12 @@ void SignalTransition::connectTriggered() m_signalExpression = expression; } -void SignalTransitionParser::verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &props) +void SignalTransitionParser::verifyBindings(const QQmlRefPointer &compilationUnit, const QList &props) { for (int ii = 0; ii < props.count(); ++ii) { const QV4::CompiledData::Binding *binding = props.at(ii); - QString propName = qmlUnit->stringAt(binding->propertyNameIndex); + QString propName = compilationUnit->stringAt(binding->propertyNameIndex); if (propName != QLatin1String("onTriggered")) { error(props.at(ii), SignalTransition::tr("Cannot assign to non-existent property \"%1\"").arg(propName)); @@ -204,7 +204,7 @@ void SignalTransitionParser::verifyBindings(const QV4::CompiledData::Unit *qmlUn } } -void SignalTransitionParser::applyBindings(QObject *object, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) +void SignalTransitionParser::applyBindings(QObject *object, const QQmlRefPointer &compilationUnit, const QList &bindings) { SignalTransition *st = qobject_cast(object); st->m_compilationUnit = compilationUnit; diff --git a/src/imports/statemachine/signaltransition.h b/src/imports/statemachine/signaltransition.h index d7a3b7b618..90e6f96fbc 100644 --- a/src/imports/statemachine/signaltransition.h +++ b/src/imports/statemachine/signaltransition.h @@ -97,8 +97,8 @@ private: class SignalTransitionParser : public QQmlCustomParser { public: - void verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &props) override; - void applyBindings(QObject *object, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) override; + void verifyBindings(const QQmlRefPointer &compilationUnit, const QList &props) override; + void applyBindings(QObject *object, const QQmlRefPointer &compilationUnit, const QList &bindings) override; }; QT_END_NAMESPACE diff --git a/src/qml/compiler/qqmlpropertyvalidator.cpp b/src/qml/compiler/qqmlpropertyvalidator.cpp index afa2e4ad81..7daf2f1f2f 100644 --- a/src/qml/compiler/qqmlpropertyvalidator.cpp +++ b/src/qml/compiler/qqmlpropertyvalidator.cpp @@ -306,7 +306,7 @@ QVector QQmlPropertyValidator::validateObject(int objectIndex, customParser->validator = this; customParser->engine = enginePrivate; customParser->imports = &imports; - customParser->verifyBindings(qmlUnit, customBindings); + customParser->verifyBindings(compilationUnit, customBindings); customParser->validator = nullptr; customParser->engine = nullptr; customParser->imports = (QQmlImports*)nullptr; diff --git a/src/qml/qml/qqmlcustomparser_p.h b/src/qml/qml/qqmlcustomparser_p.h index 2a0f805014..bf28bca447 100644 --- a/src/qml/qml/qqmlcustomparser_p.h +++ b/src/qml/qml/qqmlcustomparser_p.h @@ -81,8 +81,8 @@ public: void clearErrors(); Flags flags() const { return m_flags; } - virtual void verifyBindings(const QV4::CompiledData::Unit *, const QList &) = 0; - virtual void applyBindings(QObject *, QV4::CompiledData::CompilationUnit *, const QList &) = 0; + virtual void verifyBindings(const QQmlRefPointer &, const QList &) = 0; + virtual void applyBindings(QObject *, const QQmlRefPointer &, const QList &) = 0; QVector errors() const { return exceptions; } diff --git a/src/qml/types/qqmlconnections.cpp b/src/qml/types/qqmlconnections.cpp index 183bb1bf74..0cb6758008 100644 --- a/src/qml/types/qqmlconnections.cpp +++ b/src/qml/types/qqmlconnections.cpp @@ -231,11 +231,11 @@ void QQmlConnections::setIgnoreUnknownSignals(bool ignore) d->ignoreUnknownSignals = ignore; } -void QQmlConnectionsParser::verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &props) +void QQmlConnectionsParser::verifyBindings(const QQmlRefPointer &compilationUnit, const QList &props) { for (int ii = 0; ii < props.count(); ++ii) { const QV4::CompiledData::Binding *binding = props.at(ii); - const QString &propName = qmlUnit->stringAt(binding->propertyNameIndex); + const QString &propName = compilationUnit->stringAt(binding->propertyNameIndex); if (!propName.startsWith(QLatin1String("on")) || (propName.length() < 3 || !propName.at(2).isUpper())) { error(props.at(ii), QQmlConnections::tr("Cannot assign to non-existent property \"%1\"").arg(propName)); @@ -243,8 +243,8 @@ void QQmlConnectionsParser::verifyBindings(const QV4::CompiledData::Unit *qmlUni } if (binding->type >= QV4::CompiledData::Binding::Type_Object) { - const QV4::CompiledData::Object *target = qmlUnit->objectAt(binding->value.objectIndex); - if (!qmlUnit->stringAt(target->inheritedTypeNameIndex).isEmpty()) + const QV4::CompiledData::Object *target = compilationUnit->objectAt(binding->value.objectIndex); + if (!compilationUnit->stringAt(target->inheritedTypeNameIndex).isEmpty()) error(binding, QQmlConnections::tr("Connections: nested objects not allowed")); else error(binding, QQmlConnections::tr("Connections: syntax error")); @@ -256,7 +256,7 @@ void QQmlConnectionsParser::verifyBindings(const QV4::CompiledData::Unit *qmlUni } } -void QQmlConnectionsParser::applyBindings(QObject *object, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) +void QQmlConnectionsParser::applyBindings(QObject *object, const QQmlRefPointer &compilationUnit, const QList &bindings) { QQmlConnectionsPrivate *p = static_cast(QObjectPrivate::get(object)); diff --git a/src/qml/types/qqmlconnections_p.h b/src/qml/types/qqmlconnections_p.h index 50e2c59ac3..6b063d5602 100644 --- a/src/qml/types/qqmlconnections_p.h +++ b/src/qml/types/qqmlconnections_p.h @@ -98,8 +98,8 @@ private: class QQmlConnectionsParser : public QQmlCustomParser { public: - void verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &props) override; - void applyBindings(QObject *object, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) override; + void verifyBindings(const QQmlRefPointer &compilationUnit, const QList &props) override; + void applyBindings(QObject *object, const QQmlRefPointer &compilationUnit, const QList &bindings) override; }; diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index 2325eca469..39616251eb 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -2651,12 +2651,12 @@ void QQmlListModel::sync() qmlWarning(this) << "List sync() can only be called from a WorkerScript"; } -bool QQmlListModelParser::verifyProperty(const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding) +bool QQmlListModelParser::verifyProperty(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Binding *binding) { if (binding->type >= QV4::CompiledData::Binding::Type_Object) { const quint32 targetObjectIndex = binding->value.objectIndex; - const QV4::CompiledData::Object *target = qmlUnit->objectAt(targetObjectIndex); - QString objName = qmlUnit->stringAt(target->inheritedTypeNameIndex); + const QV4::CompiledData::Object *target = compilationUnit->objectAt(targetObjectIndex); + QString objName = compilationUnit->stringAt(target->inheritedTypeNameIndex); if (objName != listElementTypeName) { const QMetaObject *mo = resolveType(objName); if (mo != &QQmlListElement::staticMetaObject) { @@ -2666,23 +2666,23 @@ bool QQmlListModelParser::verifyProperty(const QV4::CompiledData::Unit *qmlUnit, listElementTypeName = objName; // cache right name for next time } - if (!qmlUnit->stringAt(target->idNameIndex).isEmpty()) { + if (!compilationUnit->stringAt(target->idNameIndex).isEmpty()) { error(target->locationOfIdProperty, QQmlListModel::tr("ListElement: cannot use reserved \"id\" property")); return false; } const QV4::CompiledData::Binding *binding = target->bindingTable(); for (quint32 i = 0; i < target->nBindings; ++i, ++binding) { - QString propName = qmlUnit->stringAt(binding->propertyNameIndex); + QString propName = compilationUnit->stringAt(binding->propertyNameIndex); if (propName.isEmpty()) { error(binding, QQmlListModel::tr("ListElement: cannot contain nested elements")); return false; } - if (!verifyProperty(qmlUnit, binding)) + if (!verifyProperty(compilationUnit, binding)) return false; } } else if (binding->type == QV4::CompiledData::Binding::Type_Script) { - QString scriptStr = binding->valueAsScriptString(qmlUnit); + QString scriptStr = binding->valueAsScriptString(compilationUnit->data); if (!binding->isFunctionExpression() && !definesEmptyList(scriptStr)) { QByteArray script = scriptStr.toUtf8(); bool ok; @@ -2697,7 +2697,7 @@ bool QQmlListModelParser::verifyProperty(const QV4::CompiledData::Unit *qmlUnit, return true; } -bool QQmlListModelParser::applyProperty(QV4::CompiledData::CompilationUnit *compilationUnit, const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding, ListModel *model, int outterElementIndex) +bool QQmlListModelParser::applyProperty(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding, ListModel *model, int outterElementIndex) { const QString elementName = qmlUnit->stringAt(binding->propertyNameIndex); @@ -2775,22 +2775,22 @@ bool QQmlListModelParser::applyProperty(QV4::CompiledData::CompilationUnit *comp return roleSet; } -void QQmlListModelParser::verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &bindings) +void QQmlListModelParser::verifyBindings(const QQmlRefPointer &compilationUnit, const QList &bindings) { listElementTypeName = QString(); // unknown for (const QV4::CompiledData::Binding *binding : bindings) { - QString propName = qmlUnit->stringAt(binding->propertyNameIndex); + QString propName = compilationUnit->stringAt(binding->propertyNameIndex); if (!propName.isEmpty()) { // isn't default property error(binding, QQmlListModel::tr("ListModel: undefined property '%1'").arg(propName)); return; } - if (!verifyProperty(qmlUnit, binding)) + if (!verifyProperty(compilationUnit, binding)) return; } } -void QQmlListModelParser::applyBindings(QObject *obj, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) +void QQmlListModelParser::applyBindings(QObject *obj, const QQmlRefPointer &compilationUnit, const QList &bindings) { QQmlListModel *rv = static_cast(obj); diff --git a/src/qml/types/qqmllistmodel_p.h b/src/qml/types/qqmllistmodel_p.h index 56a1a95a02..54e5f53fcf 100644 --- a/src/qml/types/qqmllistmodel_p.h +++ b/src/qml/types/qqmllistmodel_p.h @@ -187,13 +187,13 @@ public: QQmlListModelParser() : QQmlCustomParser(QQmlCustomParser::AcceptsSignalHandlers) {} - void verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &bindings) override; - void applyBindings(QObject *obj, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) override; + void verifyBindings(const QQmlRefPointer &compilationUnit, const QList &bindings) override; + void applyBindings(QObject *obj, const QQmlRefPointer &compilationUnit, const QList &bindings) override; private: - bool verifyProperty(const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding); + bool verifyProperty(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Binding *binding); // returns true if a role was set - bool applyProperty(QV4::CompiledData::CompilationUnit *compilationUnit, const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding, ListModel *model, int outterElementIndex); + bool applyProperty(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding, ListModel *model, int outterElementIndex); static bool definesEmptyList(const QString &); diff --git a/src/quick/designer/qquickdesignercustomparserobject.cpp b/src/quick/designer/qquickdesignercustomparserobject.cpp index 9145b1367a..50a8b6a25b 100644 --- a/src/quick/designer/qquickdesignercustomparserobject.cpp +++ b/src/quick/designer/qquickdesignercustomparserobject.cpp @@ -46,12 +46,12 @@ QQuickDesignerCustomParserObject::QQuickDesignerCustomParserObject() } -void QQuickDesignerCustomParser::verifyBindings(const QV4::CompiledData::Unit *, const QList &) +void QQuickDesignerCustomParser::verifyBindings(const QQmlRefPointer &, const QList &) { /* Nothing to do we accept anything */ } -void QQuickDesignerCustomParser::applyBindings(QObject *, QV4::CompiledData::CompilationUnit *, const QList &) +void QQuickDesignerCustomParser::applyBindings(QObject *, const QQmlRefPointer &, const QList &) { /* Nothing to do we accept anything */ } diff --git a/src/quick/designer/qquickdesignercustomparserobject_p.h b/src/quick/designer/qquickdesignercustomparserobject_p.h index e4d0765277..b38417d102 100644 --- a/src/quick/designer/qquickdesignercustomparserobject_p.h +++ b/src/quick/designer/qquickdesignercustomparserobject_p.h @@ -70,8 +70,8 @@ public: QQuickDesignerCustomParser() : QQmlCustomParser(AcceptsAttachedProperties | AcceptsSignalHandlers) {} - void verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &props) override; - void applyBindings(QObject *obj, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) override; + void verifyBindings(const QQmlRefPointer &compilationUnit, const QList &props) override; + void applyBindings(QObject *obj, const QQmlRefPointer &compilationUnit, const QList &bindings) override; }; QT_END_NAMESPACE diff --git a/src/quick/util/qquickpropertychanges.cpp b/src/quick/util/qquickpropertychanges.cpp index 9c01a3f80e..ba519f3a6d 100644 --- a/src/quick/util/qquickpropertychanges.cpp +++ b/src/quick/util/qquickpropertychanges.cpp @@ -236,19 +236,19 @@ public: QQmlProperty property(const QString &); }; -void QQuickPropertyChangesParser::verifyList(const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding) +void QQuickPropertyChangesParser::verifyList(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Binding *binding) { if (binding->type == QV4::CompiledData::Binding::Type_Object) { - error(qmlUnit->objectAt(binding->value.objectIndex), QQuickPropertyChanges::tr("PropertyChanges does not support creating state-specific objects.")); + error(compilationUnit->objectAt(binding->value.objectIndex), QQuickPropertyChanges::tr("PropertyChanges does not support creating state-specific objects.")); return; } if (binding->type == QV4::CompiledData::Binding::Type_GroupProperty || binding->type == QV4::CompiledData::Binding::Type_AttachedProperty) { - const QV4::CompiledData::Object *subObj = qmlUnit->objectAt(binding->value.objectIndex); + const QV4::CompiledData::Object *subObj = compilationUnit->objectAt(binding->value.objectIndex); const QV4::CompiledData::Binding *subBinding = subObj->bindingTable(); for (quint32 i = 0; i < subObj->nBindings; ++i, ++subBinding) { - verifyList(qmlUnit, subBinding); + verifyList(compilationUnit, subBinding); } } } @@ -343,13 +343,13 @@ void QQuickPropertyChangesPrivate::decodeBinding(const QString &propertyPrefix, properties << qMakePair(propertyName, var); } -void QQuickPropertyChangesParser::verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &props) +void QQuickPropertyChangesParser::verifyBindings(const QQmlRefPointer &compilationUnit, const QList &props) { for (int ii = 0; ii < props.count(); ++ii) - verifyList(qmlUnit, props.at(ii)); + verifyList(compilationUnit, props.at(ii)); } -void QQuickPropertyChangesParser::applyBindings(QObject *obj, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) +void QQuickPropertyChangesParser::applyBindings(QObject *obj, const QQmlRefPointer &compilationUnit, const QList &bindings) { QQuickPropertyChangesPrivate *p = static_cast(QObjectPrivate::get(obj)); diff --git a/src/quick/util/qquickpropertychanges_p.h b/src/quick/util/qquickpropertychanges_p.h index 35b37e84cb..74fe511d6e 100644 --- a/src/quick/util/qquickpropertychanges_p.h +++ b/src/quick/util/qquickpropertychanges_p.h @@ -101,10 +101,10 @@ public: QQuickPropertyChangesParser() : QQmlCustomParser(AcceptsAttachedProperties) {} - void verifyList(const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding); + void verifyList(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Binding *binding); - void verifyBindings(const QV4::CompiledData::Unit *qmlUnit, const QList &props) override; - void applyBindings(QObject *obj, QV4::CompiledData::CompilationUnit *compilationUnit, const QList &bindings) override; + void verifyBindings(const QQmlRefPointer &compilationUnit, const QList &props) override; + void applyBindings(QObject *obj, const QQmlRefPointer &compilationUnit, const QList &bindings) override; }; -- cgit v1.2.3