From 8ca6eb2b3927bf9629e9a8fee7d62a36cb933228 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Thu, 1 Feb 2024 10:05:59 +0100 Subject: [PATCH] JNI: Support declared QtJniTypes in QJniArray They can be treated like QJniObject, but are not QJniObject instances. Change-Id: I419b6d0493f9a0ad3dcc726d48ac4c9ad3e6bc19 Reviewed-by: Assam Boudjelthia (cherry picked from commit 77e00a4d08498285ea4273e01fda489ae6a7fd8a) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/kernel/qjniarray.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 16c02e087d8..f2f4dba92e7 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -126,7 +126,9 @@ public: using ElementType = typename std::remove_reference_t::value_type; if constexpr (std::disjunction_v, - std::is_same>) { + std::is_same, + std::is_base_of + >) { return makeObjectArray(std::forward(container)); } else if constexpr (std::is_same_v) { return makeArray(std::forward(container), &JNIEnv::NewFloatArray, @@ -370,10 +372,12 @@ auto QJniArrayBase::makeObjectArray(List &&list) // this assumes that all objects in the list have the same class jclass elementClass = nullptr; - if constexpr (std::is_same_v) + if constexpr (std::disjunction_v, + std::is_base_of>) { elementClass = list.first().objectClass(); - else + } else { elementClass = env->GetObjectClass(list.first()); + } auto localArray = env->NewObjectArray(length, elementClass, nullptr); if (QJniEnvironment::checkAndClearExceptions(env)) return QJniArray();