aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSemih Yavuz <semih.yavuz@qt.io>2023-08-28 15:35:14 +0200
committerSemih Yavuz <semih.yavuz@qt.io>2023-08-30 15:54:24 +0000
commitfd2d1ceeae8d0b677a41188d7ff2b6ff04e9a01f (patch)
treeac95a3ad367e8e430a9976d144b897e976014e11
parent0bbb5ebccbf7a79c1c5bcd830a903ee3e4e8349a (diff)
Fix M16 warning restrictions
In case id is not ancestor, we cannot find that ID in m_idStack by design. The ID of an uncle type could be either popped out or not pushed in yet. The previous implementation, therefore, doesn't restrict M16 messages if non-ancestor ID is referred. As a workaround, disable M16 warnings completely if the enclosing type uses ImmediateProperties. Amends 012f984c27d8513e304d894f986977548d3c1add Task-number: QTCREATORBUG-28468 Change-Id: I47326e005753ff7b94057732602cfeb6dc525bbb Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r--src/libs/qmljs/qmljscheck.cpp14
-rw-r--r--tests/auto/qml/codemodel/check/accessById.qml21
2 files changed, 23 insertions, 12 deletions
diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index f1e72a7dc2..c1cf61d9dc 100644
--- a/src/libs/qmljs/qmljscheck.cpp
+++ b/src/libs/qmljs/qmljscheck.cpp
@@ -2048,14 +2048,14 @@ const Value *Check::checkScopeObjectMember(const UiQualifiedId *id)
return nullptr;
if (!value) {
- // We omit M16 messages if the type using ImmediateProperties
- // Ideally, we should obtain them through metaobject information
- const bool omitMessage = !m_typeStack.isEmpty()
- && ((m_typeStack.last() == "PropertyChanges")
- || m_typeStack.last() == "Binding")
- && !m_idStack.isEmpty() && m_idStack.last().contains(propertyName);
- if (!omitMessage)
+ // We omit M16 messages if the enclosing type have ImmediateProperties classinfo.
+ // Ideally, we should get this information from metaobject by checking the index
+ // metaObject->indexOfClassInfo("ImmediatePropertyNames"), for now it's hard coded.
+ if ( !m_typeStack.isEmpty()
+ && ((m_typeStack.last() != "PropertyChanges")
+ && m_typeStack.last() != "Binding")) {
addMessage(ErrInvalidPropertyName, id->identifierToken, propertyName);
+ }
return nullptr;
}
diff --git a/tests/auto/qml/codemodel/check/accessById.qml b/tests/auto/qml/codemodel/check/accessById.qml
index dd91ac671e..1fd4b34ca8 100644
--- a/tests/auto/qml/codemodel/check/accessById.qml
+++ b/tests/auto/qml/codemodel/check/accessById.qml
@@ -28,11 +28,22 @@ Window {
Text {
id: innerText
}
- states: State {
- name: "widerText"
- PropertyChanges { myText.width: undefined }
- AnchorChanges { innerRect.width: undefined } // 16 29 37
- }
+ states: [
+ State {
+ name: "widerText"
+ PropertyChanges { myText.width: undefined }
+ AnchorChanges { innerRect.width: undefined } // 16 29 37
+ },
+ State {
+ when: root.visible
+ PropertyChanges {
+ // change an object property that is not an ancestor
+ innerRect {
+ color: "blue"
+ }
+ }
+ }
+ ]
}
Binding {rect.width: innerText.width}