From d57cef7332c8b0669b469202b9f5e5e2dab5387f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Wed, 3 Dec 2014 17:49:08 +0100 Subject: Android: Add more convenience types to QAndroidJniObject. This change adds more convenience methods for jclass, jobject, jthrowable etc. while some of them don't add much value, they should be included for completeness. [ChangeLog][QAndroidJniObject] Added convenience functions for jclass, jobject, jobjectArray and jthrowable Change-Id: I46099f21b7806a22a8a539a1e91535ed61e395bb Reviewed-by: Yoann Lopes --- src/androidextras/jni/qandroidjniobject.cpp | 306 ++++++++++++++++++++++++---- 1 file changed, 267 insertions(+), 39 deletions(-) diff --git a/src/androidextras/jni/qandroidjniobject.cpp b/src/androidextras/jni/qandroidjniobject.cpp index ff1d563..587d508 100644 --- a/src/androidextras/jni/qandroidjniobject.cpp +++ b/src/androidextras/jni/qandroidjniobject.cpp @@ -148,14 +148,19 @@ QT_BEGIN_NAMESPACE \li Signature \row \li jobject - \li {1, 3} L\e; + \li Ljava/lang/Object; \row \li jclass + \li Ljava/lang/Class; \row \li jstring + \li Ljava/lang/String; + \row + \li jthrowable + \li Ljava/lang/Throwable; \row \li jobjectArray - \li [L\e; + \li [Ljava/lang/Object; \row \li jarray \li [\e @@ -225,6 +230,9 @@ QT_BEGIN_NAMESPACE \row \li void \li V + \row + \li \e{Custom type} + \li L\e; \endtable For more information about JNI see: \l http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html @@ -908,12 +916,30 @@ jdouble QAndroidJniObject::callMethod(const char *methodName) const return callMethod(methodName, "()D"); } +template <> +QAndroidJniObject QAndroidJniObject::callObjectMethod(const char *methodName) const +{ + return d->callObjectMethod(methodName, "()Ljava/lang/Object;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::callObjectMethod(const char *methodName) const +{ + return d->callObjectMethod(methodName, "()Ljava/lang/Class;"); +} + template <> QAndroidJniObject QAndroidJniObject::callObjectMethod(const char *methodName) const { return d->callObjectMethod(methodName, "()Ljava/lang/String;"); } +template <> +QAndroidJniObject QAndroidJniObject::callObjectMethod(const char *methodName) const +{ + return d->callObjectMethod(methodName, "()[Ljava/lang/Object;"); +} + template <> QAndroidJniObject QAndroidJniObject::callObjectMethod(const char *methodName) const { @@ -962,6 +988,12 @@ QAndroidJniObject QAndroidJniObject::callObjectMethod(const char * return d->callObjectMethod(methodName, "()[D"); } +template <> +QAndroidJniObject QAndroidJniObject::callObjectMethod(const char *methodName) const +{ + return d->callObjectMethod(methodName, "()Ljava/lang/Throwable;"); +} + template <> void QAndroidJniObject::callStaticMethod(const char *className, const char *methodName, @@ -1330,6 +1362,34 @@ jdouble QAndroidJniObject::callStaticMethod(jclass clazz, const char *m return callStaticMethod(clazz, methodName, "()D"); } +template <> +QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(const char *className, + const char *methodName) +{ + return callStaticObjectMethod(className, methodName, "()Ljava/lang/Object;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(jclass clazz, + const char *methodName) +{ + return callStaticObjectMethod(clazz, methodName, "()Ljava/lang/Object;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(const char *className, + const char *methodName) +{ + return callStaticObjectMethod(className, methodName, "()Ljava/lang/Class;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(jclass clazz, + const char *methodName) +{ + return callStaticObjectMethod(clazz, methodName, "()Ljava/lang/Class;"); +} + template <> QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(const char *className, const char *methodName) @@ -1344,6 +1404,20 @@ QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(jclass claz return callStaticObjectMethod(clazz, methodName, "()Ljava/lang/String;"); } +template <> +QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(const char *className, + const char *methodName) +{ + return callStaticObjectMethod(className, methodName, "()[Ljava/lang/Object;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(jclass clazz, + const char *methodName) +{ + return callStaticObjectMethod(clazz, methodName, "()[Ljava/lang/Object;"); +} + template <> QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(const char *className, const char *methodName) @@ -1456,6 +1530,20 @@ QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(jclass return callStaticObjectMethod(clazz, methodName, "()[D"); } +template <> +QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(const char *className, + const char *methodName) +{ + return callStaticObjectMethod(className, methodName, "()Ljava/lang/Throwable;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(jclass clazz, + const char *methodName) +{ + return callStaticObjectMethod(clazz, methodName, "()Ljava/lang/Throwable;"); +} + template <> jboolean QAndroidJniObject::getField(const char *fieldName) const { @@ -1515,6 +1603,18 @@ QAndroidJniObject QAndroidJniObject::getObjectField(const char *fieldNa return d->getObjectField(fieldName, sig); } +template <> +QAndroidJniObject QAndroidJniObject::getObjectField(const char *fieldName) const +{ + return d->getObjectField(fieldName, "Ljava/lang/Object;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::getObjectField(const char *fieldName) const +{ + return d->getObjectField(fieldName, "Ljava/lang/Class;"); +} + template <> QAndroidJniObject QAndroidJniObject::getObjectField(const char *fieldName) const { @@ -1569,6 +1669,12 @@ QAndroidJniObject QAndroidJniObject::getObjectField(const char *fieldNa return d->getObjectField(fieldName, "Ljava/lang/String;"); } +template <> +QAndroidJniObject QAndroidJniObject::getObjectField(const char *fieldName) const +{ + return d->getObjectField(fieldName, "Ljava/lang/Throwable;"); +} + template <> QAndroidJniObject QAndroidJniObject::getObjectField(const char *fieldName, const char *sig) const @@ -1624,6 +1730,42 @@ void QAndroidJniObject::setField(const char *fieldName, jdouble value) d->setField(fieldName, value); } +template <> +void QAndroidJniObject::setField(const char *fieldName, + const char *sig, + jobject value) +{ + d->setField(fieldName, sig, value); +} + +template <> +void QAndroidJniObject::setField(const char *fieldName, + const char *sig, + jobjectArray value) +{ + d->setField(fieldName, sig, value); +} + +template <> +void QAndroidJniObject::setField(const char *fieldName, + jobject value) +{ + setField(fieldName, "Ljava/lang/Object;", value); +} + +template <> +void QAndroidJniObject::setField(const char *fieldName, + jclass value) +{ + setField(fieldName, "Ljava/lang/Class;", value); +} + +template <> +void QAndroidJniObject::setField(const char *fieldName, jstring value) +{ + d->setField(fieldName, value); +} + template <> void QAndroidJniObject::setField(const char *fieldName, jbooleanArray value) { @@ -1673,25 +1815,9 @@ void QAndroidJniObject::setField(const char *fieldName, jdoubleArr } template <> -void QAndroidJniObject::setField(const char *fieldName, jstring value) +void QAndroidJniObject::setField(const char *fieldName, jthrowable value) { - d->setField(fieldName, value); -} - -template <> -void QAndroidJniObject::setField(const char *fieldName, - const char *sig, - jobject value) -{ - d->setField(fieldName, sig, value); -} - -template <> -void QAndroidJniObject::setField(const char *fieldName, - const char *sig, - jobjectArray value) -{ - d->setField(fieldName, sig, value); + d->setField(fieldName, "Ljava/lang/Throwable;", value); } template <> @@ -1790,6 +1916,14 @@ jdouble QAndroidJniObject::getStaticField(const char *className, const return QJNIObjectPrivate::getStaticField(className, fieldName); } +template <> +QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, + const char *fieldName, + const char *sig) +{ + return QJNIObjectPrivate::getStaticObjectField(clazz, fieldName, sig); +} + QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, const char *fieldName, const char *sig) @@ -1797,22 +1931,65 @@ QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, return QJNIObjectPrivate::getStaticObjectField(clazz, fieldName, sig); } +QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, + const char *fieldName, + const char *sig) +{ + return QJNIObjectPrivate::getStaticObjectField(className, fieldName, sig); +} + template <> -QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, +QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, const char *fieldName, const char *sig) +{ + return QJNIObjectPrivate::getStaticObjectField(className, fieldName, sig); +} + +template <> +QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, + const char *fieldName, + const char *sig) { return QJNIObjectPrivate::getStaticObjectField(clazz, fieldName, sig); } template <> -QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, - const char *fieldName, - const char *sig) +QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, + const char *fieldName, + const char *sig) { return QJNIObjectPrivate::getStaticObjectField(className, fieldName, sig); } +template <> +QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, + const char *fieldName) +{ + return QJNIObjectPrivate::getStaticObjectField(clazz, fieldName, "Ljava/lang/Object;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, + const char *fieldName) +{ + return QJNIObjectPrivate::getStaticObjectField(className, fieldName, "Ljava/lang/Object;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, + const char *fieldName) +{ + return QJNIObjectPrivate::getStaticObjectField(clazz, fieldName, "Ljava/lang/Class;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, + const char *fieldName) +{ + return QJNIObjectPrivate::getStaticObjectField(className, fieldName, "Ljava/lang/Class;"); +} + template <> QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, const char *fieldName) @@ -1827,6 +2004,20 @@ QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *c return QJNIObjectPrivate::getStaticObjectField(className, fieldName, "Ljava/lang/String;"); } +template <> +QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, + const char *fieldName) +{ + return QJNIObjectPrivate::getStaticObjectField(clazz, fieldName, "[Ljava/lang/Object;"); +} + +template <> +QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, + const char *fieldName) +{ + return QJNIObjectPrivate::getStaticObjectField(className, fieldName, "[Ljava/lang/Object;"); +} + template <> QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, const char *fieldName) @@ -1939,27 +2130,18 @@ QAndroidJniObject QAndroidJniObject::getStaticObjectField(const ch return QJNIObjectPrivate::getStaticObjectField(className, fieldName, "[D"); } -QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, - const char *fieldName, - const char *sig) -{ - return QJNIObjectPrivate::getStaticObjectField(className, fieldName, sig); -} - template <> -QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, - const char *fieldName, - const char *sig) +QAndroidJniObject QAndroidJniObject::getStaticObjectField(jclass clazz, + const char *fieldName) { - return QJNIObjectPrivate::getStaticObjectField(clazz, fieldName, sig); + return QJNIObjectPrivate::getStaticObjectField(clazz, fieldName, "Ljava/lang/Throwable;"); } template <> -QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, - const char *fieldName, - const char *sig) +QAndroidJniObject QAndroidJniObject::getStaticObjectField(const char *className, + const char *fieldName) { - return QJNIObjectPrivate::getStaticObjectField(className, fieldName, sig); + return QJNIObjectPrivate::getStaticObjectField(className, fieldName, "Ljava/lang/Throwable;"); } template <> @@ -2090,6 +2272,20 @@ void QAndroidJniObject::setStaticField(const char *className, QJNIObjectPrivate::setStaticField(className, fieldName, sig, value); } +template <> +void QAndroidJniObject::setStaticField(const char *className, + const char *fieldName, + jclass value) +{ + QJNIObjectPrivate::setStaticField(className, fieldName, "Ljava/lang/Class;", value); +} + +template <> +void QAndroidJniObject::setStaticField(jclass clazz, const char *fieldName, jclass value) +{ + QJNIObjectPrivate::setStaticField(clazz, fieldName, "Ljava/lang/Class;", value); +} + template <> void QAndroidJniObject::setStaticField(const char *className, const char *fieldName, @@ -2104,6 +2300,22 @@ void QAndroidJniObject::setStaticField(jclass clazz, const char *fieldN QJNIObjectPrivate::setStaticField(clazz, fieldName, "Ljava/lang/String;", value); } +template <> +void QAndroidJniObject::setStaticField(const char *className, + const char *fieldName, + jobjectArray value) +{ + QJNIObjectPrivate::setStaticField(className, fieldName, "[Ljava/lang/Object;", value); +} + +template <> +void QAndroidJniObject::setStaticField(jclass clazz, + const char *fieldName, + jobjectArray value) +{ + QJNIObjectPrivate::setStaticField(clazz, fieldName, "[Ljava/lang/Object;", value); +} + template <> void QAndroidJniObject::setStaticField(const char *className, const char *fieldName, @@ -2232,6 +2444,22 @@ void QAndroidJniObject::setStaticField(jclass clazz, QJNIObjectPrivate::setStaticField(clazz, fieldName, "[D", value); } +template <> +void QAndroidJniObject::setStaticField(const char *className, + const char *fieldName, + jthrowable value) +{ + QJNIObjectPrivate::setStaticField(className, fieldName, "Ljava/lang/Throwable;", value); +} + +template <> +void QAndroidJniObject::setStaticField(jclass clazz, + const char *fieldName, + jthrowable value) +{ + QJNIObjectPrivate::setStaticField(clazz, fieldName, "Ljava/lang/Throwable;", value); +} + QAndroidJniObject QAndroidJniObject::fromString(const QString &string) { return QJNIObjectPrivate::fromString(string); -- cgit v1.2.3