aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmldom/qqmldomtypesreader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmldom/qqmldomtypesreader.cpp')
-rw-r--r--src/qmldom/qqmldomtypesreader.cpp53
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();