diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-03-02 17:16:54 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-03-02 17:44:19 +0100 |
commit | 9e2aa53c14b007fe26d30b63926d343fe5ffed7d (patch) | |
tree | b4689ad642279f19df23a505db2e396112708917 /src/qmltyperegistrar | |
parent | 744246b1129f6042c0264eb578a6e5c86e09f80a (diff) |
qmltyperegistrar: Mark non-QObject types as uncreatable
qmlplugindump does so, and in fact they are uncreatable. Also, make
qmlTypeRegistrationMode() more robust. Each classDef should really
either be an object, a gadget, or a namespace.
Change-Id: If39bbbf6f9a4fdb269d095ca10d60ad5d87ca62d
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qmltyperegistrar')
-rw-r--r-- | src/qmltyperegistrar/qmltyperegistrar.cpp | 21 | ||||
-rw-r--r-- | src/qmltyperegistrar/qmltypesclassdescription.cpp | 3 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/qmltyperegistrar/qmltyperegistrar.cpp b/src/qmltyperegistrar/qmltyperegistrar.cpp index 6fe5a20092..6154d87e99 100644 --- a/src/qmltyperegistrar/qmltyperegistrar.cpp +++ b/src/qmltyperegistrar/qmltyperegistrar.cpp @@ -49,7 +49,8 @@ struct ScopedPointerFileCloser enum RegistrationMode { NoRegistration, - ClassRegistration, + ObjectRegistration, + GadgetRegistration, NamespaceRegistration }; @@ -59,8 +60,16 @@ static RegistrationMode qmlTypeRegistrationMode(const QJsonObject &classDef) for (const QJsonValue &info: classInfos) { const QString name = info[QLatin1String("name")].toString(); if (name == QLatin1String("QML.Element")) { - return classDef[QLatin1String("namespace")].toBool() ? NamespaceRegistration - : ClassRegistration; + if (classDef[QLatin1String("object")].toBool()) + return ObjectRegistration; + if (classDef[QLatin1String("gadget")].toBool()) + return GadgetRegistration; + if (classDef[QLatin1String("namespace")].toBool()) + return NamespaceRegistration; + qWarning() << "Not registering classInfo which is neither an object, " + "nor a gadget, nor a namespace:" + << name; + break; } } return NoRegistration; @@ -295,9 +304,8 @@ int main(int argc, char **argv) QJsonObject classDef = cls.toObject(); switch (qmlTypeRegistrationMode(classDef)) { case NamespaceRegistration: - classDef.insert(QLatin1String("namespace"), true); - Q_FALLTHROUGH(); - case ClassRegistration: { + case GadgetRegistration: + case ObjectRegistration: { const QString include = metaObject[QLatin1String("inputFile")].toString(); const bool declaredInHeader = include.endsWith(QLatin1String(".h")); if (declaredInHeader) { @@ -309,6 +317,7 @@ int main(int argc, char **argv) qPrintable(classDef.value(QLatin1String("qualifiedClassName")) .toString())); } + types.append(classDef); break; } diff --git a/src/qmltyperegistrar/qmltypesclassdescription.cpp b/src/qmltyperegistrar/qmltypesclassdescription.cpp index c6279998b7..3442dc9d64 100644 --- a/src/qmltyperegistrar/qmltypesclassdescription.cpp +++ b/src/qmltyperegistrar/qmltypesclassdescription.cpp @@ -154,6 +154,9 @@ void QmlTypesClassDescription::collect(const QJsonObject *classDef, revisions.erase(end, revisions.end()); resolvedClass = classDef; + + // If it's not a QObject, it's not creatable + isCreatable = isCreatable && classDef->value(QLatin1String("object")).toBool(); } void QmlTypesClassDescription::collectAttached(const QString &attached, |