diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 0c8dcc395d2..9b3e91b7e06 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -69,7 +69,7 @@ private: {} }; -class QJniArrayBase : public QJniObject +class QJniArrayBase { // for SFINAE'ing out the fromContainer named constructor template struct CanConvertHelper : std::false_type {}; @@ -83,9 +83,15 @@ public: using size_type = jsize; using difference_type = size_type; + operator QJniObject() const { return m_object; } + + template + T object() const { return m_object.object(); } + bool isValid() const { return m_object.isValid(); } + size_type size() const { - if (jarray array = object()) + if (jarray array = m_object.object()) return jniEnv()->GetArrayLength(array); return 0; } @@ -141,22 +147,25 @@ protected: ~QJniArrayBase() = default; explicit QJniArrayBase(jarray array) - : QJniObject(static_cast(array)) + : m_object(static_cast(array)) { - static_assert(sizeof(QJniArrayBase) == sizeof(QJniObject), - "QJniArrayBase must have the same size as QJniObject!"); } explicit QJniArrayBase(const QJniObject &object) - : QJniObject(object) + : m_object(object) {} explicit QJniArrayBase(QJniObject &&object) noexcept - : QJniObject(std::move(object)) + : m_object(std::move(object)) {} + JNIEnv *jniEnv() const noexcept { return QJniEnvironment::getJniEnv(); } + template static auto makeArray(List &&list, NewFn &&newArray, SetFn &&setRegion); template static auto makeObjectArray(List &&list); + +private: + QJniObject m_object; }; template diff --git a/src/plugins/platforms/android/qandroidplatformiconengine.cpp b/src/plugins/platforms/android/qandroidplatformiconengine.cpp index 61dfa26cf0c..0adeb6e9e63 100644 --- a/src/plugins/platforms/android/qandroidplatformiconengine.cpp +++ b/src/plugins/platforms/android/qandroidplatformiconengine.cpp @@ -102,7 +102,7 @@ static QString fetchFont(const QString &query) HashSet innerSet; Q_ASSERT(outerList.isValid() && innerSet.isValid()); - for (QJniObject signature : signatures) { + for (const auto &signature : signatures) { const QJniArray byteArray = signature.callMethod("toByteArray"); // add takes an Object, not an Array