diff options
author | Liang Qi <liang.qi@qt.io> | 2017-10-24 12:32:39 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2017-10-24 12:32:39 +0000 |
commit | 1aa91f8b0b140c417c6e97dfd22fa498d31bceb6 (patch) | |
tree | 714b9c79ca84cf9bda9912ea723cd925f0e8f4c9 /src/qml/qml | |
parent | 83c8f8d90a960965c1f166c4421f514f4236212a (diff) | |
parent | 15dd1b7883f5dbe66266aeb588381f85f3532ab9 (diff) |
Merge "Merge remote-tracking branch 'origin/5.9' into 5.10" into refs/staging/5.10
Diffstat (limited to 'src/qml/qml')
-rw-r--r-- | src/qml/qml/ftw/qqmlthread.cpp | 27 | ||||
-rw-r--r-- | src/qml/qml/qqmlcomponent.cpp | 36 | ||||
-rw-r--r-- | src/qml/qml/qqmlcomponent_p.h | 13 | ||||
-rw-r--r-- | src/qml/qml/qqmldata_p.h | 5 | ||||
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 27 | ||||
-rw-r--r-- | src/qml/qml/qqmlimport.cpp | 61 | ||||
-rw-r--r-- | src/qml/qml/qqmlimport_p.h | 10 | ||||
-rw-r--r-- | src/qml/qml/qqmlmetatype_p.h | 3 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator.cpp | 8 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 19 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader_p.h | 5 | ||||
-rw-r--r-- | src/qml/qml/qqmltypenamecache.cpp | 3 |
13 files changed, 147 insertions, 72 deletions
diff --git a/src/qml/qml/ftw/qqmlthread.cpp b/src/qml/qml/ftw/qqmlthread.cpp index ffa6e29290..cae7088840 100644 --- a/src/qml/qml/ftw/qqmlthread.cpp +++ b/src/qml/qml/ftw/qqmlthread.cpp @@ -233,20 +233,27 @@ void QQmlThread::shutdown() { d->lock(); Q_ASSERT(!d->m_shutdown); - d->m_shutdown = true; - if (d->threadList.isEmpty() && d->m_threadProcessing == false) { - if (QCoreApplication::closingDown()) { - d->quit(); + + for (;;) { + if (d->mainSync || !d->mainList.isEmpty()) { d->unlock(); - d->QThread::wait(); - return; + d->mainEvent(); + d->lock(); + } else if (!d->threadList.isEmpty()) { + d->wait(); } else { - d->triggerThreadEvent(); + break; } - } else if (d->mainSync) { - d->wakeOne(); } - d->wait(); + + d->m_shutdown = true; + if (QCoreApplication::closingDown()) { + d->quit(); + } else { + d->triggerThreadEvent(); + d->wait(); + } + d->unlock(); d->QThread::wait(); } diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index e7a45482e6..8ec8669c60 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -878,19 +878,33 @@ QQmlComponentPrivate::beginCreate(QQmlContextData *context) } void QQmlComponentPrivate::beginDeferred(QQmlEnginePrivate *enginePriv, - QObject *object, ConstructionState *state) + QObject *object, DeferredState *deferredState) { - enginePriv->inProgressCreations++; - state->errors.clear(); - state->completePending = true; - QQmlData *ddata = QQmlData::get(object); - Q_ASSERT(ddata->deferredData); - QQmlData::DeferredData *deferredData = ddata->deferredData; - QQmlContextData *creationContext = 0; - state->creator.reset(new QQmlObjectCreator(deferredData->context->parent, deferredData->compilationUnit, creationContext)); - if (!state->creator->populateDeferredProperties(object)) - state->errors << state->creator->errors; + Q_ASSERT(!ddata->deferredData.isEmpty()); + + deferredState->constructionStates.reserve(ddata->deferredData.size()); + + for (QQmlData::DeferredData *deferredData : qAsConst(ddata->deferredData)) { + enginePriv->inProgressCreations++; + + ConstructionState *state = new ConstructionState; + state->completePending = true; + + QQmlContextData *creationContext = nullptr; + state->creator.reset(new QQmlObjectCreator(deferredData->context->parent, deferredData->compilationUnit, creationContext)); + + if (!state->creator->populateDeferredProperties(object, deferredData)) + state->errors << state->creator->errors; + + deferredState->constructionStates += state; + } +} + +void QQmlComponentPrivate::completeDeferred(QQmlEnginePrivate *enginePriv, QQmlComponentPrivate::DeferredState *deferredState) +{ + for (ConstructionState *state : qAsConst(deferredState->constructionStates)) + complete(enginePriv, state); } void QQmlComponentPrivate::complete(QQmlEnginePrivate *enginePriv, ConstructionState *state) diff --git a/src/qml/qml/qqmlcomponent_p.h b/src/qml/qml/qqmlcomponent_p.h index 6414025574..8a58a1ada0 100644 --- a/src/qml/qml/qqmlcomponent_p.h +++ b/src/qml/qml/qqmlcomponent_p.h @@ -121,8 +121,17 @@ public: }; ConstructionState state; - static void beginDeferred(QQmlEnginePrivate *enginePriv, QObject *object, - ConstructionState *state); + struct DeferredState { + ~DeferredState() { + qDeleteAll(constructionStates); + constructionStates.clear(); + } + QVector<ConstructionState *> constructionStates; + }; + + static void beginDeferred(QQmlEnginePrivate *enginePriv, QObject *object, DeferredState* deferredState); + static void completeDeferred(QQmlEnginePrivate *enginePriv, DeferredState *deferredState); + static void complete(QQmlEnginePrivate *enginePriv, ConstructionState *state); QQmlEngine *engine; diff --git a/src/qml/qml/qqmldata_p.h b/src/qml/qml/qqmldata_p.h index 75ea720358..d692feb975 100644 --- a/src/qml/qml/qqmldata_p.h +++ b/src/qml/qml/qqmldata_p.h @@ -57,6 +57,7 @@ #include <private/qv4value_p.h> #include <private/qv4persistent_p.h> #include <qjsengine.h> +#include <qvector.h> QT_BEGIN_NAMESPACE @@ -219,7 +220,9 @@ public: QQmlContextData *context;//Could be either context or outerContext }; QV4::CompiledData::CompilationUnit *compilationUnit; - DeferredData *deferredData; + QVector<DeferredData *> deferredData; + + void releaseDeferredData(); QV4::WeakValue jsWrapper; diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 5f4e291775..3ce50132c3 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -745,7 +745,7 @@ QQmlData::QQmlData() hasInterceptorMetaObject(false), hasVMEMetaObject(false), parentFrozen(false), bindingBitsSize(MaxInlineBits), bindingBitsValue(0), notifyList(0), bindings(0), signalHandlers(0), nextContextObject(0), prevContextObject(0), - lineNumber(0), columnNumber(0), jsEngineId(0), compilationUnit(0), deferredData(0), + lineNumber(0), columnNumber(0), jsEngineId(0), compilationUnit(0), propertyCache(0), guards(0), extendedData(0) { init(); @@ -1502,18 +1502,16 @@ void qmlExecuteDeferred(QObject *object) { QQmlData *data = QQmlData::get(object); - if (data && data->deferredData && !data->wasDeleted(object)) { + if (data && !data->deferredData.isEmpty() && !data->wasDeleted(object)) { QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine); - QQmlComponentPrivate::ConstructionState state; + QQmlComponentPrivate::DeferredState state; QQmlComponentPrivate::beginDeferred(ep, object, &state); // Release the reference for the deferral action (we still have one from construction) - data->deferredData->compilationUnit->release(); - delete data->deferredData; - data->deferredData = 0; + data->releaseDeferredData(); - QQmlComponentPrivate::complete(ep, &state); + QQmlComponentPrivate::completeDeferred(ep, &state); } } @@ -1671,6 +1669,15 @@ void QQmlData::NotifyList::layout() todo = 0; } +void QQmlData::releaseDeferredData() +{ + for (DeferredData *deferData : qAsConst(deferredData)) { + deferData->compilationUnit->release(); + delete deferData; + } + deferredData.clear(); +} + void QQmlData::addNotify(int index, QQmlNotifierEndpoint *endpoint) { if (!notifyList) { @@ -1745,11 +1752,7 @@ void QQmlData::destroyed(QObject *object) compilationUnit = 0; } - if (deferredData) { - deferredData->compilationUnit->release(); - delete deferredData; - deferredData = 0; - } + releaseDeferredData(); QQmlBoundSignal *signalHandler = signalHandlers; while (signalHandler) { diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp index 345b88b007..a85166da65 100644 --- a/src/qml/qml/qqmlimport.cpp +++ b/src/qml/qml/qqmlimport.cpp @@ -295,8 +295,10 @@ public: QList<QQmlError> *errors); bool resolveType(const QHashedStringRef &type, int *vmajor, int *vminor, - QQmlType* type_return, QList<QQmlError> *errors, - QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion); + QQmlType *type_return, QList<QQmlError> *errors, + QQmlType::RegistrationType registrationType, + QQmlImport::RecursionRestriction recursionRestriction + = QQmlImport::PreventRecursion); QUrl baseUrl; QString base; @@ -632,8 +634,9 @@ QString QQmlImports::versionString(int vmaj, int vmin, ImportVersion version) \sa addFileImport(), addLibraryImport */ bool QQmlImports::resolveType(const QHashedStringRef &type, - QQmlType* type_return, int *vmaj, int *vmin, + QQmlType *type_return, int *vmaj, int *vmin, QQmlImportNamespace** ns_return, QList<QQmlError> *errors, + QQmlType::RegistrationType registrationType, QQmlImport::RecursionRestriction recursionRestriction) const { QQmlImportNamespace* ns = d->findQualifiedNamespace(type); @@ -643,7 +646,8 @@ bool QQmlImports::resolveType(const QHashedStringRef &type, return true; } if (type_return) { - if (d->resolveType(type, vmaj, vmin, type_return, errors, recursionRestriction)) { + if (d->resolveType(type, vmaj, vmin, type_return, errors, registrationType, + recursionRestriction)) { if (qmlImportTrace()) { #define RESOLVE_TYPE_DEBUG qDebug().nospace() << "QQmlImports(" << qPrintable(baseUrl().toString()) \ << ')' << "::resolveType: " << type.toString() << " => " @@ -721,15 +725,17 @@ QQmlDirScripts QQmlImportInstance::getVersionedScripts(const QQmlDirScripts &qml If the return pointer is 0, the corresponding search is not done. */ bool QQmlImports::resolveType(QQmlImportNamespace *ns, const QHashedStringRef &type, - QQmlType *type_return, int *vmaj, int *vmin) const + QQmlType *type_return, int *vmaj, int *vmin, + QQmlType::RegistrationType registrationType) const { - return ns->resolveType(d->typeLoader, type, vmaj, vmin, type_return); + return ns->resolveType(d->typeLoader, type, vmaj, vmin, type_return, 0, 0, registrationType); } -bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, - const QHashedStringRef& type, int *vmajor, int *vminor, - QQmlType* type_return, QString *base, bool *typeRecursionDetected, - QQmlImport::RecursionRestriction recursionRestriction) const +bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef& type, + int *vmajor, int *vminor, QQmlType *type_return, QString *base, + bool *typeRecursionDetected, + QQmlType::RegistrationType registrationType, + QQmlImport::RecursionRestriction recursionRestriction) const { if (majversion >= 0 && minversion >= 0) { QQmlType t = QQmlMetaType::qmlType(type, uri, majversion, minversion); @@ -750,6 +756,18 @@ bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, QQmlDirComponents::ConstIterator candidate = end; for ( ; it != end && it.key() == typeStr; ++it) { const QQmlDirParser::Component &c = *it; + switch (registrationType) { + case QQmlType::AnyRegistrationType: + break; + case QQmlType::CompositeSingletonType: + if (!c.singleton) + continue; + break; + default: + if (c.singleton) + continue; + break; + } // importing version -1 means import ALL versions if ((majversion == -1) || @@ -784,8 +802,8 @@ bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, componentUrl = resolveLocalUrl(QString(url + candidate->typeName + dotqml_string), candidate->fileName); int major = vmajor ? *vmajor : -1; int minor = vminor ? *vminor : -1; - QQmlType returnType = fetchOrCreateTypeForUrl(componentUrl, type, isCompositeSingleton, 0, - major, minor); + QQmlType returnType = fetchOrCreateTypeForUrl(componentUrl, type, isCompositeSingleton, + 0, major, minor); if (type_return) *type_return = returnType; return returnType.isValid(); @@ -812,7 +830,8 @@ bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, if (typeRecursionDetected) *typeRecursionDetected = true; } else { - QQmlType returnType = fetchOrCreateTypeForUrl(qmlUrl, type, false, 0); + QQmlType returnType = fetchOrCreateTypeForUrl( + qmlUrl, type, registrationType == QQmlType::CompositeSingletonType, 0); if (type_return) *type_return = returnType; return returnType.isValid(); @@ -824,7 +843,8 @@ bool QQmlImportInstance::resolveType(QQmlTypeLoader *typeLoader, } bool QQmlImportsPrivate::resolveType(const QHashedStringRef& type, int *vmajor, int *vminor, - QQmlType* type_return, QList<QQmlError> *errors, + QQmlType *type_return, QList<QQmlError> *errors, + QQmlType::RegistrationType registrationType, QQmlImport::RecursionRestriction recursionRestriction) { QQmlImportNamespace *s = 0; @@ -854,7 +874,8 @@ bool QQmlImportsPrivate::resolveType(const QHashedStringRef& type, int *vmajor, } QHashedStringRef unqualifiedtype = dot < 0 ? type : QHashedStringRef(type.constData()+dot+1, type.length()-dot-1); if (s) { - if (s->resolveType(typeLoader, unqualifiedtype, vmajor, vminor, type_return, &base, errors, recursionRestriction)) + if (s->resolveType(typeLoader, unqualifiedtype, vmajor, vminor, type_return, &base, errors, + registrationType, recursionRestriction)) return true; if (s->imports.count() == 1 && !s->imports.at(0)->isLibrary && type_return && s != &unqualifiedset) { // qualified, and only 1 url @@ -876,20 +897,22 @@ QQmlImportInstance *QQmlImportNamespace::findImport(const QString &uri) const } bool QQmlImportNamespace::resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef &type, - int *vmajor, int *vminor, QQmlType* type_return, + int *vmajor, int *vminor, QQmlType *type_return, QString *base, QList<QQmlError> *errors, + QQmlType::RegistrationType registrationType, QQmlImport::RecursionRestriction recursionRestriction) { bool typeRecursionDetected = false; for (int i=0; i<imports.count(); ++i) { const QQmlImportInstance *import = imports.at(i); - if (import->resolveType(typeLoader, type, vmajor, vminor, type_return, - base, &typeRecursionDetected, recursionRestriction)) { + if (import->resolveType(typeLoader, type, vmajor, vminor, type_return, base, + &typeRecursionDetected, registrationType, recursionRestriction)) { if (qmlCheckTypes()) { // check for type clashes for (int j = i+1; j<imports.count(); ++j) { const QQmlImportInstance *import2 = imports.at(j); - if (import2->resolveType(typeLoader, type, vmajor, vminor, 0, base)) { + if (import2->resolveType(typeLoader, type, vmajor, vminor, nullptr, base, + nullptr, registrationType)) { if (errors) { QString u1 = import->url; QString u2 = import2->url; diff --git a/src/qml/qml/qqmlimport_p.h b/src/qml/qml/qqmlimport_p.h index a1911515d0..a7b65c1048 100644 --- a/src/qml/qml/qqmlimport_p.h +++ b/src/qml/qml/qqmlimport_p.h @@ -93,6 +93,7 @@ struct QQmlImportInstance bool resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef &type, int *vmajor, int *vminor, QQmlType* type_return, QString *base = 0, bool *typeRecursionDetected = 0, + QQmlType::RegistrationType = QQmlType::AnyRegistrationType, QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion) const; }; @@ -109,6 +110,7 @@ public: bool resolveType(QQmlTypeLoader *typeLoader, const QHashedStringRef& type, int *vmajor, int *vminor, QQmlType* type_return, QString *base = 0, QList<QQmlError> *errors = 0, + QQmlType::RegistrationType registrationType = QQmlType::AnyRegistrationType, QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion); // Prefix when used as a qualified import. Otherwise empty. @@ -136,10 +138,14 @@ public: int *version_major, int *version_minor, QQmlImportNamespace **ns_return, QList<QQmlError> *errors = 0, - QQmlImport::RecursionRestriction recursionRestriction = QQmlImport::PreventRecursion) const; + QQmlType::RegistrationType registrationType = QQmlType::AnyRegistrationType, + QQmlImport::RecursionRestriction recursionRestriction + = QQmlImport::PreventRecursion) const; bool resolveType(QQmlImportNamespace *, const QHashedStringRef& type, - QQmlType *type_return, int *version_major, int *version_minor) const; + QQmlType *type_return, int *version_major, int *version_minor, + QQmlType::RegistrationType registrationType + = QQmlType::AnyRegistrationType) const; bool addImplicitImport(QQmlImportDatabase *importDb, QList<QQmlError> *errors); diff --git a/src/qml/qml/qqmlmetatype_p.h b/src/qml/qml/qqmlmetatype_p.h index 720c6d904a..85ee4d7b97 100644 --- a/src/qml/qml/qqmlmetatype_p.h +++ b/src/qml/qml/qqmlmetatype_p.h @@ -260,7 +260,8 @@ public: SingletonType = 1, InterfaceType = 2, CompositeType = 3, - CompositeSingletonType = 4 + CompositeSingletonType = 4, + AnyRegistrationType = 255 }; private: diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 1c15022124..11fc3ceb44 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -233,10 +233,10 @@ QObject *QQmlObjectCreator::create(int subComponentIndex, QObject *parent, QQmlI return instance; } -bool QQmlObjectCreator::populateDeferredProperties(QObject *instance) +bool QQmlObjectCreator::populateDeferredProperties(QObject *instance, QQmlData::DeferredData *deferredData) { QQmlData *declarativeData = QQmlData::get(instance); - context = declarativeData->deferredData->context; + context = deferredData->context; sharedState->rootContext = context; QObject *bindingTarget = instance; @@ -260,7 +260,7 @@ bool QQmlObjectCreator::populateDeferredProperties(QObject *instance) qSwap(_propertyCache, cache); qSwap(_qobject, instance); - int objectIndex = declarativeData->deferredData->deferredIdx; + int objectIndex = deferredData->deferredIdx; qSwap(_compiledObjectIndex, objectIndex); const QV4::CompiledData::Object *obj = qmlUnit->objectAt(_compiledObjectIndex); @@ -1348,7 +1348,7 @@ bool QQmlObjectCreator::populateInstance(int index, QObject *instance, QObject * deferData->compilationUnit = compilationUnit; deferData->compilationUnit->addref(); deferData->context = context; - _ddata->deferredData = deferData; + _ddata->deferredData.append(deferData); } if (_compiledObject->nFunctions > 0) diff --git a/src/qml/qml/qqmlobjectcreator_p.h b/src/qml/qml/qqmlobjectcreator_p.h index 35bf96db4e..aa0165ec06 100644 --- a/src/qml/qml/qqmlobjectcreator_p.h +++ b/src/qml/qml/qqmlobjectcreator_p.h @@ -89,7 +89,7 @@ public: ~QQmlObjectCreator(); QObject *create(int subComponentIndex = -1, QObject *parent = 0, QQmlInstantiationInterrupt *interrupt = 0); - bool populateDeferredProperties(QObject *instance); + bool populateDeferredProperties(QObject *instance, QQmlData::DeferredData *deferredData); QQmlContextData *finalize(QQmlInstantiationInterrupt &interrupt); void cancel(QObject *object); void clear(); diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index d5ed5792b3..b9d6c521de 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2612,7 +2612,8 @@ void QQmlTypeData::resolveTypes() int majorVersion = csRef.majorVersion > -1 ? csRef.majorVersion : -1; int minorVersion = csRef.minorVersion > -1 ? csRef.minorVersion : -1; - if (!resolveType(typeName, majorVersion, minorVersion, ref)) + if (!resolveType(typeName, majorVersion, minorVersion, ref, -1, -1, true, + QQmlType::CompositeSingletonType)) return; if (ref.type.isCompositeSingleton()) { @@ -2640,7 +2641,9 @@ void QQmlTypeData::resolveTypes() const QString name = stringAt(unresolvedRef.key()); - if (!resolveType(name, majorVersion, minorVersion, ref, unresolvedRef->location.line, unresolvedRef->location.column, reportErrors) && reportErrors) + if (!resolveType(name, majorVersion, minorVersion, ref, unresolvedRef->location.line, + unresolvedRef->location.column, reportErrors, + QQmlType::AnyRegistrationType) && reportErrors) return; if (ref.type.isComposite()) { @@ -2714,20 +2717,22 @@ QQmlCompileError QQmlTypeData::buildTypeResolutionCaches( return noError; } -bool QQmlTypeData::resolveType(const QString &typeName, int &majorVersion, int &minorVersion, TypeReference &ref, int lineNumber, int columnNumber, bool reportErrors) +bool QQmlTypeData::resolveType(const QString &typeName, int &majorVersion, int &minorVersion, + TypeReference &ref, int lineNumber, int columnNumber, + bool reportErrors, QQmlType::RegistrationType registrationType) { QQmlImportNamespace *typeNamespace = 0; QList<QQmlError> errors; - bool typeFound = m_importCache.resolveType(typeName, &ref.type, - &majorVersion, &minorVersion, &typeNamespace, &errors); + bool typeFound = m_importCache.resolveType(typeName, &ref.type, &majorVersion, &minorVersion, + &typeNamespace, &errors, registrationType); if (!typeNamespace && !typeFound && !m_implicitImportLoaded) { // Lazy loading of implicit import if (loadImplicitImport()) { // Try again to find the type errors.clear(); - typeFound = m_importCache.resolveType(typeName, &ref.type, - &majorVersion, &minorVersion, &typeNamespace, &errors); + typeFound = m_importCache.resolveType(typeName, &ref.type, &majorVersion, &minorVersion, + &typeNamespace, &errors, registrationType); } else { return false; //loadImplicitImport() hit an error, and called setError already } diff --git a/src/qml/qml/qqmltypeloader_p.h b/src/qml/qml/qqmltypeloader_p.h index abc0df9068..ef63e02b4f 100644 --- a/src/qml/qml/qqmltypeloader_p.h +++ b/src/qml/qml/qqmltypeloader_p.h @@ -474,7 +474,10 @@ private: const QV4::CompiledData::ResolvedTypeReferenceMap &resolvedTypeCache, const QV4::CompiledData::DependentTypesHasher &dependencyHasher); void createTypeAndPropertyCaches(const QQmlRefPointer<QQmlTypeNameCache> &typeNameCache, const QV4::CompiledData::ResolvedTypeReferenceMap &resolvedTypeCache); - bool resolveType(const QString &typeName, int &majorVersion, int &minorVersion, TypeReference &ref, int lineNumber = -1, int columnNumber = -1, bool reportErrors = true); + bool resolveType(const QString &typeName, int &majorVersion, int &minorVersion, + TypeReference &ref, int lineNumber = -1, int columnNumber = -1, + bool reportErrors = true, + QQmlType::RegistrationType registrationType = QQmlType::AnyRegistrationType); void scriptImported(QQmlScriptBlob *blob, const QV4::CompiledData::Location &location, const QString &qualifier, const QString &nameSpace) override; diff --git a/src/qml/qml/qqmltypenamecache.cpp b/src/qml/qml/qqmltypenamecache.cpp index 136614d332..32b0fa16c4 100644 --- a/src/qml/qml/qqmltypenamecache.cpp +++ b/src/qml/qml/qqmltypenamecache.cpp @@ -154,7 +154,8 @@ QQmlTypeNameCache::Result QQmlTypeNameCache::query(const QV4::String *name, QQml QQmlImportNamespace *typeNamespace = 0; QList<QQmlError> errors; QQmlType t; - bool typeFound = m_imports.resolveType(typeName, &t, 0, 0, &typeNamespace, &errors, recursionRestriction); + bool typeFound = m_imports.resolveType(typeName, &t, 0, 0, &typeNamespace, &errors, + QQmlType::AnyRegistrationType, recursionRestriction); if (typeFound) { return Result(t); } |