summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2019-09-13 14:54:34 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2019-09-20 10:16:09 +0000
commite1f2fea488efc9665026bbd08d5ef8e785db694d (patch)
tree52aa3fd25b0225150c085cf99e2defb30afa7796
parentfe62dde83021434ce564046dea3b550ebd2d877f (diff)
downloadqt-creator-e1f2fea488efc9665026bbd08d5ef8e785db694d.tar.gz
QmlDesigner: Check complete type hierarchy for hints
A type can have hints provided by the .metainfo files. Without this patch hints from parent classes/components are not inherited. Therefore we have to walk the class hierarchy. Once we find hints they have precedence over all hints from further parent classes. Task-number: QDS-1056 Change-Id: I8dc8e7e92939e8e7eb834b94afbf5e396e8975de Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp
index dcb350c448..4862b59c04 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp
@@ -31,6 +31,7 @@
#include <rewriterview.h>
#include <propertyparser.h>
#include <nodeabstractproperty.h>
+#include <nodemetainfo.h>
#include <QDebug>
@@ -89,13 +90,30 @@ static QVariant evaluateExpression(const QString &expression, const ModelNode &m
QmlDesigner::NodeHints::NodeHints(const ModelNode &node) : m_modelNode(node)
{
- if (isValid()) {
- const ItemLibraryInfo *libraryInfo = model()->metaInfo().itemLibraryInfo();
+ if (!isValid())
+ return;
+
+ const ItemLibraryInfo *libraryInfo = model()->metaInfo().itemLibraryInfo();
+
+ if (!m_modelNode.metaInfo().isValid()) {
+
QList <ItemLibraryEntry> itemLibraryEntryList = libraryInfo->entriesForType(
modelNode().type(), modelNode().majorVersion(), modelNode().minorVersion());
if (!itemLibraryEntryList.isEmpty())
m_hints = itemLibraryEntryList.constFirst().hints();
+ } else { /* If we have meta information we run the complete type hierarchy and check for hints */
+ const auto classHierarchy = m_modelNode.metaInfo().classHierarchy();
+ for (const NodeMetaInfo &metaInfo : classHierarchy) {
+ QList <ItemLibraryEntry> itemLibraryEntryList = libraryInfo->entriesForType(
+ metaInfo.typeName(), metaInfo.majorVersion(), metaInfo.minorVersion());
+
+ if (!itemLibraryEntryList.isEmpty() && !itemLibraryEntryList.constFirst().hints().isEmpty()) {
+ m_hints = itemLibraryEntryList.constFirst().hints();
+ return;
+ }
+
+ }
}
}