summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qjni.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel/qjni.cpp')
-rw-r--r--src/corelib/kernel/qjni.cpp472
1 files changed, 292 insertions, 180 deletions
diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp
index 22c0f03afc..2640ecaaaf 100644
--- a/src/corelib/kernel/qjni.cpp
+++ b/src/corelib/kernel/qjni.cpp
@@ -43,7 +43,7 @@ QT_BEGIN_NAMESPACE
static inline QString keyBase()
{
- return QStringLiteral("%1%2%3");
+ return QStringLiteral("%1%2:%3");
}
static QString qt_convertJString(jstring string)
@@ -72,15 +72,15 @@ typedef QHash<QString, jclass> JClassHash;
Q_GLOBAL_STATIC(JClassHash, cachedClasses)
Q_GLOBAL_STATIC(QReadWriteLock, cachedClassesLock)
-static QString toDotEncodedClassName(const char *className)
+static QByteArray toBinaryEncClassName(const QByteArray &className)
{
- return QString::fromLatin1(className).replace(QLatin1Char('/'), QLatin1Char('.'));
+ return QByteArray(className).replace('/', '.');
}
-static jclass getCachedClass(const QString &classDotEnc, bool *isCached = 0)
+static jclass getCachedClass(const QByteArray &classBinEnc, bool *isCached = 0)
{
QReadLocker locker(cachedClassesLock);
- const QHash<QString, jclass>::const_iterator &it = cachedClasses->constFind(classDotEnc);
+ const QHash<QString, jclass>::const_iterator &it = cachedClasses->constFind(QString::fromLatin1(classBinEnc));
const bool found = (it != cachedClasses->constEnd());
if (isCached != 0)
@@ -89,10 +89,12 @@ static jclass getCachedClass(const QString &classDotEnc, bool *isCached = 0)
return found ? it.value() : 0;
}
-static jclass loadClassDotEnc(const QString &classDotEnc, JNIEnv *env)
+inline static jclass loadClass(const QByteArray &className, JNIEnv *env, bool binEncoded = false)
{
+ const QByteArray &binEncClassName = binEncoded ? className : toBinaryEncClassName(className);
+
bool isCached = false;
- jclass clazz = getCachedClass(classDotEnc, &isCached);
+ jclass clazz = getCachedClass(binEncClassName, &isCached);
if (clazz != 0 || isCached)
return clazz;
@@ -102,11 +104,12 @@ static jclass loadClassDotEnc(const QString &classDotEnc, JNIEnv *env)
QWriteLocker locker(cachedClassesLock);
// did we lose the race?
- const QHash<QString, jclass>::const_iterator &it = cachedClasses->constFind(classDotEnc);
+ const QLatin1String key(binEncClassName);
+ const QHash<QString, jclass>::const_iterator &it = cachedClasses->constFind(key);
if (it != cachedClasses->constEnd())
return it.value();
- QJNIObjectPrivate stringName = QJNIObjectPrivate::fromString(classDotEnc);
+ QJNIObjectPrivate stringName = QJNIObjectPrivate::fromString(key);
QJNIObjectPrivate classObject = classLoader.callObjectMethod("loadClass",
"(Ljava/lang/String;)Ljava/lang/Class;",
stringName.object());
@@ -114,27 +117,40 @@ static jclass loadClassDotEnc(const QString &classDotEnc, JNIEnv *env)
if (!exceptionCheckAndClear(env) && classObject.isValid())
clazz = static_cast<jclass>(env->NewGlobalRef(classObject.object()));
- cachedClasses->insert(classDotEnc, clazz);
+ cachedClasses->insert(key, clazz);
return clazz;
}
-inline static jclass loadClass(const char *className, JNIEnv *env)
-{
- return loadClassDotEnc(toDotEncodedClassName(className), env);
-}
-
typedef QHash<QString, jmethodID> JMethodIDHash;
Q_GLOBAL_STATIC(JMethodIDHash, cachedMethodID)
Q_GLOBAL_STATIC(QReadWriteLock, cachedMethodIDLock)
+static inline jmethodID getMethodID(JNIEnv *env,
+ jclass clazz,
+ const char *name,
+ const char *sig,
+ bool isStatic = false)
+{
+ jmethodID id = isStatic ? env->GetStaticMethodID(clazz, name, sig)
+ : env->GetMethodID(clazz, name, sig);
+
+ if (exceptionCheckAndClear(env))
+ return 0;
+
+ return id;
+}
+
static jmethodID getCachedMethodID(JNIEnv *env,
jclass clazz,
+ const QByteArray &className,
const char *name,
const char *sig,
bool isStatic = false)
{
- // TODO: We need to use something else then the ref. from clazz to avoid collisions.
- const QString key = keyBase().arg(size_t(clazz)).arg(QLatin1String(name)).arg(QLatin1String(sig));
+ if (className.isEmpty())
+ return getMethodID(env, clazz, name, sig, isStatic);
+
+ const QString key = keyBase().arg(QLatin1String(className)).arg(QLatin1String(name)).arg(QLatin1String(sig));
QHash<QString, jmethodID>::const_iterator it;
{
@@ -150,14 +166,7 @@ static jmethodID getCachedMethodID(JNIEnv *env,
if (it != cachedMethodID->constEnd())
return it.value();
- jmethodID id = 0;
- if (isStatic)
- id = env->GetStaticMethodID(clazz, name, sig);
- else
- id = env->GetMethodID(clazz, name, sig);
-
- if (exceptionCheckAndClear(env))
- id = 0;
+ jmethodID id = getMethodID(env, clazz, name, sig, isStatic);
cachedMethodID->insert(key, id);
return id;
@@ -168,13 +177,32 @@ typedef QHash<QString, jfieldID> JFieldIDHash;
Q_GLOBAL_STATIC(JFieldIDHash, cachedFieldID)
Q_GLOBAL_STATIC(QReadWriteLock, cachedFieldIDLock)
+static inline jfieldID getFieldID(JNIEnv *env,
+ jclass clazz,
+ const char *name,
+ const char *sig,
+ bool isStatic = false)
+{
+ jfieldID id = isStatic ? env->GetStaticFieldID(clazz, name, sig)
+ : env->GetFieldID(clazz, name, sig);
+
+ if (exceptionCheckAndClear(env))
+ return 0;
+
+ return id;
+}
+
static jfieldID getCachedFieldID(JNIEnv *env,
jclass clazz,
+ const QByteArray &className,
const char *name,
const char *sig,
bool isStatic = false)
{
- const QString key = keyBase().arg(size_t(clazz)).arg(QLatin1String(name)).arg(QLatin1String(sig));
+ if (className.isNull())
+ return getFieldID(env, clazz, name, sig, isStatic);
+
+ const QString key = keyBase().arg(QLatin1String(className)).arg(QLatin1String(name)).arg(QLatin1String(sig));
QHash<QString, jfieldID>::const_iterator it;
{
@@ -190,14 +218,7 @@ static jfieldID getCachedFieldID(JNIEnv *env,
if (it != cachedFieldID->constEnd())
return it.value();
- jfieldID id = 0;
- if (isStatic)
- id = env->GetStaticFieldID(clazz, name, sig);
- else
- id = env->GetFieldID(clazz, name, sig);
-
- if (exceptionCheckAndClear(env))
- id = 0;
+ jfieldID id = getFieldID(env, clazz, name, sig, isStatic);
cachedFieldID->insert(key, id);
return id;
@@ -242,7 +263,7 @@ JNIEnv *QJNIEnvironmentPrivate::operator->()
jclass QJNIEnvironmentPrivate::findClass(const char *className, JNIEnv *env)
{
- const QString &classDotEnc = toDotEncodedClassName(className);
+ const QByteArray &classDotEnc = toBinaryEncClassName(className);
bool isCached = false;
jclass clazz = getCachedClass(classDotEnc, &isCached);
@@ -251,9 +272,10 @@ jclass QJNIEnvironmentPrivate::findClass(const char *className, JNIEnv *env)
if (found)
return clazz;
+ const QLatin1String key(classDotEnc);
if (env != 0) { // We got an env. pointer (We expect this to be the right env. and call FindClass())
QWriteLocker locker(cachedClassesLock);
- const QHash<QString, jclass>::const_iterator &it = cachedClasses->constFind(classDotEnc);
+ const QHash<QString, jclass>::const_iterator &it = cachedClasses->constFind(key);
// Did we lose the race?
if (it != cachedClasses->constEnd())
return it.value();
@@ -265,11 +287,11 @@ jclass QJNIEnvironmentPrivate::findClass(const char *className, JNIEnv *env)
}
if (clazz != 0)
- cachedClasses->insert(classDotEnc, clazz);
+ cachedClasses->insert(key, clazz);
}
if (clazz == 0) // We didn't get an env. pointer or we got one with the WRONG class loader...
- clazz = loadClassDotEnc(classDotEnc, QJNIEnvironmentPrivate());
+ clazz = loadClass(classDotEnc, QJNIEnvironmentPrivate(), true);
return clazz;
}
@@ -310,11 +332,12 @@ QJNIObjectPrivate::QJNIObjectPrivate(const char *className)
: d(new QJNIObjectData())
{
QJNIEnvironmentPrivate env;
- d->m_jclass = loadClass(className, env);
+ d->m_className = toBinaryEncClassName(className);
+ d->m_jclass = loadClass(d->m_className, env, true);
d->m_own_jclass = false;
if (d->m_jclass) {
// get default constructor
- jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "<init>", "()V");
+ jmethodID constructorId = getCachedMethodID(env, d->m_jclass, d->m_className, "<init>", "()V");
if (constructorId) {
jobject obj = env->NewObject(d->m_jclass, constructorId);
if (obj) {
@@ -329,10 +352,11 @@ QJNIObjectPrivate::QJNIObjectPrivate(const char *className, const char *sig, ...
: d(new QJNIObjectData())
{
QJNIEnvironmentPrivate env;
- d->m_jclass = loadClass(className, env);
+ d->m_className = toBinaryEncClassName(className);
+ d->m_jclass = loadClass(d->m_className, env, true);
d->m_own_jclass = false;
if (d->m_jclass) {
- jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "<init>", sig);
+ jmethodID constructorId = getCachedMethodID(env, d->m_jclass, d->m_className, "<init>", sig);
if (constructorId) {
va_list args;
va_start(args, sig);
@@ -350,10 +374,11 @@ QJNIObjectPrivate::QJNIObjectPrivate(const char *className, const char *sig, con
: d(new QJNIObjectData())
{
QJNIEnvironmentPrivate env;
- d->m_jclass = loadClass(className, env);
+ d->m_className = toBinaryEncClassName(className);
+ d->m_jclass = loadClass(d->m_className, env, true);
d->m_own_jclass = false;
if (d->m_jclass) {
- jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "<init>", sig);
+ jmethodID constructorId = getCachedMethodID(env, d->m_jclass, d->m_className, "<init>", sig);
if (constructorId) {
jobject obj = env->NewObjectV(d->m_jclass, constructorId, args);
if (obj) {
@@ -371,7 +396,7 @@ QJNIObjectPrivate::QJNIObjectPrivate(jclass clazz)
d->m_jclass = static_cast<jclass>(env->NewGlobalRef(clazz));
if (d->m_jclass) {
// get default constructor
- jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "<init>", "()V");
+ jmethodID constructorId = getMethodID(env, d->m_jclass, "<init>", "()V");
if (constructorId) {
jobject obj = env->NewObject(d->m_jclass, constructorId);
if (obj) {
@@ -389,7 +414,7 @@ QJNIObjectPrivate::QJNIObjectPrivate(jclass clazz, const char *sig, ...)
if (clazz) {
d->m_jclass = static_cast<jclass>(env->NewGlobalRef(clazz));
if (d->m_jclass) {
- jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "<init>", sig);
+ jmethodID constructorId = getMethodID(env, d->m_jclass, "<init>", sig);
if (constructorId) {
va_list args;
va_start(args, sig);
@@ -411,7 +436,7 @@ QJNIObjectPrivate::QJNIObjectPrivate(jclass clazz, const char *sig, const QVaLis
if (clazz) {
d->m_jclass = static_cast<jclass>(env->NewGlobalRef(clazz));
if (d->m_jclass) {
- jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "<init>", sig);
+ jmethodID constructorId = getMethodID(env, d->m_jclass, "<init>", sig);
if (constructorId) {
jobject obj = env->NewObjectV(d->m_jclass, constructorId, args);
if (obj) {
@@ -431,15 +456,15 @@ QJNIObjectPrivate::QJNIObjectPrivate(jobject obj)
QJNIEnvironmentPrivate env;
d->m_jobject = env->NewGlobalRef(obj);
- jclass objectClass = env->GetObjectClass(d->m_jobject);
- d->m_jclass = static_cast<jclass>(env->NewGlobalRef(objectClass));
- env->DeleteLocalRef(objectClass);
+ jclass cls = env->GetObjectClass(obj);
+ d->m_jclass = static_cast<jclass>(env->NewGlobalRef(cls));
+ env->DeleteLocalRef(cls);
}
template <>
void QJNIObjectPrivate::callMethodV<void>(const char *methodName, const char *sig, va_list args) const
{
QJNIEnvironmentPrivate env;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
env->CallVoidMethodV(d->m_jobject, id, args);
}
@@ -459,7 +484,7 @@ jboolean QJNIObjectPrivate::callMethodV<jboolean>(const char *methodName, const
{
QJNIEnvironmentPrivate env;
jboolean res = 0;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallBooleanMethodV(d->m_jobject, id, args);
}
@@ -481,7 +506,7 @@ jbyte QJNIObjectPrivate::callMethodV<jbyte>(const char *methodName, const char *
{
QJNIEnvironmentPrivate env;
jbyte res = 0;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallByteMethodV(d->m_jobject, id, args);
}
@@ -503,7 +528,7 @@ jchar QJNIObjectPrivate::callMethodV<jchar>(const char *methodName, const char *
{
QJNIEnvironmentPrivate env;
jchar res = 0;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallCharMethodV(d->m_jobject, id, args);
}
@@ -525,7 +550,7 @@ jshort QJNIObjectPrivate::callMethodV<jshort>(const char *methodName, const char
{
QJNIEnvironmentPrivate env;
jshort res = 0;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallShortMethodV(d->m_jobject, id, args);
}
@@ -547,7 +572,7 @@ jint QJNIObjectPrivate::callMethodV<jint>(const char *methodName, const char *si
{
QJNIEnvironmentPrivate env;
jint res = 0;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallIntMethodV(d->m_jobject, id, args);
}
@@ -569,7 +594,7 @@ jlong QJNIObjectPrivate::callMethodV<jlong>(const char *methodName, const char *
{
QJNIEnvironmentPrivate env;
jlong res = 0;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallLongMethodV(d->m_jobject, id, args);
}
@@ -591,7 +616,7 @@ jfloat QJNIObjectPrivate::callMethodV<jfloat>(const char *methodName, const char
{
QJNIEnvironmentPrivate env;
jfloat res = 0.f;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallFloatMethodV(d->m_jobject, id, args);
}
@@ -613,7 +638,7 @@ jdouble QJNIObjectPrivate::callMethodV<jdouble>(const char *methodName, const ch
{
QJNIEnvironmentPrivate env;
jdouble res = 0.;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallDoubleMethodV(d->m_jobject, id, args);
}
@@ -693,7 +718,7 @@ void QJNIObjectPrivate::callStaticMethodV<void>(const char *className,
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
env->CallStaticVoidMethodV(clazz, id, args);
}
@@ -719,7 +744,7 @@ void QJNIObjectPrivate::callStaticMethodV<void>(jclass clazz,
va_list args)
{
QJNIEnvironmentPrivate env;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
env->CallStaticVoidMethodV(clazz, id, args);
}
@@ -747,7 +772,7 @@ jboolean QJNIObjectPrivate::callStaticMethodV<jboolean>(const char *className,
jboolean res = 0;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticBooleanMethodV(clazz, id, args);
}
@@ -777,7 +802,7 @@ jboolean QJNIObjectPrivate::callStaticMethodV<jboolean>(jclass clazz,
{
QJNIEnvironmentPrivate env;
jboolean res = 0;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticBooleanMethodV(clazz, id, args);
}
@@ -808,7 +833,7 @@ jbyte QJNIObjectPrivate::callStaticMethodV<jbyte>(const char *className,
jbyte res = 0;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticByteMethodV(clazz, id, args);
}
@@ -838,7 +863,7 @@ jbyte QJNIObjectPrivate::callStaticMethodV<jbyte>(jclass clazz,
{
QJNIEnvironmentPrivate env;
jbyte res = 0;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticByteMethodV(clazz, id, args);
}
@@ -869,7 +894,7 @@ jchar QJNIObjectPrivate::callStaticMethodV<jchar>(const char *className,
jchar res = 0;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticCharMethodV(clazz, id, args);
}
@@ -899,7 +924,7 @@ jchar QJNIObjectPrivate::callStaticMethodV<jchar>(jclass clazz,
{
QJNIEnvironmentPrivate env;
jchar res = 0;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticCharMethodV(clazz, id, args);
}
@@ -930,7 +955,7 @@ jshort QJNIObjectPrivate::callStaticMethodV<jshort>(const char *className,
jshort res = 0;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticShortMethodV(clazz, id, args);
}
@@ -960,7 +985,7 @@ jshort QJNIObjectPrivate::callStaticMethodV<jshort>(jclass clazz,
{
QJNIEnvironmentPrivate env;
jshort res = 0;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticShortMethodV(clazz, id, args);
}
@@ -991,7 +1016,7 @@ jint QJNIObjectPrivate::callStaticMethodV<jint>(const char *className,
jint res = 0;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticIntMethodV(clazz, id, args);
}
@@ -1021,7 +1046,7 @@ jint QJNIObjectPrivate::callStaticMethodV<jint>(jclass clazz,
{
QJNIEnvironmentPrivate env;
jint res = 0;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticIntMethodV(clazz, id, args);
}
@@ -1052,7 +1077,7 @@ jlong QJNIObjectPrivate::callStaticMethodV<jlong>(const char *className,
jlong res = 0;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticLongMethodV(clazz, id, args);
}
@@ -1082,7 +1107,7 @@ jlong QJNIObjectPrivate::callStaticMethodV<jlong>(jclass clazz,
{
QJNIEnvironmentPrivate env;
jlong res = 0;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticLongMethodV(clazz, id, args);
}
@@ -1113,7 +1138,7 @@ jfloat QJNIObjectPrivate::callStaticMethodV<jfloat>(const char *className,
jfloat res = 0.f;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticFloatMethodV(clazz, id, args);
}
@@ -1143,7 +1168,7 @@ jfloat QJNIObjectPrivate::callStaticMethodV<jfloat>(jclass clazz,
{
QJNIEnvironmentPrivate env;
jfloat res = 0.f;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticFloatMethodV(clazz, id, args);
}
@@ -1174,7 +1199,7 @@ jdouble QJNIObjectPrivate::callStaticMethodV<jdouble>(const char *className,
jdouble res = 0.;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticDoubleMethodV(clazz, id, args);
}
@@ -1204,7 +1229,7 @@ jdouble QJNIObjectPrivate::callStaticMethodV<jdouble>(jclass clazz,
{
QJNIEnvironmentPrivate env;
jdouble res = 0.;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticDoubleMethodV(clazz, id, args);
}
@@ -1339,7 +1364,7 @@ QJNIObjectPrivate QJNIObjectPrivate::callObjectMethodV(const char *methodName,
{
QJNIEnvironmentPrivate env;
jobject res = 0;
- jmethodID id = getCachedMethodID(env, d->m_jclass, methodName, sig);
+ jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig);
if (id) {
res = env->CallObjectMethodV(d->m_jobject, id, args);
if (res && env->ExceptionCheck())
@@ -1419,7 +1444,7 @@ QJNIObjectPrivate QJNIObjectPrivate::callStaticObjectMethodV(const char *classNa
jobject res = 0;
jclass clazz = loadClass(className, env);
if (clazz) {
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getCachedMethodID(env, clazz, toBinaryEncClassName(className), methodName, sig, true);
if (id) {
res = env->CallStaticObjectMethodV(clazz, id, args);
if (res && env->ExceptionCheck())
@@ -1451,7 +1476,7 @@ QJNIObjectPrivate QJNIObjectPrivate::callStaticObjectMethodV(jclass clazz,
{
QJNIEnvironmentPrivate env;
jobject res = 0;
- jmethodID id = getCachedMethodID(env, clazz, methodName, sig, true);
+ jmethodID id = getMethodID(env, clazz, methodName, sig, true);
if (id) {
res = env->CallStaticObjectMethodV(clazz, id, args);
if (res && env->ExceptionCheck())
@@ -1480,7 +1505,7 @@ jboolean QJNIObjectPrivate::getField<jboolean>(const char *fieldName) const
{
QJNIEnvironmentPrivate env;
jboolean res = 0;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "Z");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "Z");
if (id)
res = env->GetBooleanField(d->m_jobject, id);
@@ -1492,7 +1517,7 @@ jbyte QJNIObjectPrivate::getField<jbyte>(const char *fieldName) const
{
QJNIEnvironmentPrivate env;
jbyte res = 0;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "B");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "B");
if (id)
res = env->GetByteField(d->m_jobject, id);
@@ -1504,7 +1529,7 @@ jchar QJNIObjectPrivate::getField<jchar>(const char *fieldName) const
{
QJNIEnvironmentPrivate env;
jchar res = 0;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "C");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "C");
if (id)
res = env->GetCharField(d->m_jobject, id);
@@ -1516,7 +1541,7 @@ jshort QJNIObjectPrivate::getField<jshort>(const char *fieldName) const
{
QJNIEnvironmentPrivate env;
jshort res = 0;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "S");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "S");
if (id)
res = env->GetShortField(d->m_jobject, id);
@@ -1528,7 +1553,7 @@ jint QJNIObjectPrivate::getField<jint>(const char *fieldName) const
{
QJNIEnvironmentPrivate env;
jint res = 0;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "I");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "I");
if (id)
res = env->GetIntField(d->m_jobject, id);
@@ -1540,7 +1565,7 @@ jlong QJNIObjectPrivate::getField<jlong>(const char *fieldName) const
{
QJNIEnvironmentPrivate env;
jlong res = 0;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "J");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "J");
if (id)
res = env->GetLongField(d->m_jobject, id);
@@ -1552,7 +1577,7 @@ jfloat QJNIObjectPrivate::getField<jfloat>(const char *fieldName) const
{
QJNIEnvironmentPrivate env;
jfloat res = 0.f;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "F");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "F");
if (id)
res = env->GetFloatField(d->m_jobject, id);
@@ -1564,7 +1589,7 @@ jdouble QJNIObjectPrivate::getField<jdouble>(const char *fieldName) const
{
QJNIEnvironmentPrivate env;
jdouble res = 0.;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "D");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "D");
if (id)
res = env->GetDoubleField(d->m_jobject, id);
@@ -1576,7 +1601,7 @@ jboolean QJNIObjectPrivate::getStaticField<jboolean>(jclass clazz, const char *f
{
QJNIEnvironmentPrivate env;
jboolean res = 0;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "Z", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "Z", true);
if (id)
res = env->GetStaticBooleanField(clazz, id);
@@ -1587,12 +1612,15 @@ template <>
jboolean QJNIObjectPrivate::getStaticField<jboolean>(const char *className, const char *fieldName)
{
QJNIEnvironmentPrivate env;
- jboolean res = 0;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticField<jboolean>(clazz, fieldName);
+ if (clazz == 0)
+ return 0;
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, "Z", true);
+ if (id == 0)
+ return 0;
+
+ return env->GetStaticBooleanField(clazz, id);
}
template <>
@@ -1600,7 +1628,7 @@ jbyte QJNIObjectPrivate::getStaticField<jbyte>(jclass clazz, const char *fieldNa
{
QJNIEnvironmentPrivate env;
jbyte res = 0;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "B", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "B", true);
if (id)
res = env->GetStaticByteField(clazz, id);
@@ -1611,12 +1639,15 @@ template <>
jbyte QJNIObjectPrivate::getStaticField<jbyte>(const char *className, const char *fieldName)
{
QJNIEnvironmentPrivate env;
- jbyte res = 0;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticField<jbyte>(clazz, fieldName);
+ if (clazz == 0)
+ return 0;
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, "B", true);
+ if (id == 0)
+ return 0;
+
+ return env->GetStaticByteField(clazz, id);
}
template <>
@@ -1624,7 +1655,7 @@ jchar QJNIObjectPrivate::getStaticField<jchar>(jclass clazz, const char *fieldNa
{
QJNIEnvironmentPrivate env;
jchar res = 0;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "C", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "C", true);
if (id)
res = env->GetStaticCharField(clazz, id);
@@ -1635,12 +1666,15 @@ template <>
jchar QJNIObjectPrivate::getStaticField<jchar>(const char *className, const char *fieldName)
{
QJNIEnvironmentPrivate env;
- jchar res = 0;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticField<jchar>(clazz, fieldName);
+ if (clazz == 0)
+ return 0;
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, "C", true);
+ if (id == 0)
+ return 0;
+
+ return env->GetStaticCharField(clazz, id);
}
template <>
@@ -1648,7 +1682,7 @@ jshort QJNIObjectPrivate::getStaticField<jshort>(jclass clazz, const char *field
{
QJNIEnvironmentPrivate env;
jshort res = 0;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "S", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "S", true);
if (id)
res = env->GetStaticShortField(clazz, id);
@@ -1659,12 +1693,15 @@ template <>
jshort QJNIObjectPrivate::getStaticField<jshort>(const char *className, const char *fieldName)
{
QJNIEnvironmentPrivate env;
- jshort res = 0;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticField<jshort>(clazz, fieldName);
+ if (clazz == 0)
+ return 0;
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, "S", true);
+ if (id == 0)
+ return 0;
+
+ return env->GetStaticShortField(clazz, id);
}
template <>
@@ -1672,7 +1709,7 @@ jint QJNIObjectPrivate::getStaticField<jint>(jclass clazz, const char *fieldName
{
QJNIEnvironmentPrivate env;
jint res = 0;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "I", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "I", true);
if (id)
res = env->GetStaticIntField(clazz, id);
@@ -1683,12 +1720,15 @@ template <>
jint QJNIObjectPrivate::getStaticField<jint>(const char *className, const char *fieldName)
{
QJNIEnvironmentPrivate env;
- jint res = 0;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticField<jint>(clazz, fieldName);
+ if (clazz == 0)
+ return 0;
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, "I", true);
+ if (id == 0)
+ return 0;
+
+ return env->GetStaticIntField(clazz, id);
}
template <>
@@ -1696,7 +1736,7 @@ jlong QJNIObjectPrivate::getStaticField<jlong>(jclass clazz, const char *fieldNa
{
QJNIEnvironmentPrivate env;
jlong res = 0;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "J", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "J", true);
if (id)
res = env->GetStaticLongField(clazz, id);
@@ -1707,12 +1747,15 @@ template <>
jlong QJNIObjectPrivate::getStaticField<jlong>(const char *className, const char *fieldName)
{
QJNIEnvironmentPrivate env;
- jlong res = 0;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticField<jlong>(clazz, fieldName);
+ if (clazz == 0)
+ return 0;
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, "J", true);
+ if (id == 0)
+ return 0;
+
+ return env->GetStaticLongField(clazz, id);
}
template <>
@@ -1720,7 +1763,7 @@ jfloat QJNIObjectPrivate::getStaticField<jfloat>(jclass clazz, const char *field
{
QJNIEnvironmentPrivate env;
jfloat res = 0.f;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "F", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "F", true);
if (id)
res = env->GetStaticFloatField(clazz, id);
@@ -1731,12 +1774,15 @@ template <>
jfloat QJNIObjectPrivate::getStaticField<jfloat>(const char *className, const char *fieldName)
{
QJNIEnvironmentPrivate env;
- jfloat res = 0.f;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticField<jfloat>(clazz, fieldName);
+ if (clazz == 0)
+ return 0.f;
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, "F", true);
+ if (id == 0)
+ return 0.f;
+
+ return env->GetStaticFloatField(clazz, id);
}
template <>
@@ -1744,7 +1790,7 @@ jdouble QJNIObjectPrivate::getStaticField<jdouble>(jclass clazz, const char *fie
{
QJNIEnvironmentPrivate env;
jdouble res = 0.;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "D", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "D", true);
if (id)
res = env->GetStaticDoubleField(clazz, id);
@@ -1755,12 +1801,15 @@ template <>
jdouble QJNIObjectPrivate::getStaticField<jdouble>(const char *className, const char *fieldName)
{
QJNIEnvironmentPrivate env;
- jdouble res = 0.;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticField<jdouble>(clazz, fieldName);
+ if (clazz == 0)
+ return 0.;
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, "D", true);
+ if (id == 0)
+ return 0.;
+
+ return env->GetStaticDoubleField(clazz, id);
}
QJNIObjectPrivate QJNIObjectPrivate::getObjectField(const char *fieldName,
@@ -1768,7 +1817,7 @@ QJNIObjectPrivate QJNIObjectPrivate::getObjectField(const char *fieldName,
{
QJNIEnvironmentPrivate env;
jobject res = 0;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, sig);
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, sig);
if (id) {
res = env->GetObjectField(d->m_jobject, id);
if (res && env->ExceptionCheck())
@@ -1785,12 +1834,21 @@ QJNIObjectPrivate QJNIObjectPrivate::getStaticObjectField(const char *className,
const char *sig)
{
QJNIEnvironmentPrivate env;
- QJNIObjectPrivate res;
jclass clazz = loadClass(className, env);
- if (clazz)
- res = getStaticObjectField(clazz, fieldName, sig);
+ if (clazz == 0)
+ return QJNIObjectPrivate();
- return res;
+ jfieldID id = getCachedFieldID(env, clazz, toBinaryEncClassName(className), fieldName, sig, true);
+ if (id == 0)
+ return QJNIObjectPrivate();
+
+ jobject res = env->GetStaticObjectField(clazz, id);
+ if (res && env->ExceptionCheck())
+ res = 0;
+
+ QJNIObjectPrivate obj(res);
+ env->DeleteLocalRef(res);
+ return obj;
}
QJNIObjectPrivate QJNIObjectPrivate::getStaticObjectField(jclass clazz,
@@ -1799,7 +1857,7 @@ QJNIObjectPrivate QJNIObjectPrivate::getStaticObjectField(jclass clazz,
{
QJNIEnvironmentPrivate env;
jobject res = 0;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, sig, true);
+ jfieldID id = getFieldID(env, clazz, fieldName, sig, true);
if (id) {
res = env->GetStaticObjectField(clazz, id);
if (res && env->ExceptionCheck())
@@ -1815,7 +1873,7 @@ template <>
void QJNIObjectPrivate::setField<jboolean>(const char *fieldName, jboolean value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "Z");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "Z");
if (id)
env->SetBooleanField(d->m_jobject, id, value);
@@ -1825,7 +1883,7 @@ template <>
void QJNIObjectPrivate::setField<jbyte>(const char *fieldName, jbyte value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "B");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "B");
if (id)
env->SetByteField(d->m_jobject, id, value);
@@ -1835,7 +1893,7 @@ template <>
void QJNIObjectPrivate::setField<jchar>(const char *fieldName, jchar value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "C");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "C");
if (id)
env->SetCharField(d->m_jobject, id, value);
@@ -1845,7 +1903,7 @@ template <>
void QJNIObjectPrivate::setField<jshort>(const char *fieldName, jshort value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "S");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "S");
if (id)
env->SetShortField(d->m_jobject, id, value);
@@ -1855,7 +1913,7 @@ template <>
void QJNIObjectPrivate::setField<jint>(const char *fieldName, jint value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "I");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "I");
if (id)
env->SetIntField(d->m_jobject, id, value);
@@ -1865,7 +1923,7 @@ template <>
void QJNIObjectPrivate::setField<jlong>(const char *fieldName, jlong value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "J");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "J");
if (id)
env->SetLongField(d->m_jobject, id, value);
@@ -1875,7 +1933,7 @@ template <>
void QJNIObjectPrivate::setField<jfloat>(const char *fieldName, jfloat value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "F");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "F");
if (id)
env->SetFloatField(d->m_jobject, id, value);
@@ -1885,7 +1943,7 @@ template <>
void QJNIObjectPrivate::setField<jdouble>(const char *fieldName, jdouble value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "D");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "D");
if (id)
env->SetDoubleField(d->m_jobject, id, value);
@@ -1895,7 +1953,7 @@ template <>
void QJNIObjectPrivate::setField<jbooleanArray>(const char *fieldName, jbooleanArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "[Z");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[Z");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1905,7 +1963,7 @@ template <>
void QJNIObjectPrivate::setField<jbyteArray>(const char *fieldName, jbyteArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "[B");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[B");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1915,7 +1973,7 @@ template <>
void QJNIObjectPrivate::setField<jcharArray>(const char *fieldName, jcharArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "[C");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[C");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1925,7 +1983,7 @@ template <>
void QJNIObjectPrivate::setField<jshortArray>(const char *fieldName, jshortArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "[S");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[S");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1935,7 +1993,7 @@ template <>
void QJNIObjectPrivate::setField<jintArray>(const char *fieldName, jintArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "[I");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[I");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1945,7 +2003,7 @@ template <>
void QJNIObjectPrivate::setField<jlongArray>(const char *fieldName, jlongArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "[J");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[J");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1955,7 +2013,7 @@ template <>
void QJNIObjectPrivate::setField<jfloatArray>(const char *fieldName, jfloatArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "[F");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[F");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1965,7 +2023,7 @@ template <>
void QJNIObjectPrivate::setField<jdoubleArray>(const char *fieldName, jdoubleArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "[D");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[D");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1975,7 +2033,7 @@ template <>
void QJNIObjectPrivate::setField<jstring>(const char *fieldName, jstring value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, "Ljava/lang/String;");
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "Ljava/lang/String;");
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1987,7 +2045,7 @@ void QJNIObjectPrivate::setField<jobject>(const char *fieldName,
jobject value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, sig);
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, sig);
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -1999,7 +2057,7 @@ void QJNIObjectPrivate::setField<jobjectArray>(const char *fieldName,
jobjectArray value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, d->m_jclass, fieldName, sig);
+ jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, sig);
if (id)
env->SetObjectField(d->m_jobject, id, value);
@@ -2011,7 +2069,7 @@ void QJNIObjectPrivate::setStaticField<jboolean>(jclass clazz,
jboolean value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "Z", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "Z", true);
if (id)
env->SetStaticBooleanField(clazz, id, value);
}
@@ -2023,8 +2081,14 @@ void QJNIObjectPrivate::setStaticField<jboolean>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jboolean>(clazz, fieldName, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, "Z", true);
+ if (id == 0)
+ return;
+
+ env->SetStaticBooleanField(clazz, id, value);
}
template <>
@@ -2033,7 +2097,7 @@ void QJNIObjectPrivate::setStaticField<jbyte>(jclass clazz,
jbyte value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "B", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "B", true);
if (id)
env->SetStaticByteField(clazz, id, value);
}
@@ -2045,8 +2109,14 @@ void QJNIObjectPrivate::setStaticField<jbyte>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jbyte>(clazz, fieldName, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, "B", true);
+ if (id == 0)
+ return;
+
+ env->SetStaticByteField(clazz, id, value);
}
template <>
@@ -2055,7 +2125,7 @@ void QJNIObjectPrivate::setStaticField<jchar>(jclass clazz,
jchar value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "C", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "C", true);
if (id)
env->SetStaticCharField(clazz, id, value);
}
@@ -2067,8 +2137,14 @@ void QJNIObjectPrivate::setStaticField<jchar>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jchar>(clazz, fieldName, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, "C", true);
+ if (id == 0)
+ return;
+
+ env->SetStaticCharField(clazz, id, value);
}
template <>
@@ -2077,7 +2153,7 @@ void QJNIObjectPrivate::setStaticField<jshort>(jclass clazz,
jshort value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "S", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "S", true);
if (id)
env->SetStaticShortField(clazz, id, value);
}
@@ -2089,8 +2165,14 @@ void QJNIObjectPrivate::setStaticField<jshort>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jshort>(clazz, fieldName, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, "S", true);
+ if (id == 0)
+ return;
+
+ env->SetStaticShortField(clazz, id, value);
}
template <>
@@ -2099,7 +2181,7 @@ void QJNIObjectPrivate::setStaticField<jint>(jclass clazz,
jint value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "I", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "I", true);
if (id)
env->SetStaticIntField(clazz, id, value);
}
@@ -2111,8 +2193,14 @@ void QJNIObjectPrivate::setStaticField<jint>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jint>(clazz, fieldName, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, "I", true);
+ if (id == 0)
+ return;
+
+ env->SetStaticIntField(clazz, id, value);
}
template <>
@@ -2121,7 +2209,7 @@ void QJNIObjectPrivate::setStaticField<jlong>(jclass clazz,
jlong value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "J", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "J", true);
if (id)
env->SetStaticLongField(clazz, id, value);
}
@@ -2133,8 +2221,14 @@ void QJNIObjectPrivate::setStaticField<jlong>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jlong>(clazz, fieldName, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, "J", true);
+ if (id == 0)
+ return;
+
+ env->SetStaticLongField(clazz, id, value);
}
template <>
@@ -2143,7 +2237,7 @@ void QJNIObjectPrivate::setStaticField<jfloat>(jclass clazz,
jfloat value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "F", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "F", true);
if (id)
env->SetStaticFloatField(clazz, id, value);
}
@@ -2155,8 +2249,14 @@ void QJNIObjectPrivate::setStaticField<jfloat>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jfloat>(clazz, fieldName, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, "F", true);
+ if (id == 0)
+ return;
+
+ env->SetStaticFloatField(clazz, id, value);
}
template <>
@@ -2165,7 +2265,7 @@ void QJNIObjectPrivate::setStaticField<jdouble>(jclass clazz,
jdouble value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, "D", true);
+ jfieldID id = getFieldID(env, clazz, fieldName, "D", true);
if (id)
env->SetStaticDoubleField(clazz, id, value);
}
@@ -2177,8 +2277,14 @@ void QJNIObjectPrivate::setStaticField<jdouble>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jdouble>(clazz, fieldName, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, "D", true);
+ if (id == 0)
+ return;
+
+ env->SetStaticDoubleField(clazz, id, value);
}
template <>
@@ -2188,7 +2294,7 @@ void QJNIObjectPrivate::setStaticField<jobject>(jclass clazz,
jobject value)
{
QJNIEnvironmentPrivate env;
- jfieldID id = getCachedFieldID(env, clazz, fieldName, sig, true);
+ jfieldID id = getFieldID(env, clazz, fieldName, sig, true);
if (id)
env->SetStaticObjectField(clazz, id, value);
}
@@ -2201,8 +2307,14 @@ void QJNIObjectPrivate::setStaticField<jobject>(const char *className,
{
QJNIEnvironmentPrivate env;
jclass clazz = loadClass(className, env);
- if (clazz)
- setStaticField<jobject>(clazz, fieldName, sig, value);
+ if (clazz == 0)
+ return;
+
+ jfieldID id = getCachedFieldID(env, clazz, className, fieldName, sig, true);
+ if (id == 0)
+ return;
+
+ env->SetStaticObjectField(clazz, id, value);
}
QJNIObjectPrivate QJNIObjectPrivate::fromString(const QString &string)