summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/jniconvenience/qjniobject_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport/jniconvenience/qjniobject_p.h')
-rw-r--r--src/platformsupport/jniconvenience/qjniobject_p.h39
1 files changed, 29 insertions, 10 deletions
diff --git a/src/platformsupport/jniconvenience/qjniobject_p.h b/src/platformsupport/jniconvenience/qjniobject_p.h
index 6874765f06..8721ec3a6a 100644
--- a/src/platformsupport/jniconvenience/qjniobject_p.h
+++ b/src/platformsupport/jniconvenience/qjniobject_p.h
@@ -43,6 +43,7 @@
#define QJNIOBJECT_H
#include <qglobal.h>
+#include <qsharedpointer.h>
#include <jni.h>
QT_BEGIN_NAMESPACE
@@ -72,20 +73,40 @@ class QJNILocalRef;
* someObject.setField<jint>("fieldName", 10);
* someObject.callMethod<void>("doStuff");
*/
+
+class QJNIObjectPrivate
+{
+public:
+ QJNIObjectPrivate(const char *className);
+ QJNIObjectPrivate(const char *className, const char *sig, va_list args);
+ QJNIObjectPrivate(jclass clazz);
+ QJNIObjectPrivate(jclass clazz, const char *sig, va_list args);
+ QJNIObjectPrivate(jobject obj);
+ ~QJNIObjectPrivate();
+
+private:
+ Q_DISABLE_COPY(QJNIObjectPrivate)
+ friend class QJNIObject;
+ jobject m_jobject;
+ jclass m_jclass;
+ bool m_own_jclass;
+};
+
class QJNIObject
{
public:
- QJNIObject(const char *className);
+ explicit QJNIObject(const char *className) : d(new QJNIObjectPrivate(className)) { }
QJNIObject(const char *className, const char *sig, ...);
- QJNIObject(jclass clazz);
+ explicit QJNIObject(jclass clazz) : d(new QJNIObjectPrivate(clazz)) { }
QJNIObject(jclass clazz, const char *sig, ...);
- QJNIObject(jobject obj);
- virtual ~QJNIObject();
+ explicit QJNIObject(jobject obj) : d(new QJNIObjectPrivate(obj)) { }
+
+ virtual ~QJNIObject() { }
static bool isClassAvailable(const char *className);
- bool isValid() const { return m_jobject != 0; }
- jobject object() const { return m_jobject; }
+ bool isValid() const { return d->m_jobject != 0; }
+ jobject object() const { return d->m_jobject; }
template <typename T>
T callMethod(const char *methodName);
@@ -158,10 +179,8 @@ public:
template <typename T>
static void setStaticField(jclass clazz, const char *fieldName, T value);
-protected:
- jobject m_jobject;
- jclass m_jclass;
- bool m_own_jclass;
+private:
+ QSharedPointer<QJNIObjectPrivate> d;
};
QT_END_NAMESPACE