aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-04-07 13:01:53 +0200
committerUlf Hermann <ulf.hermann@qt.io>2021-04-09 09:26:31 +0200
commit50b679a03cda1789c8a6c3b252551e5d143ce017 (patch)
treec148b8d298be380e4e2ba74ccb0738e34e8e1b81
parent0a07a6261263bb915c20539812146afd9005b64b (diff)
When resolving property types, also update the property type names
Otherwise we end up with a mixture of QML and C++ names. Task-number: QTBUG-92447 Change-Id: I94c44307d8dd762d11cfd8f178f33ab6a895ee83 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 4beba3a2b68a389c426791dd43c638f3539d8f20)
-rw-r--r--src/qmlcompiler/qqmljsimportvisitor.cpp14
-rw-r--r--tests/auto/qml/qmllint/data/stringLength2.qml10
-rw-r--r--tests/auto/qml/qmllint/tst_qmllint.cpp1
-rw-r--r--tools/qmllint/checkidentifiers.cpp2
4 files changed, 24 insertions, 3 deletions
diff --git a/src/qmlcompiler/qqmljsimportvisitor.cpp b/src/qmlcompiler/qqmljsimportvisitor.cpp
index 0e16b02846..3e24b59d1f 100644
--- a/src/qmlcompiler/qqmljsimportvisitor.cpp
+++ b/src/qmlcompiler/qqmljsimportvisitor.cpp
@@ -78,6 +78,10 @@ void QQmlJSImportVisitor::resolveAliases()
const auto it = m_scopesById.find(property.typeName());
if (it != m_scopesById.end()) {
property.setType(QQmlJSScope::ConstPtr(*it));
+ if (!it->isNull()) {
+ if (const QString internalName = (*it)->internalName(); !internalName.isEmpty())
+ property.setTypeName(internalName);
+ }
object->addOwnProperty(property);
}
}
@@ -161,11 +165,17 @@ bool QQmlJSImportVisitor::visit(UiPublicMember *publicMember)
}
QQmlJSMetaProperty prop;
prop.setPropertyName(publicMember->name.toString());
- prop.setTypeName(typeName.toString());
prop.setIsList(publicMember->typeModifier == QLatin1String("list"));
prop.setIsWritable(!publicMember->isReadonlyMember);
prop.setIsAlias(isAlias);
- prop.setType(m_rootScopeImports.value(prop.typeName()));
+ const QString typeNameString = typeName.toString();
+ if (const auto type = m_rootScopeImports.value(typeNameString)) {
+ prop.setType(type);
+ const QString internalName = type->internalName();
+ prop.setTypeName(internalName.isEmpty() ? typeNameString : internalName);
+ } else {
+ prop.setTypeName(typeNameString);
+ }
m_currentScope->insertPropertyIdentifier(prop);
break;
}
diff --git a/tests/auto/qml/qmllint/data/stringLength2.qml b/tests/auto/qml/qmllint/data/stringLength2.qml
new file mode 100644
index 0000000000..6dc2942b37
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/stringLength2.qml
@@ -0,0 +1,10 @@
+import QtQuick 2.15
+
+Item {
+ id: foo
+
+ property string s
+ Component.onCompleted: {
+ console.log("s.length", foo.s.length);
+ }
+}
diff --git a/tests/auto/qml/qmllint/tst_qmllint.cpp b/tests/auto/qml/qmllint/tst_qmllint.cpp
index 1a102fe81f..19b0111eba 100644
--- a/tests/auto/qml/qmllint/tst_qmllint.cpp
+++ b/tests/auto/qml/qmllint/tst_qmllint.cpp
@@ -315,6 +315,7 @@ void TestQmllint::cleanQmlCode_data()
QTest::newRow("goodAliasObject") << QStringLiteral("goodAliasObject.qml");
QTest::newRow("segFault") << QStringLiteral("SegFault.qml");
QTest::newRow("stringLength") << QStringLiteral("stringLength.qml");
+ QTest::newRow("stringLength2") << QStringLiteral("stringLength2.qml");
}
void TestQmllint::cleanQmlCode()
diff --git a/tools/qmllint/checkidentifiers.cpp b/tools/qmllint/checkidentifiers.cpp
index 8b8a184b7d..a3be58152c 100644
--- a/tools/qmllint/checkidentifiers.cpp
+++ b/tools/qmllint/checkidentifiers.cpp
@@ -61,7 +61,7 @@ static const QStringList unknownBuiltins = {
QStringLiteral("QRectF"), // TODO: should be added to builtins.qmltypes
QStringLiteral("QFont"), // TODO: should be added to builtins.qmltypes
QStringLiteral("QJSValue"), // We cannot say anything intelligent about untyped JS values.
- QStringLiteral("variant"), // Same for generic variants
+ QStringLiteral("QVariant"), // Same for generic variants
};
void CheckIdentifiers::printContext(