diff --git a/src/corelib/kernel/qjniobject.h b/src/corelib/kernel/qjniobject.h index 187eccc35d..011a1c0185 100644 --- a/src/corelib/kernel/qjniobject.h +++ b/src/corelib/kernel/qjniobject.h @@ -381,7 +381,7 @@ public: constexpr const char *signature = getTypeSignature(); jfieldID id = getCachedFieldID(env.jniEnv(), fieldName, signature); if (id) { - setFieldForType(env, object(), id, value); + setFieldForType(env.jniEnv(), object(), id, value); env.checkAndClearExceptions(); } } @@ -393,7 +393,7 @@ public: QJniEnvironment env; jfieldID id = getCachedFieldID(env.jniEnv(), fieldName, signature); if (id) { - setFieldForType(env, object(), id, value); + setFieldForType(env.jniEnv(), object(), id, value); env.checkAndClearExceptions(); } } @@ -413,7 +413,7 @@ public: if (!id) return; - setStaticFieldForType(env, clazz, id, value); + setStaticFieldForType(env.jniEnv(), clazz, id, value); env.checkAndClearExceptions(); } @@ -431,7 +431,7 @@ public: jfieldID id = getCachedFieldID(env.jniEnv(), clazz, className, fieldName, signature, true); if (id) { - setStaticFieldForType(env, clazz, id, value); + setStaticFieldForType(env.jniEnv(), clazz, id, value); env.checkAndClearExceptions(); } } @@ -445,7 +445,7 @@ public: jfieldID id = getFieldID(env.jniEnv(), clazz, fieldName, signature, true); if (id) { - setStaticFieldForType(env, clazz, id, value); + setStaticFieldForType(env.jniEnv(), clazz, id, value); env.checkAndClearExceptions(); } } @@ -458,7 +458,7 @@ public: constexpr const char *signature = getTypeSignature(); jfieldID id = getFieldID(env.jniEnv(), clazz, fieldName, signature, true); if (id) { - setStaticFieldForType(env, clazz, id, value); + setStaticFieldForType(env.jniEnv(), clazz, id, value); env.checkAndClearExceptions(); } } diff --git a/tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java b/tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java index 4d6db749a5..5865391ac9 100644 --- a/tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java +++ b/tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java @@ -43,6 +43,28 @@ public class QtJniObjectTestClass static final Object A_OBJECT_OBJECT = new QtJniObjectTestClass(); static final Throwable A_THROWABLE_OBJECT = new Throwable(A_STRING_OBJECT); + // -------------------------------------------------------------------------------------------- + + byte BYTE_VAR; + short SHORT_VAR; + int INT_VAR; + long LONG_VAR; + float FLOAT_VAR; + double DOUBLE_VAR; + boolean BOOLEAN_VAR; + char CHAR_VAR; + String STRING_OBJECT_VAR; + + static byte S_BYTE_VAR; + static short S_SHORT_VAR; + static int S_INT_VAR; + static long S_LONG_VAR; + static float S_FLOAT_VAR; + static double S_DOUBLE_VAR; + static boolean S_BOOLEAN_VAR; + static char S_CHAR_VAR; + static String S_STRING_OBJECT_VAR; + // -------------------------------------------------------------------------------------------- public static void staticVoidMethod() { return; } public static void staticVoidMethodWithArgs(int a, boolean b, char c) { return; } diff --git a/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp b/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp index 173f955ce7..4c0d9e1e6e 100644 --- a/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp +++ b/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp @@ -108,6 +108,26 @@ private slots: void getStaticCharField(); void getBooleanField(); void getIntField(); + + void setIntField(); + void setByteField(); + void setLongField(); + void setDoubleField(); + void setFloatField(); + void setShortField(); + void setCharField(); + void setBooleanField(); + void setObjectField(); + void setStaticIntField(); + void setStaticByteField(); + void setStaticLongField(); + void setStaticDoubleField(); + void setStaticFloatField(); + void setStaticShortField(); + void setStaticCharField(); + void setStaticBooleanField(); + void setStaticObjectField(); + void templateApiCheck(); void isClassAvailable(); void fromLocalRef(); @@ -889,6 +909,128 @@ void tst_QJniObject::getIntField() QCOMPARE(res, -1); } +template +void setField(const char *fieldName, T testValue) +{ + QJniObject obj(testClassName); + QVERIFY(obj.isValid()); + + obj.setField(fieldName, testValue); + + T res = obj.getField(fieldName); + QCOMPARE(res, testValue); +} + +void tst_QJniObject::setIntField() +{ + setField("INT_VAR", 555); +} + +void tst_QJniObject::setByteField() +{ + setField("BYTE_VAR", jbyte(555)); +} + +void tst_QJniObject::setLongField() +{ + setField("LONG_VAR", jlong(9223372036847758232L)); +} + +void tst_QJniObject::setDoubleField() +{ + setField("DOUBLE_VAR", jdouble(1.2)); +} + +void tst_QJniObject::setFloatField() +{ + setField("FLOAT_VAR", jfloat(1.2)); +} + +void tst_QJniObject::setShortField() +{ + setField("SHORT_VAR", jshort(123)); +} + +void tst_QJniObject::setCharField() +{ + setField("CHAR_VAR", jchar('A')); +} + +void tst_QJniObject::setBooleanField() +{ + setField("BOOLEAN_VAR", jboolean(true)); +} + +void tst_QJniObject::setObjectField() +{ + QJniObject obj(testClassName); + QVERIFY(obj.isValid()); + + QJniObject testValue = QJniObject::fromString(QStringLiteral("Hello")); + obj.setField("STRING_OBJECT_VAR", testValue.object()); + + QJniObject res = obj.getObjectField("STRING_OBJECT_VAR"); + QCOMPARE(res.toString(), testValue.toString()); +} + +template +void setStaticField(const char *fieldName, T testValue) +{ + QJniObject::setStaticField(testClassName, fieldName, testValue); + + T res = QJniObject::getStaticField(testClassName, fieldName); + QCOMPARE(res, testValue); +} + +void tst_QJniObject::setStaticIntField() +{ + setStaticField("S_INT_VAR", 555); +} + +void tst_QJniObject::setStaticByteField() +{ + setStaticField("S_BYTE_VAR", jbyte(555)); +} + +void tst_QJniObject::setStaticLongField() +{ + setStaticField("S_LONG_VAR", jlong(9223372036847758232L)); +} + +void tst_QJniObject::setStaticDoubleField() +{ + setStaticField("S_DOUBLE_VAR", jdouble(1.2)); +} + +void tst_QJniObject::setStaticFloatField() +{ + setStaticField("S_FLOAT_VAR", jfloat(1.2)); +} + +void tst_QJniObject::setStaticShortField() +{ + setStaticField("S_SHORT_VAR", jshort(123)); +} + +void tst_QJniObject::setStaticCharField() +{ + setStaticField("S_CHAR_VAR", jchar('A')); +} + +void tst_QJniObject::setStaticBooleanField() +{ + setStaticField("S_BOOLEAN_VAR", jboolean(true)); +} + +void tst_QJniObject::setStaticObjectField() +{ + QJniObject testValue = QJniObject::fromString(QStringLiteral("Hello")); + QJniObject::setStaticField(testClassName, "S_STRING_OBJECT_VAR", testValue.object()); + + QJniObject res = QJniObject::getStaticObjectField(testClassName, "S_STRING_OBJECT_VAR"); + QCOMPARE(res.toString(), testValue.toString()); +} + void tst_QJniObject::templateApiCheck() { QJniObject testClass(testClassName);