diff options
Diffstat (limited to 'src/corelib/kernel/qjniarray.h')
-rw-r--r-- | src/corelib/kernel/qjniarray.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 16c02e087d..f2f4dba92e 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<Container>::value_type; if constexpr (std::disjunction_v<std::is_same<ElementType, jobject>, - std::is_same<ElementType, QJniObject>>) { + std::is_same<ElementType, QJniObject>, + std::is_base_of<QtJniTypes::JObjectBase, ElementType> + >) { return makeObjectArray(std::forward<Container>(container)); } else if constexpr (std::is_same_v<ElementType, jfloat>) { return makeArray<jfloat>(std::forward<Container>(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<ElementType, QJniObject>) + if constexpr (std::disjunction_v<std::is_same<ElementType, QJniObject>, + std::is_base_of<QtJniTypes::JObjectBase, ElementType>>) { elementClass = list.first().objectClass(); - else + } else { elementClass = env->GetObjectClass(list.first()); + } auto localArray = env->NewObjectArray(length, elementClass, nullptr); if (QJniEnvironment::checkAndClearExceptions(env)) return QJniArray<jobject>(); |