From 269694eb102ea4d6e2c65b0dace6ee7b1a7acd0a Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 5 Sep 2024 17:04:11 +0200 Subject: [PATCH] QmlJSCheck: Do not allow object in when condition This is syntactically correct and can be hard to spot, but is not valid QtQuick. Task-number: QDS-13452 Change-Id: I010e44e33147c97edbd992c3452ba1c086fb42cb Reviewed-by: Marco Bubke Reviewed-by: Ulf Hermann --- src/libs/qmljs/qmljscheck.cpp | 7 +++++++ src/libs/qmljs/qmljsstaticanalysismessage.cpp | 1 + src/libs/qmljs/qmljsstaticanalysismessage.h | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index c97fc10c55b..53796d0acdd 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -953,6 +953,13 @@ bool Check::visit(UiObjectBinding *ast) //addMessage(ErrBehavioursNotSupportedInQmlUi, locationFromRange(ast->firstSourceLocation(), ast->lastSourceLocation())); } + if (!m_typeStack.isEmpty() && m_typeStack.last() == "State" + && toString(ast->qualifiedId) == "when") { + addMessage( + ErrWhenConditionCannotBeObject, + locationFromRange(ast->firstSourceLocation(), ast->lastSourceLocation())); + } + visitQmlObject(ast, ast->qualifiedTypeNameId, ast->initializer); return false; } diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.cpp b/src/libs/qmljs/qmljsstaticanalysismessage.cpp index a58bf43765b..fc4579245db 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.cpp +++ b/src/libs/qmljs/qmljsstaticanalysismessage.cpp @@ -238,6 +238,7 @@ StaticAnalysisMessages::StaticAnalysisMessages() Tr::tr("Do not reference the root item as alias.")); newMsg(WarnAliasReferRootHierarchy, Warning, Tr::tr("Avoid referencing the root item in a hierarchy.")); + newMsg(ErrWhenConditionCannotBeObject, Error, Tr::tr("When condtion cannot contain an object.")); } } // anonymous namespace diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.h b/src/libs/qmljs/qmljsstaticanalysismessage.h index 97dd95c5eb9..b26eab2bd25 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.h +++ b/src/libs/qmljs/qmljsstaticanalysismessage.h @@ -113,7 +113,8 @@ enum Type { WarnComponentRequiresChildren = 327, WarnDuplicateImport = 400, ErrAliasReferRoot = 401, - WarnAliasReferRootHierarchy = 402 + WarnAliasReferRootHierarchy = 402, + ErrWhenConditionCannotBeObject = 403, }; class QMLJS_EXPORT PrototypeMessageData {