From 7d3417fbfcbfc46061609a842768a0111c5a15a2 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Wed, 4 Oct 2023 17:54:46 +0200 Subject: [PATCH] JNI: Warn if classes are resolved with wrong syntax Amends 39294317e0, after which class names have to be slash-separated. Change-Id: I5b8415b711f4deed9b6134eccd3232f299b1ef4d Reviewed-by: Assam Boudjelthia Reviewed-by: Juha Vuolle --- src/corelib/kernel/qjniobject.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qjniobject.cpp b/src/corelib/kernel/qjniobject.cpp index 6bfd4ac5968..dfb1ebfdce0 100644 --- a/src/corelib/kernel/qjniobject.cpp +++ b/src/corelib/kernel/qjniobject.cpp @@ -360,7 +360,14 @@ static QJniObject getCleanJniObject(jobject object) jclass QtAndroidPrivate::findClass(const char *className, JNIEnv *env) { Q_ASSERT(env); - const QByteArray classNameArray(className); + QByteArray classNameArray(className); +#ifdef QT_DEBUG + if (classNameArray.contains('.')) { + qWarning("QtAndroidPrivate::findClass: className '%s' should use slash separators!", + className); + } +#endif + classNameArray.replace('.', '/'); jclass clazz = getCachedClass(classNameArray); if (clazz) return clazz; @@ -374,7 +381,7 @@ jclass QtAndroidPrivate::findClass(const char *className, JNIEnv *env) // JNIEnv::FindClass wants "a fully-qualified class name or an array type signature" // which is a slash-separated class name. - jclass localClazz = env->FindClass(className); + jclass localClazz = env->FindClass(classNameArray.constData()); if (localClazz) { clazz = static_cast(env->NewGlobalRef(localClazz)); env->DeleteLocalRef(localClazz);