summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-02-12 14:35:48 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-02-16 14:44:48 +0000
commit04c16d7c1e06d6bfc33c61e7fda0c59e45c4daaa (patch)
tree33e9d642de6db48065894cdb6be55ca7e7973acf
parentc0775e9a9cfb9541fc61d788516cfc635338b4f8 (diff)
qmllint: Don't create properties for "on" assignments
"on" assignments are assignments to the default property, with the property given interpreted as the target for the inner object. Change-Id: Ia93a171f759964d2c00d6c0293a5434f588123af Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 67c8afff346eae27c6fb833661d179326dd8b153) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/qmlcompiler/qqmljsimportvisitor.cpp27
-rw-r--r--tests/auto/qml/qmllint/data/onAssignment.qml7
-rw-r--r--tests/auto/qml/qmllint/tst_qmllint.cpp4
3 files changed, 26 insertions, 12 deletions
diff --git a/src/qmlcompiler/qqmljsimportvisitor.cpp b/src/qmlcompiler/qqmljsimportvisitor.cpp
index 5d858229dd..a1de41e3ca 100644
--- a/src/qmlcompiler/qqmljsimportvisitor.cpp
+++ b/src/qmlcompiler/qqmljsimportvisitor.cpp
@@ -470,21 +470,22 @@ bool QQmlJSImportVisitor::visit(QQmlJS::AST::FormalParameterList *fpl)
bool QQmlJSImportVisitor::visit(QQmlJS::AST::UiObjectBinding *uiob)
{
// property QtObject __styleData: QtObject {...}
-
QString name;
for (auto id = uiob->qualifiedTypeNameId; id; id = id->next)
name += id->name.toString() + QLatin1Char('.');
name.chop(1);
- QQmlJSMetaProperty prop;
- prop.setPropertyName(uiob->qualifiedId->name.toString());
- prop.setTypeName(name);
- prop.setIsWritable(true);
- prop.setIsPointer(true);
- prop.setIsAlias(name == QLatin1String("alias"));
- prop.setType(m_rootScopeImports.value(uiob->qualifiedTypeNameId->name.toString()));
- m_currentScope->addOwnProperty(prop);
+ if (!uiob->hasOnToken) {
+ QQmlJSMetaProperty prop;
+ prop.setPropertyName(uiob->qualifiedId->name.toString());
+ prop.setTypeName(name);
+ prop.setIsWritable(true);
+ prop.setIsPointer(true);
+ prop.setIsAlias(name == QLatin1String("alias"));
+ prop.setType(m_rootScopeImports.value(uiob->qualifiedTypeNameId->name.toString()));
+ m_currentScope->addOwnProperty(prop);
+ }
enterEnvironment(QQmlJSScope::QMLScope, name,
uiob->qualifiedTypeNameId ? uiob->qualifiedTypeNameId->identifierToken
@@ -500,9 +501,11 @@ void QQmlJSImportVisitor::endVisit(QQmlJS::AST::UiObjectBinding *uiob)
const QQmlJSScope::ConstPtr childScope = m_currentScope;
leaveEnvironment();
- QQmlJSMetaProperty property = m_currentScope->property(uiob->qualifiedId->name.toString());
- property.setType(childScope);
- m_currentScope->addOwnProperty(property);
+ if (!uiob->hasOnToken) {
+ QQmlJSMetaProperty property = m_currentScope->property(uiob->qualifiedId->name.toString());
+ property.setType(childScope);
+ m_currentScope->addOwnProperty(property);
+ }
}
bool QQmlJSImportVisitor::visit(ExportDeclaration *)
diff --git a/tests/auto/qml/qmllint/data/onAssignment.qml b/tests/auto/qml/qmllint/data/onAssignment.qml
new file mode 100644
index 0000000000..b754a7f311
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/onAssignment.qml
@@ -0,0 +1,7 @@
+import QtQuick
+
+Item {
+ property bool pressed: false
+ SequentialAnimation on pressed {}
+ property int wrong: pressed.loops
+}
diff --git a/tests/auto/qml/qmllint/tst_qmllint.cpp b/tests/auto/qml/qmllint/tst_qmllint.cpp
index 18b5090dcf..12b8f5619f 100644
--- a/tests/auto/qml/qmllint/tst_qmllint.cpp
+++ b/tests/auto/qml/qmllint/tst_qmllint.cpp
@@ -292,6 +292,10 @@ void TestQmllint::dirtyQmlCode_data()
<< QStringLiteral("Signal handler for \"onSig\" has more formal parameters "
"than the signal it handles.")
<< QString();
+ QTest::newRow("OnAssignment")
+ << QStringLiteral("onAssignment.qml")
+ << QStringLiteral("Property \"loops\" not found on type \"bool\"")
+ << QString();
}
void TestQmllint::dirtyQmlCode()