diff --git a/src/corelib/kernel/qjnienvironment.cpp b/src/corelib/kernel/qjnienvironment.cpp index 5afa1a6484..1e2826e76b 100644 --- a/src/corelib/kernel/qjnienvironment.cpp +++ b/src/corelib/kernel/qjnienvironment.cpp @@ -351,6 +351,15 @@ bool QJniEnvironment::registerNativeMethods(const char *className, const JNINati return registerNativeMethods(clazz, methods, size); } + +/*! + \fn bool QJniEnvironment::registerNativeMethods(const char *className, std::initializer_list methods) + \overload + + Registers the native functions methods in \a methods for the Java class \a className. + Returns \c true if the registration is successful, otherwise \c false. +*/ + #if QT_DEPRECATED_SINCE(6, 2) /*! \overload @@ -405,6 +414,14 @@ bool QJniEnvironment::registerNativeMethods(jclass clazz, const JNINativeMethod return true; } +/*! + \fn bool QJniEnvironment::registerNativeMethods(jclass clazz, std::initializer_list methods) + \overload + + Registers the native functions methods in \a methods for the Java class \a clazz. + Returns \c true if the registration is successful, otherwise \c false. +*/ + /*! \enum QJniEnvironment::OutputMode diff --git a/src/corelib/kernel/qjnienvironment.h b/src/corelib/kernel/qjnienvironment.h index f0377751f7..0ca9614ca6 100644 --- a/src/corelib/kernel/qjnienvironment.h +++ b/src/corelib/kernel/qjnienvironment.h @@ -64,6 +64,12 @@ public: return registerNativeMethods(clazz, std::data(methods), methods.size()); } + template + bool registerNativeMethods(std::initializer_list methods) + { + return registerNativeMethods(QtJniTypes::Traits::className().data(), methods); + } + #if QT_DEPRECATED_SINCE(6, 2) // ### Qt 7: remove QT_DEPRECATED_VERSION_X_6_2("Use the overload with a const JNINativeMethod[] instead.") diff --git a/src/corelib/kernel/qjnitypes.h b/src/corelib/kernel/qjnitypes.h index a3539e3233..bf2f77a663 100644 --- a/src/corelib/kernel/qjnitypes.h +++ b/src/corelib/kernel/qjnitypes.h @@ -47,6 +47,12 @@ struct Object : QJniObject template static Object construct(Args &&...args) { return Object{std::forward(args)...}; } + static bool registerNativeMethods(std::initializer_list methods) + { + QJniEnvironment env; + return env.registerNativeMethods(methods); + } + // public API forwarding to QJniObject, with the implicit Class template parameter template ("callMeBackWithObject", testObject); @@ -1959,7 +1958,7 @@ void tst_QJniObject::callback() QCOMPARE(calledWithObject.value(), testObject); break; case CallbackParameterType::ObjectRef: - QVERIFY(env.registerNativeMethods(testObject.objectClass(), { + QVERIFY(TestClass::registerNativeMethods({ Q_JNI_NATIVE_METHOD(callbackWithObjectRef) })); result = testObject.callMethod("callMeBackWithObjectRef", testObject); @@ -1967,7 +1966,7 @@ void tst_QJniObject::callback() QCOMPARE(calledWithObject.value(), testObject); break; case CallbackParameterType::String: - QVERIFY(env.registerNativeMethods(testObject.objectClass(), { + QVERIFY(TestClass::registerNativeMethods({ Q_JNI_NATIVE_METHOD(callbackWithString) })); result = testObject.callMethod("callMeBackWithString", QString::number(123)); @@ -1975,7 +1974,7 @@ void tst_QJniObject::callback() QCOMPARE(calledWithString.value(), "123"); break; case CallbackParameterType::Byte: - QVERIFY(env.registerNativeMethods(testObject.objectClass(), { + QVERIFY(TestClass::registerNativeMethods({ Q_JNI_NATIVE_METHOD(callbackWithByte) })); result = testObject.callMethod("callbackWithByte", jbyte(123)); @@ -1983,7 +1982,7 @@ void tst_QJniObject::callback() QCOMPARE(calledWithByte.value(), 123); break; case CallbackParameterType::Boolean: - QVERIFY(env.registerNativeMethods(testObject.objectClass(), { + QVERIFY(TestClass::registerNativeMethods({ Q_JNI_NATIVE_METHOD(callbackWithBoolean) })); result = testObject.callMethod("callbackWithBoolean", true); @@ -1991,7 +1990,7 @@ void tst_QJniObject::callback() QCOMPARE(calledWithBoolean.value(), true); break; case CallbackParameterType::Int: - QVERIFY(env.registerNativeMethods(testObject.objectClass(), { + QVERIFY(TestClass::registerNativeMethods({ Q_JNI_NATIVE_METHOD(callbackWithInt) })); result = testObject.callMethod("callbackWithInt", 12345); @@ -1999,7 +1998,7 @@ void tst_QJniObject::callback() QCOMPARE(calledWithInt.value(), 12345); break; case CallbackParameterType::Double: - QVERIFY(env.registerNativeMethods(testObject.objectClass(), { + QVERIFY(TestClass::registerNativeMethods({ Q_JNI_NATIVE_METHOD(callbackWithDouble) })); result = testObject.callMethod("callbackWithDouble", 1.2345);