aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2020-06-30 16:41:57 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2020-07-07 07:14:54 +0000
commit282c392d4ede2a26e31c4393bff1a5db7c928bd4 (patch)
tree2707dd4b6adbb91dce6491e77922c39d64256f43
parentc12294c1b26d4849586d8433d6ad38441846c9e2 (diff)
QmlDesigner: Fix for broken prototypes in templates
This is just a band-aid fix. plugins.qmltypes can contain "duplicated" cpp type declarations, some without export, similar to a forward declaration. This is the case for QQuickItem in templates for example. The prototype for QQuickItem in this case is not assoicated with QtQuick.Item, which we expect. Task-number: QTCREATORBUG-24283 Change-Id: I3377760e29f1af5c8e948aaa1ae7883448116872 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index 0efa621e68a..902072f1297 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -1263,7 +1263,21 @@ void NodeMetaInfoPrivate::setupPrototypes()
description.className = ov->className();
description.minorVersion = -1;
description.majorVersion = -1;
- if (const CppComponentValue * qmlValue = value_cast<CppComponentValue>(ov)) {
+ if (description.className == "QQuickItem") {
+ /* Ugly hack to recover from wrong prototypes for Item */
+ if (const CppComponentValue *qmlValue = value_cast<CppComponentValue>(
+ context()->lookupType(document(), {"Item"}))) {
+ description.className = "QtQuick.Item";
+ description.minorVersion = qmlValue->componentVersion().minorVersion();
+ description.majorVersion = qmlValue->componentVersion().majorVersion();
+ m_prototypes.append(description);
+ } else {
+ qWarning() << Q_FUNC_INFO << "Lookup for Item failed";
+ }
+ continue;
+ }
+
+ if (const CppComponentValue *qmlValue = value_cast<CppComponentValue>(ov)) {
description.minorVersion = qmlValue->componentVersion().minorVersion();
description.majorVersion = qmlValue->componentVersion().majorVersion();
LanguageUtils::FakeMetaObject::Export qtquickExport = qmlValue->metaObject()->exportInPackage(QLatin1String("QtQuick"));