aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrei Golubev <andrei.golubev@qt.io>2022-07-29 15:16:20 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-07-29 20:49:48 +0000
commit2d92e8d184b24c03ab8092cbe5b21b3355b47bb2 (patch)
treea303aaba1e26d2f30f85b1bd3220554543a3c298
parentfe11a7dcc71adf017553d430a96a77020ca4c4d8 (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.h6
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;
}