forked from qt-creator/qt-creator
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 012f984c27
Task-number: QTCREATORBUG-28468
Change-Id: I47326e005753ff7b94057732602cfeb6dc525bbb
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
@@ -2048,14 +2048,14 @@ const Value *Check::checkScopeObjectMember(const UiQualifiedId *id)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
if (!value) {
|
if (!value) {
|
||||||
// We omit M16 messages if the type using ImmediateProperties
|
// We omit M16 messages if the enclosing type have ImmediateProperties classinfo.
|
||||||
// Ideally, we should obtain them through metaobject information
|
// Ideally, we should get this information from metaobject by checking the index
|
||||||
const bool omitMessage = !m_typeStack.isEmpty()
|
// metaObject->indexOfClassInfo("ImmediatePropertyNames"), for now it's hard coded.
|
||||||
&& ((m_typeStack.last() == "PropertyChanges")
|
if ( !m_typeStack.isEmpty()
|
||||||
|| m_typeStack.last() == "Binding")
|
&& ((m_typeStack.last() != "PropertyChanges")
|
||||||
&& !m_idStack.isEmpty() && m_idStack.last().contains(propertyName);
|
&& m_typeStack.last() != "Binding")) {
|
||||||
if (!omitMessage)
|
|
||||||
addMessage(ErrInvalidPropertyName, id->identifierToken, propertyName);
|
addMessage(ErrInvalidPropertyName, id->identifierToken, propertyName);
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -28,12 +28,23 @@ Window {
|
|||||||
Text {
|
Text {
|
||||||
id: innerText
|
id: innerText
|
||||||
}
|
}
|
||||||
states: State {
|
states: [
|
||||||
|
State {
|
||||||
name: "widerText"
|
name: "widerText"
|
||||||
PropertyChanges { myText.width: undefined }
|
PropertyChanges { myText.width: undefined }
|
||||||
AnchorChanges { innerRect.width: undefined } // 16 29 37
|
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}
|
Binding {rect.width: innerText.width}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user