From 7a6359c614980753b19e5e47894f94e9d1e91e42 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Wed, 13 Dec 2023 16:17:05 +0100 Subject: [PATCH] JNI API review: minor API and implementation cleanups - prefix ValidField/SignatureTypes predicates with "If" - make QJniArray SMF constexpr and noexcept - remove const from return-by-value QJniArray functions - rename QJniArray::asContainer to toContainer - constrain QJniEnvironment::registerNativeMethods to valid class types - don't home-grow std::forward - make default QtJniTypes::Object constructor implicit - don't include copy/move constructors in QtJniTypes::Object variadic constructor Change-Id: Ied02993d32d8b0f3ef1e571b75ada15ede1f8389 Reviewed-by: Assam Boudjelthia (cherry picked from commit a936b86ec8720ac3dc63f9eca0f873b4f86827ce) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/kernel/qjniarray.h | 18 +++--- src/corelib/kernel/qjnienvironment.h | 6 +- src/corelib/kernel/qjniobject.h | 44 ++++++------- src/corelib/kernel/qjnitypes.h | 27 ++++---- src/corelib/kernel/qjnitypes_impl.h | 16 ++--- .../kernel/qjniobject/tst_qjniobject.cpp | 64 +++++++++---------- 6 files changed, 92 insertions(+), 83 deletions(-) diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 1a990221cd2..45418047252 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -18,10 +18,10 @@ template class QJniArray; template struct QJniArrayIterator { - QJniArrayIterator(const QJniArrayIterator &other) = default; - QJniArrayIterator(QJniArrayIterator &&other) noexcept = default; - QJniArrayIterator &operator=(const QJniArrayIterator &other) = default; - QJniArrayIterator &operator=(QJniArrayIterator &&other) noexcept = default; + constexpr QJniArrayIterator(const QJniArrayIterator &other) noexcept = default; + constexpr QJniArrayIterator(QJniArrayIterator &&other) noexcept = default; + constexpr QJniArrayIterator &operator=(const QJniArrayIterator &other) noexcept = default; + constexpr QJniArrayIterator &operator=(QJniArrayIterator &&other) noexcept = default; friend bool operator==(const QJniArrayIterator &lhs, const QJniArrayIterator &rhs) noexcept { @@ -31,7 +31,7 @@ struct QJniArrayIterator { return !(lhs == rhs); } - const T operator*() const + T operator*() const { return m_array->at(m_index); } @@ -196,7 +196,7 @@ public: const_iterator constEnd() const { return {end()}; } const_iterator cend() const { return {end()}; } - const T operator[](qsizetype i) const { return at(i); } // const return value to disallow assignment + T operator[](qsizetype i) const { return at(i); } T at(qsizetype i) const { JNIEnv *env = jniEnv(); @@ -227,7 +227,7 @@ public: return res; } } - auto asContainer() const + auto toContainer() const { JNIEnv *env = jniEnv(); if constexpr (std::is_same_v) { @@ -337,14 +337,14 @@ namespace QtJniTypes template struct IsJniArray: std::false_type {}; template struct IsJniArray> : std::true_type {}; template struct Traits> { - template = true> + template = true> static constexpr auto signature() { return CTString("[") + Traits::signature(); } }; template struct Traits> { - template = true> + template = true> static constexpr auto signature() { return CTString("[") + Traits::signature(); diff --git a/src/corelib/kernel/qjnienvironment.h b/src/corelib/kernel/qjnienvironment.h index 0ca9614ca63..dda8dc0950c 100644 --- a/src/corelib/kernel/qjnienvironment.h +++ b/src/corelib/kernel/qjnienvironment.h @@ -64,7 +64,11 @@ public: return registerNativeMethods(clazz, std::data(methods), methods.size()); } - template + template(), bool> = true +#endif + > bool registerNativeMethods(std::initializer_list methods) { return registerNativeMethods(QtJniTypes::Traits::className().data(), methods); diff --git a/src/corelib/kernel/qjniobject.h b/src/corelib/kernel/qjniobject.h index 73adb7140a7..3cea9098f87 100644 --- a/src/corelib/kernel/qjniobject.h +++ b/src/corelib/kernel/qjniobject.h @@ -116,7 +116,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > auto callMethod(const char *methodName, const char *signature, Args &&...args) const @@ -148,7 +148,7 @@ public: template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > auto callMethod(const char *methodName, Args &&...args) const @@ -159,7 +159,7 @@ public: template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > QJniObject callObjectMethod(const char *methodName, Args &&...args) const @@ -192,7 +192,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static auto callStaticMethod(jclass clazz, jmethodID methodId, Args &&...args) @@ -223,7 +223,7 @@ public: template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > static auto callStaticMethod(const char *className, const char *methodName, Args &&...args) @@ -238,7 +238,7 @@ public: template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > static auto callStaticMethod(jclass clazz, const char *methodName, Args &&...args) @@ -248,7 +248,7 @@ public: } template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > static auto callStaticMethod(const char *methodName, Args &&...args) @@ -273,7 +273,7 @@ public: template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > static QJniObject callStaticObjectMethod(const char *className, const char *methodName, Args &&...args) @@ -287,7 +287,7 @@ public: template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > static QJniObject callStaticObjectMethod(jclass clazz, const char *methodName, Args &&...args) @@ -301,7 +301,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > auto getField(const char *fieldName) const @@ -324,7 +324,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static auto getStaticField(const char *className, const char *fieldName) @@ -342,7 +342,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static auto getStaticField(jclass clazz, const char *fieldName) @@ -365,7 +365,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static auto getStaticField(const char *fieldName) @@ -417,7 +417,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > void setField(const char *fieldName, T value) @@ -432,7 +432,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > void setField(const char *fieldName, const char *signature, T value) @@ -446,7 +446,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static void setStaticField(const char *className, const char *fieldName, T value) @@ -468,7 +468,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static void setStaticField(const char *className, const char *fieldName, @@ -490,7 +490,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static void setStaticField(jclass clazz, const char *fieldName, @@ -507,7 +507,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static void setStaticField(jclass clazz, const char *fieldName, T value) @@ -517,7 +517,7 @@ public: template = true + , QtJniTypes::IfValidFieldType = true #endif > static void setStaticField(const char *fieldName, T value) @@ -793,7 +793,7 @@ auto QJniObject::LocalFrame::convertToJni(T &&value) } else if constexpr (std::is_base_of_v) { return value.object(); } else { - return static_cast(value); + return std::forward(value); } } @@ -812,7 +812,7 @@ auto QJniObject::LocalFrame::convertFromJni(QJniObject &&object) // then that QJniArray would have elements of type using ElementType = typename QJniArrayType::Type; // construct a QJniArray from a jobject pointer of that type - return QJniArray(object.template object()).asContainer(); + return QJniArray(object.template object()).toContainer(); } else if constexpr (std::is_array_v) { using ElementType = std::remove_extent_t; return QJniArray{object}; diff --git a/src/corelib/kernel/qjnitypes.h b/src/corelib/kernel/qjnitypes.h index bf2f77a6636..b129afb50b1 100644 --- a/src/corelib/kernel/qjnitypes.h +++ b/src/corelib/kernel/qjnitypes.h @@ -34,12 +34,17 @@ struct Object : QJniObject // avoid ambiguities with deleted const char * constructor Q_IMPLICIT Object(std::nullptr_t) : QJniObject() {} - // this intentionally includes the default constructor - template = true + Object() + : QJniObject(QtJniTypes::Traits::className()) + {} + + template, bool> = true + , IfValidSignatureTypes = true > - explicit Object(Args &&...args) - : QJniObject(QtJniTypes::Traits::className(), std::forward(args)...) + explicit Object(Arg && arg, Args &&...args) + : QJniObject(QtJniTypes::Traits::className(), std::forward(arg), + std::forward(args)...) {} // named constructors avoid ambiguities @@ -56,7 +61,7 @@ struct Object : QJniObject // public API forwarding to QJniObject, with the implicit Class template parameter template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > static auto callStaticMethod(const char *name, Args &&...args) @@ -66,7 +71,7 @@ struct Object : QJniObject } template = true + , QtJniTypes::IfValidFieldType = true #endif > static auto getStaticField(const char *field) @@ -75,7 +80,7 @@ struct Object : QJniObject } template = true + , QtJniTypes::IfValidFieldType = true #endif > static void setStaticField(const char *field, T &&value) @@ -86,7 +91,7 @@ struct Object : QJniObject // keep only these overloads, the rest is made private template = true + , QtJniTypes::IfValidSignatureTypes = true #endif > auto callMethod(const char *method, Args &&...args) const @@ -95,7 +100,7 @@ struct Object : QJniObject } template = true + , QtJniTypes::IfValidFieldType = true #endif > auto getField(const char *fieldName) const @@ -105,7 +110,7 @@ struct Object : QJniObject template = true + , QtJniTypes::IfValidFieldType = true #endif > void setField(const char *fieldName, T &&value) diff --git a/src/corelib/kernel/qjnitypes_impl.h b/src/corelib/kernel/qjnitypes_impl.h index 3af253ddc69..3612e506869 100644 --- a/src/corelib/kernel/qjnitypes_impl.h +++ b/src/corelib/kernel/qjnitypes_impl.h @@ -156,7 +156,7 @@ struct Traits { // The return type of className/signature becomes void for any type // not handled here. This indicates that the Traits type is not specialized // for the respective type, which we use to detect invalid types in the - // ValidSignatureTypes and ValidFieldType predicates below. + // IfValidSignatureTypes and IfValidFieldType predicates below. static constexpr auto className() { @@ -281,17 +281,17 @@ constexpr bool ValidSignatureTypesDetail = !std::disjunction..., IsStringType...>::value; template -using ValidSignatureTypes = std::enable_if_t< +using IfValidSignatureTypes = std::enable_if_t< ValidSignatureTypesDetail...>, bool>; template constexpr bool ValidFieldTypeDetail = isObjectType() || isPrimitiveType(); template -using ValidFieldType = std::enable_if_t< +using IfValidFieldType = std::enable_if_t< ValidFieldTypeDetail>, bool>; -template = true> +template = true> static constexpr auto methodSignature() { return (CTString("(") + @@ -300,25 +300,25 @@ static constexpr auto methodSignature() + Traits::signature(); } -template = true> +template = true> static constexpr auto fieldSignature() { return QtJniTypes::Traits::signature(); } -template = true> +template = true> static constexpr auto constructorSignature() { return methodSignature(); } -template = true> +template = true> static constexpr auto nativeMethodSignature(Ret (*)(JNIEnv *, jobject, Args...)) { return methodSignature(); } -template = true> +template = true> static constexpr auto nativeMethodSignature(Ret (*)(JNIEnv *, jclass, Args...)) { return methodSignature(); diff --git a/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp b/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp index d3e7fe83927..cce1ac31a2c 100644 --- a/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp +++ b/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp @@ -1550,13 +1550,13 @@ void tst_QJniObject::templateApiCheck() const auto array = TestClass::callStaticMethod("staticBooleanArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{true, true, true})); + QCOMPARE(array.toContainer(), (QList{true, true, true})); QJniArray newArray(QList{true, false, false}); QVERIFY(newArray.isValid()); const auto reverse = TestClass::callStaticMethod("staticReverseBooleanArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{false, false, true})); + QCOMPARE(reverse.toContainer(), (QList{false, false, true})); } { @@ -1566,13 +1566,13 @@ void tst_QJniObject::templateApiCheck() const auto array = testClass.callMethod("booleanArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{true, true, true})); + QCOMPARE(array.toContainer(), (QList{true, true, true})); QJniArray newArray(QList{true, false, false}); QVERIFY(newArray.isValid()); const auto reverse = testClass.callMethod("reverseBooleanArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{false, false, true})); + QCOMPARE(reverse.toContainer(), (QList{false, false, true})); } // jbyteArray --------------------------------------------------------------------------------- @@ -1584,13 +1584,13 @@ void tst_QJniObject::templateApiCheck() const auto array = TestClass::callStaticMethod("staticByteArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), "abc"); + QCOMPARE(array.toContainer(), "abc"); QJniArray newArray(QByteArray{"cba"}); QVERIFY(newArray.isValid()); const auto reverse = TestClass::callStaticMethod("staticReverseByteArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), "abc"); + QCOMPARE(reverse.toContainer(), "abc"); const QByteArray reverse2 = TestClass::callStaticMethod("staticReverseByteArray", QByteArray("abc")); @@ -1604,13 +1604,13 @@ void tst_QJniObject::templateApiCheck() const auto array = testClass.callMethod("byteArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), "abc"); + QCOMPARE(array.toContainer(), "abc"); QJniArray newArray = QJniArrayBase::fromContainer(QByteArray{"cba"}); QVERIFY(newArray.isValid()); const auto reverse = testClass.callMethod("reverseByteArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), "abc"); + QCOMPARE(reverse.toContainer(), "abc"); } // jcharArray --------------------------------------------------------------------------------- @@ -1622,13 +1622,13 @@ void tst_QJniObject::templateApiCheck() const auto array = TestClass::callStaticMethod("staticCharArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{u'a', u'b', u'c'})); + QCOMPARE(array.toContainer(), (QList{u'a', u'b', u'c'})); QJniArray newArray(QList{u'c', u'b', u'a'}); QVERIFY(newArray.isValid()); const auto reverse = TestClass::callStaticMethod("staticReverseCharArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{u'a', u'b', u'c'})); + QCOMPARE(reverse.toContainer(), (QList{u'a', u'b', u'c'})); const QList reverse2 = TestClass::callStaticMethod>("staticReverseCharArray", (QList{u'c', u'b', u'a'})); @@ -1642,13 +1642,13 @@ void tst_QJniObject::templateApiCheck() const auto array = testClass.callMethod("charArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{u'a', u'b', u'c'})); + QCOMPARE(array.toContainer(), (QList{u'a', u'b', u'c'})); QJniArray newArray = QJniArrayBase::fromContainer(QList{u'c', u'b', u'a'}); QVERIFY(newArray.isValid()); const auto reverse = testClass.callMethod("reverseCharArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{u'a', u'b', u'c'})); + QCOMPARE(reverse.toContainer(), (QList{u'a', u'b', u'c'})); } // jshortArray -------------------------------------------------------------------------------- @@ -1660,13 +1660,13 @@ void tst_QJniObject::templateApiCheck() const auto array = TestClass::callStaticMethod("staticShortArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{3, 2, 1})); + QCOMPARE(array.toContainer(), (QList{3, 2, 1})); QJniArray newArray(QList{3, 2, 1}); QVERIFY(newArray.isValid()); const auto reverse = TestClass::callStaticMethod("staticReverseShortArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1, 2, 3})); + QCOMPARE(reverse.toContainer(), (QList{1, 2, 3})); const QList reverse2 = TestClass::callStaticMethod>("staticReverseShortArray", (QList{1, 2, 3})); @@ -1680,14 +1680,14 @@ void tst_QJniObject::templateApiCheck() const auto array = testClass.callMethod("shortArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{3, 2, 1})); + QCOMPARE(array.toContainer(), (QList{3, 2, 1})); QJniArray newArray = QJniArrayBase::fromContainer(QList{3, 2, 1}); static_assert(std::is_same_v); QVERIFY(newArray.isValid()); const auto reverse = testClass.callMethod("reverseShortArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1, 2, 3})); + QCOMPARE(reverse.toContainer(), (QList{1, 2, 3})); } // jintArray ---------------------------------------------------------------------------------- @@ -1699,13 +1699,13 @@ void tst_QJniObject::templateApiCheck() const auto array = TestClass::callStaticMethod("staticIntArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{3, 2, 1})); + QCOMPARE(array.toContainer(), (QList{3, 2, 1})); QJniArray newArray(QList{3, 2, 1}); QVERIFY(newArray.isValid()); const auto reverse = TestClass::callStaticMethod("staticReverseIntArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1, 2, 3})); + QCOMPARE(reverse.toContainer(), (QList{1, 2, 3})); } { @@ -1715,13 +1715,13 @@ void tst_QJniObject::templateApiCheck() const auto array = testClass.callMethod("intArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{3, 2, 1})); + QCOMPARE(array.toContainer(), (QList{3, 2, 1})); QJniArray newArray = QJniArrayBase::fromContainer(QList{3, 2, 1}); QVERIFY(newArray.isValid()); const auto reverse = testClass.callMethod("reverseIntArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1, 2, 3})); + QCOMPARE(reverse.toContainer(), (QList{1, 2, 3})); } // jlongArray --------------------------------------------------------------------------------- @@ -1733,13 +1733,13 @@ void tst_QJniObject::templateApiCheck() const auto array = TestClass::callStaticMethod("staticLongArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{3, 2, 1})); + QCOMPARE(array.toContainer(), (QList{3, 2, 1})); QJniArray newArray(QList{3, 2, 1}); QVERIFY(newArray.isValid()); const auto reverse = TestClass::callStaticMethod("staticReverseLongArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1, 2, 3})); + QCOMPARE(reverse.toContainer(), (QList{1, 2, 3})); } { @@ -1749,13 +1749,13 @@ void tst_QJniObject::templateApiCheck() const auto array = testClass.callMethod("longArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{3, 2, 1})); + QCOMPARE(array.toContainer(), (QList{3, 2, 1})); QJniArray newArray = QJniArrayBase::fromContainer(QList{3, 2, 1}); QVERIFY(newArray.isValid()); const auto reverse = testClass.callMethod("reverseLongArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1, 2, 3})); + QCOMPARE(reverse.toContainer(), (QList{1, 2, 3})); } // jfloatArray -------------------------------------------------------------------------------- @@ -1767,13 +1767,13 @@ void tst_QJniObject::templateApiCheck() const auto array = TestClass::callStaticMethod("staticFloatArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{1.0f, 2.0f, 3.0f})); + QCOMPARE(array.toContainer(), (QList{1.0f, 2.0f, 3.0f})); QJniArray newArray(QList{3.0f, 2.0f, 1.0f}); QVERIFY(newArray.isValid()); const auto reverse = TestClass::callStaticMethod("staticReverseFloatArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1.0f, 2.0f, 3.0f})); + QCOMPARE(reverse.toContainer(), (QList{1.0f, 2.0f, 3.0f})); } { @@ -1783,13 +1783,13 @@ void tst_QJniObject::templateApiCheck() const auto array = testClass.callMethod("floatArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{1.0f, 2.0f, 3.0f})); + QCOMPARE(array.toContainer(), (QList{1.0f, 2.0f, 3.0f})); QJniArray newArray = QJniArrayBase::fromContainer(QList{3.0f, 2.0f, 1.0f}); QVERIFY(newArray.isValid()); const auto reverse = testClass.callMethod("reverseFloatArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1.0f, 2.0f, 3.0f})); + QCOMPARE(reverse.toContainer(), (QList{1.0f, 2.0f, 3.0f})); } // jdoubleArray ------------------------------------------------------------------------------- @@ -1801,13 +1801,13 @@ void tst_QJniObject::templateApiCheck() const auto array = TestClass::callStaticMethod("staticDoubleArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{3.0, 2.0, 1.0})); + QCOMPARE(array.toContainer(), (QList{3.0, 2.0, 1.0})); QJniArray newArray(QList{3.0, 2.0, 1.0}); QVERIFY(newArray.isValid()); const auto reverse = TestClass::callStaticMethod("staticReverseDoubleArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1.0, 2.0, 3.0})); + QCOMPARE(reverse.toContainer(), (QList{1.0, 2.0, 3.0})); } { @@ -1817,13 +1817,13 @@ void tst_QJniObject::templateApiCheck() const auto array = testClass.callMethod("doubleArrayMethod"); QVERIFY(array.isValid()); QCOMPARE(array.size(), 3); - QCOMPARE(array.asContainer(), (QList{3.0, 2.0, 1.0})); + QCOMPARE(array.toContainer(), (QList{3.0, 2.0, 1.0})); QJniArray newArray = QJniArrayBase::fromContainer(QList{3.0, 2.0, 1.0}); QVERIFY(newArray.isValid()); const auto reverse = testClass.callMethod("reverseDoubleArray", newArray); QVERIFY(reverse.isValid()); - QCOMPARE(reverse.asContainer(), (QList{1.0, 2.0, 3.0})); + QCOMPARE(reverse.toContainer(), (QList{1.0, 2.0, 3.0})); } }