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/qmltyperegistrar.cpp | |
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/qmltyperegistrar.cpp')
-rw-r--r-- | src/qmltyperegistrar/qmltyperegistrar.cpp | 21 |
1 files changed, 15 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; } |