diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-06-30 16:41:57 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-07-07 07:14:54 +0000 |
commit | 282c392d4ede2a26e31c4393bff1a5db7c928bd4 (patch) | |
tree | 2707dd4b6adbb91dce6491e77922c39d64256f43 | |
parent | c12294c1b26d4849586d8433d6ad38441846c9e2 (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.cpp | 16 |
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")); |