summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2021-02-08 14:16:55 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-02-11 19:16:26 +0000
commit0c413c379a00a0a4a2b461229442f16c84c2473d (patch)
tree9b6345d4d883c3596a03f87c7d4c918bcf30dfce /src
parent4a3fe46313c46f63ec27b46439825ea3fd17a6bf (diff)
Fix registerNativeMethods for good
The initial implementation and the commit c00ab6f8eaa3cdc9a29dd103c91b2eaf212cac9f was wrong: * env->findClass() in fact returns a global reference, and in any case we shouldn't be calling that, instead QJniObject would be enough. * The size param provided to env->RegisterNatives was wrong. * A test for registerNativeMethods() is added to ensure such break is not repeated again. Task-number: QTBUG-89633 Change-Id: I4d3a6a9270755f465c40add25521fb750dd4de0a Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> (cherry picked from commit deca7cd730a44988d3e15c551d9a82a5c75618e2) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qjnienvironment.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/corelib/kernel/qjnienvironment.cpp b/src/corelib/kernel/qjnienvironment.cpp
index eea62116d6..ee57504327 100644
--- a/src/corelib/kernel/qjnienvironment.cpp
+++ b/src/corelib/kernel/qjnienvironment.cpp
@@ -222,12 +222,13 @@ JavaVM *QJniEnvironment::javaVM()
*/
bool QJniEnvironment::registerNativeMethods(const char *className, JNINativeMethod methods[], int size)
{
- jclass clazz = findClass(className);
+ QJniObject classObject(className);
- if (!clazz)
+ if (!classObject.isValid())
return false;
- if (d->jniEnv->RegisterNatives(clazz, methods, size / sizeof(methods[0])) < 0) {
+ jclass clazz = d->jniEnv->GetObjectClass(classObject.object());
+ if (d->jniEnv->RegisterNatives(clazz, methods, size) < 0) {
exceptionCheckAndClear();
d->jniEnv->DeleteLocalRef(clazz);
return false;