diff options
author | Erik Verbruggen <erik.verbruggen@qt.io> | 2018-05-29 13:55:38 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2018-06-26 08:31:20 +0000 |
commit | 036aa822455b4d831076a1ba364fa1ef304dee84 (patch) | |
tree | e6aa6a43147dd92a00d4305ec5db8944216837b2 /src/qml/qml/qqmlmetatype.cpp | |
parent | 23f9dd17b5f999b6a4c78f7513ea1c5a20d1208e (diff) |
Show error message when type qmlRegisterType and friends fail
When a type is registered through qmlRegisterType or similar functions,
no error was shown.
Task-number: QTBUG-68323
Change-Id: Iff44bf8744c67dba2fdd12c43aaee44a8e15364a
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlmetatype.cpp')
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index d842a7795f..2705321e77 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -114,13 +114,27 @@ struct QQmlMetaTypeData QSet<QString> protectedNamespaces; QString typeRegistrationNamespace; - QStringList typeRegistrationFailures; QHash<int, int> qmlLists; QHash<const QMetaObject *, QQmlPropertyCache *> propertyCaches; QQmlPropertyCache *propertyCache(const QMetaObject *metaObject); QQmlPropertyCache *propertyCache(const QQmlType &type, int minorVersion); + + void startRecordingTypeRegFailures(QStringList *storage) + { typeRegistrationFailures = storage; } + void stopRecordingTypeRegFailures() + { startRecordingTypeRegFailures(nullptr); } + void recordTypeRegFailure(const QString &message) + { + if (typeRegistrationFailures) + typeRegistrationFailures->append(message); + else + qWarning("%s", message.toUtf8().constData()); + } + +private: + QStringList *typeRegistrationFailures = nullptr; }; class QQmlTypeModulePrivate @@ -152,6 +166,16 @@ static uint qHash(const QQmlMetaTypeData::VersionedUri &v) return v.uri.hash() ^ qHash(v.majorVersion); } +QQmlMetaTypeRegistrationFailureRecorder::QQmlMetaTypeRegistrationFailureRecorder() +{ + metaTypeData()->startRecordingTypeRegFailures(&_failures); +} + +QQmlMetaTypeRegistrationFailureRecorder::~QQmlMetaTypeRegistrationFailureRecorder() +{ + metaTypeData()->stopRecordingTypeRegFailures(); +} + QQmlMetaTypeData::QQmlMetaTypeData() { } @@ -1571,7 +1595,7 @@ bool checkRegistration(QQmlType::RegistrationType typeType, QQmlMetaTypeData *da if (!typeName.isEmpty()) { if (typeName.at(0).isLower()) { QString failure(QCoreApplication::translate("qmlRegisterType", "Invalid QML %1 name \"%2\"; type names must begin with an uppercase letter")); - data->typeRegistrationFailures.append(failure.arg(registrationTypeString(typeType)).arg(typeName)); + data->recordTypeRegFailure(failure.arg(registrationTypeString(typeType)).arg(typeName)); return false; } @@ -1579,7 +1603,7 @@ bool checkRegistration(QQmlType::RegistrationType typeType, QQmlMetaTypeData *da for (int ii = 0; ii < typeNameLen; ++ii) { if (!(typeName.at(ii).isLetterOrNumber() || typeName.at(ii) == '_')) { QString failure(QCoreApplication::translate("qmlRegisterType", "Invalid QML %1 name \"%2\"")); - data->typeRegistrationFailures.append(failure.arg(registrationTypeString(typeType)).arg(typeName)); + data->recordTypeRegFailure(failure.arg(registrationTypeString(typeType)).arg(typeName)); return false; } } @@ -1593,7 +1617,7 @@ bool checkRegistration(QQmlType::RegistrationType typeType, QQmlMetaTypeData *da if (data->protectedNamespaces.contains(nameSpace)) { QString failure(QCoreApplication::translate("qmlRegisterType", "Cannot install %1 '%2' into protected namespace '%3'")); - data->typeRegistrationFailures.append(failure.arg(registrationTypeString(typeType)).arg(typeName).arg(nameSpace)); + data->recordTypeRegFailure(failure.arg(registrationTypeString(typeType)).arg(typeName).arg(nameSpace)); return false; } } else if (majorVersion >= 0) { @@ -1604,7 +1628,7 @@ bool checkRegistration(QQmlType::RegistrationType typeType, QQmlMetaTypeData *da if (QQmlTypeModulePrivate::get(qqtm)->locked){ QString failure(QCoreApplication::translate("qmlRegisterType", "Cannot install %1 '%2' into protected module '%3' version '%4'")); - data->typeRegistrationFailures.append(failure.arg(registrationTypeString(typeType)).arg(typeName).arg(nameSpace).arg(majorVersion)); + data->recordTypeRegFailure(failure.arg(registrationTypeString(typeType)).arg(typeName).arg(nameSpace).arg(majorVersion)); return false; } } @@ -1878,14 +1902,6 @@ void QQmlMetaType::setTypeRegistrationNamespace(const QString &uri) QQmlMetaTypeData *data = metaTypeData(); data->typeRegistrationNamespace = uri; - data->typeRegistrationFailures.clear(); -} - -QStringList QQmlMetaType::typeRegistrationFailures() -{ - QQmlMetaTypeData *data = metaTypeData(); - - return data->typeRegistrationFailures; } QMutex *QQmlMetaType::typeRegistrationLock() |