aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmltyperegistrar
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-03-02 17:16:54 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-03-02 17:44:19 +0100
commit9e2aa53c14b007fe26d30b63926d343fe5ffed7d (patch)
treeb4689ad642279f19df23a505db2e396112708917 /src/qmltyperegistrar
parent744246b1129f6042c0264eb578a6e5c86e09f80a (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.cpp21
-rw-r--r--src/qmltyperegistrar/qmltypesclassdescription.cpp3
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,