diff --git a/src/corelib/compat/removed_api.cpp b/src/corelib/compat/removed_api.cpp index a504bef17dd..04af737addb 100644 --- a/src/corelib/compat/removed_api.cpp +++ b/src/corelib/compat/removed_api.cpp @@ -618,6 +618,27 @@ QStringView QXmlStreamAttributes::value(QLatin1StringView qualifiedName) const #if QT_CORE_REMOVED_SINCE(6, 7) +#if defined(Q_OS_ANDROID) + +#include "qjniobject.h" + +jclass QJniObject::loadClass(const QByteArray &className, JNIEnv *env, bool /*binEncoded*/) +{ + return QJniObject::loadClass(className, env); +} + +QByteArray QJniObject::toBinaryEncClassName(const QByteArray &className) +{ + return QByteArray(className).replace('/', '.'); +} + +void QJniObject::callVoidMethodV(JNIEnv *env, jmethodID id, va_list args) const +{ + env->CallVoidMethodV(javaObject(), id, args); +} + +#endif // Q_OS_ANDROID + #include "qlocale.h" QStringList QLocale::uiLanguages() const diff --git a/src/corelib/kernel/qjniobject.cpp b/src/corelib/kernel/qjniobject.cpp index f231f38e1d1..40e0cb2eac8 100644 --- a/src/corelib/kernel/qjniobject.cpp +++ b/src/corelib/kernel/qjniobject.cpp @@ -309,9 +309,27 @@ static jclass getCachedClass(const QByteArray &className) return it != cachedClasses->constEnd() ? it.value() : nullptr; } -QByteArray QJniObject::toBinaryEncClassName(const QByteArray &className) +/*! + \internal + + Get a JNI object from a jobject variant and do the necessary + exception clearing and delete the local reference before returning. + The JNI object can be null if there was an exception. +*/ +static QJniObject getCleanJniObject(jobject object) { - return QByteArray(className).replace('/', '.'); + if (!object) + return QJniObject(); + + QJniEnvironment env; + if (env.checkAndClearExceptions()) { + env->DeleteLocalRef(object); + return QJniObject(); + } + + QJniObject res(object); + env->DeleteLocalRef(object); + return res; } /*! @@ -370,7 +388,7 @@ jclass QtAndroidPrivate::findClass(const char *className, JNIEnv *env) return clazz; } -jclass QJniObject::loadClass(const QByteArray &className, JNIEnv *env, bool /*binEncoded*/) +jclass QJniObject::loadClass(const QByteArray &className, JNIEnv *env) { return QtAndroidPrivate::findClass(className, env); } @@ -398,13 +416,8 @@ void QJniObject::callVoidMethodV(JNIEnv *env, jmethodID id, ...) const { va_list args; va_start(args, id); - callVoidMethodV(env, id, args); - va_end(args); -} - -void QJniObject::callVoidMethodV(JNIEnv *env, jmethodID id, va_list args) const -{ env->CallVoidMethodV(d->m_jobject, id, args); + va_end(args); } jmethodID QJniObject::getCachedMethodID(JNIEnv *env, @@ -711,27 +724,6 @@ QJniObject::QJniObject(jobject object) This function is only available if all \a args are known \l {JNI Types}. */ -/*! - \brief Get a JNI object from a jobject variant and do the necessary - exception clearing and delete the local reference before returning. - The JNI object can be null if there was an exception. -*/ -QJniObject QJniObject::getCleanJniObject(jobject object) -{ - if (!object) - return QJniObject(); - - QJniEnvironment env; - if (env.checkAndClearExceptions()) { - env->DeleteLocalRef(object); - return QJniObject(); - } - - QJniObject res(object); - env->DeleteLocalRef(object); - return res; -} - /*! \fn QJniObject::~QJniObject() diff --git a/src/corelib/kernel/qjniobject.h b/src/corelib/kernel/qjniobject.h index af7f1a9bba5..4b343709236 100644 --- a/src/corelib/kernel/qjniobject.h +++ b/src/corelib/kernel/qjniobject.h @@ -528,9 +528,14 @@ public: } private: - static jclass loadClass(const QByteArray &className, JNIEnv *env, bool binEncoded = false); + static jclass loadClass(const QByteArray &className, JNIEnv *env); + +#if QT_CORE_REMOVED_SINCE(6, 7) + // these need to stay in the ABI as they were used in inline methods before 6.7 + static jclass loadClass(const QByteArray &className, JNIEnv *env, bool binEncoded); static QByteArray toBinaryEncClassName(const QByteArray &className); - static QJniObject getCleanJniObject(jobject obj); + void callVoidMethodV(JNIEnv *env, jmethodID id, va_list args) const; +#endif static jfieldID getCachedFieldID(JNIEnv *env, jclass clazz, const QByteArray &className, const char *name, const char *signature, @@ -549,8 +554,6 @@ private: const char *signature, bool isStatic = false); void callVoidMethodV(JNIEnv *env, jmethodID id, ...) const; - // ### Qt 7: merge into ... overload - void callVoidMethodV(JNIEnv *env, jmethodID id, va_list args) const; bool isSameObject(jobject obj) const; bool isSameObject(const QJniObject &other) const;