diff options
author | Andrei Golubev <andrei.golubev@qt.io> | 2022-07-29 15:16:20 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-07-29 20:49:48 +0000 |
commit | 2d92e8d184b24c03ab8092cbe5b21b3355b47bb2 (patch) | |
tree | a303aaba1e26d2f30f85b1bd3220554543a3c298 | |
parent | fe11a7dcc71adf017553d430a96a77020ca4c4d8 (diff) |
qmltc: Convert dynamic_cast check to static assert for QML interfaces
Fixes: QTBUG-104468
Change-Id: I51d869d43f24e8568f23c9b191331cf02b3c1600
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
(cherry picked from commit 41ebc90a0f80c2ffe20187a752e787ea84ad7d5c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | tools/qmltc/qmltccompilerpieces.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/tools/qmltc/qmltccompilerpieces.h b/tools/qmltc/qmltccompilerpieces.h index 37eb82d577..fc27ab76cc 100644 --- a/tools/qmltc/qmltccompilerpieces.h +++ b/tools/qmltc/qmltccompilerpieces.h @@ -472,8 +472,8 @@ inline void QmltcCodeGenerator::generate_interfaceCallCode(QmltcMethod *function QString::number(i)); function->body << u"child->%1(creator);"_s.arg(function->name); if (type->hasInterface(interfaceName)) { - function->body << u"Q_ASSERT(dynamic_cast<%1 *>(child) != nullptr);"_s.arg( - interfaceName); + function->body << u"static_assert(std::is_base_of<%1, %2>::value);"_s.arg( + interfaceName, type->internalName()); function->body << u"child->%1();"_s.arg(interfaceCall); } function->body << u"}"_s; @@ -482,6 +482,8 @@ inline void QmltcCodeGenerator::generate_interfaceCallCode(QmltcMethod *function if (type->hasInterface(interfaceName)) { function->body << u"if (canFinalize) {"_s; function->body << u" // call own method"_s; + function->body << u" static_assert(std::is_base_of<%1, %2>::value);"_s.arg( + interfaceName, type->internalName()); function->body << u" this->%1();"_s.arg(interfaceCall); function->body << u"}"_s; } |