diff options
Diffstat (limited to 'src/qmldom/qqmldomtypesreader.cpp')
-rw-r--r-- | src/qmldom/qqmldomtypesreader.cpp | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/src/qmldom/qqmldomtypesreader.cpp b/src/qmldom/qqmldomtypesreader.cpp index 3f83130234..ae1ec7fb94 100644 --- a/src/qmldom/qqmldomtypesreader.cpp +++ b/src/qmldom/qqmldomtypesreader.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qqmldomtypesreader_p.h" #include "qqmldomelements_p.h" @@ -9,11 +9,7 @@ #include <QtQml/private/qqmljsparser_p.h> #include <QtQml/private/qqmljslexer_p.h> #include <QtQml/private/qqmljsengine_p.h> -#ifdef QMLDOM_STANDALONE -# include "qmlcompiler/qqmljstypedescriptionreader_p.h" -#else -# include <private/qqmljstypedescriptionreader_p.h> -#endif +#include <private/qqmljstypedescriptionreader_p.h> #include <QtCore/qdir.h> @@ -24,15 +20,16 @@ namespace Dom { using namespace QQmlJS::AST; -static ErrorGroups myParseErrors() +static ErrorGroups readerParseErrors() { static ErrorGroups errs = { { NewErrorGroup("Dom"), NewErrorGroup("QmltypesFile"), NewErrorGroup("Parsing") } }; return errs; } -void QmltypesReader::insertProperty(QQmlJSScope::Ptr jsScope, const QQmlJSMetaProperty &property, - QMap<int, QmlObject> &objs) +void QmltypesReader::insertProperty( + const QQmlJSScope::ConstPtr &jsScope, const QQmlJSMetaProperty &property, + QMap<int, QmlObject> &objs) { PropertyDefinition prop; prop.name = property.propertyName(); @@ -49,7 +46,7 @@ void QmltypesReader::insertProperty(QQmlJSScope::Ptr jsScope, const QQmlJSMetaPr prop.notify = property.notify(); if (prop.name.isEmpty() || prop.typeName.isEmpty()) { - addError(myParseErrors() + addError(readerParseErrors() .warning(tr("Property object is missing a name or type script binding.")) .handle()); return; @@ -63,11 +60,11 @@ void QmltypesReader::insertSignalOrMethod(const QQmlJSMetaMethod &metaMethod, MethodInfo methodInfo; // ### confusion between Method and Slot. Method should be removed. switch (metaMethod.methodType()) { - case QQmlJSMetaMethod::Method: - case QQmlJSMetaMethod::Slot: + case QQmlJSMetaMethodType::Method: + case QQmlJSMetaMethodType::Slot: methodInfo.methodType = MethodInfo::MethodType::Method; break; - case QQmlJSMetaMethod::Signal: + case QQmlJSMetaMethodType::Signal: methodInfo.methodType = MethodInfo::MethodType::Signal; break; default: @@ -86,7 +83,7 @@ void QmltypesReader::insertSignalOrMethod(const QQmlJSMetaMethod &metaMethod, int revision = metaMethod.revision(); methodInfo.isConstructor = metaMethod.isConstructor(); if (methodInfo.name.isEmpty()) { - addError(myParseErrors().error(tr("Method or signal is missing a name.")).handle()); + addError(readerParseErrors().error(tr("Method or signal is missing a name.")).handle()); return; } @@ -112,20 +109,26 @@ EnumDecl QmltypesReader::enumFromMetaEnum(const QQmlJSMetaEnum &metaEnum) return res; } -void QmltypesReader::insertComponent(const QQmlJSScope::Ptr &jsScope, +void QmltypesReader::insertComponent(const QQmlJSScope::ConstPtr &jsScope, const QList<QQmlJSScope::Export> &exportsList) { QmltypesComponent comp; + comp.setSemanticScope(jsScope); QMap<int, QmlObject> objects; { bool hasExports = false; for (const QQmlJSScope::Export &jsE : exportsList) { int metaRev = jsE.version().toEncodedVersion<int>(); hasExports = true; - objects.insert(metaRev, QmlObject()); + QmlObject object; + object.setSemanticScope(jsScope); + objects.insert(metaRev, object); + } + if (!hasExports) { + QmlObject object; + object.setSemanticScope(jsScope); + objects.insert(0, object); } - if (!hasExports) - objects.insert(0, QmlObject()); } bool incrementedPath = false; QString prototype; @@ -176,6 +179,7 @@ void QmltypesReader::insertComponent(const QQmlJSScope::Ptr &jsScope, comp.setValueTypeName(jsScope->valueTypeName()); comp.setAccessSemantics(jsScope->accessSemantics()); comp.setExtensionTypeName(jsScope->extensionTypeName()); + comp.setExtensionIsJavaScript(jsScope->extensionIsJavaScript()); comp.setExtensionIsNamespace(jsScope->extensionIsNamespace()); Path exportSourcePath = qmltypesFile().canonicalPath(); QMap<int, Path> revToPath; @@ -193,7 +197,7 @@ void QmltypesReader::insertComponent(const QQmlJSScope::Ptr &jsScope, while (it != begin) { --it; if (it.key() < 0) { - addError(myParseErrors().error( + addError(readerParseErrors().error( tr("negative meta revision %1 not supported").arg(it.key()))); } revToPath.insert(it.key(), compPath.field(Fields::objects).index(objectIndex)); @@ -219,6 +223,7 @@ void QmltypesReader::insertComponent(const QQmlJSScope::Ptr &jsScope, Export e; e.uri = jsE.package(); e.typeName = jsE.type(); + e.isSingleton = jsScope->isSingleton(); e.version = Version((v.hasMajorVersion() ? v.majorVersion() : Version::Latest), (v.hasMinorVersion() ? v.minorVersion() : Version::Latest)); e.typePath = revToPath.value(metaRev); @@ -230,7 +235,7 @@ void QmltypesReader::insertComponent(const QQmlJSScope::Ptr &jsScope, } if (comp.name().isEmpty()) { - addError(myParseErrors() + addError(readerParseErrors() .error(tr("Component definition is missing a name binding.")) .handle()); return; @@ -246,14 +251,14 @@ bool QmltypesReader::parse() qmltypesFilePtr()->code()); QStringList dependencies; QList<QQmlJSExportedScope> objects; - m_isValid = reader(&objects, &dependencies); + const bool isValid = reader(&objects, &dependencies); for (const auto &obj : std::as_const(objects)) insertComponent(obj.scope, obj.exports); - qmltypesFilePtr()->setIsValid(m_isValid); - return m_isValid; + qmltypesFilePtr()->setIsValid(isValid); + return isValid; } -void QmltypesReader::addError(ErrorMessage message) +void QmltypesReader::addError(ErrorMessage &&message) { if (message.file.isEmpty()) message.file = qmltypesFile().canonicalFilePath(); |