summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qjni.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-10-11 16:12:21 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-10-11 16:12:35 +0200
commitd0eb444a49f6064ecb896f62276e060cd8a4b1e8 (patch)
tree34d8dd637baf665225ada73e76604531cd2c75e5 /src/corelib/kernel/qjni.cpp
parentda0cb32b8ee7cc4a991a59420a411898e63a660e (diff)
parent894f86709080fe8d20875b402adce679963c49c2 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Diffstat (limited to 'src/corelib/kernel/qjni.cpp')
-rw-r--r--src/corelib/kernel/qjni.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp
index d1113e4eae1..54cd2b5a75c 100644
--- a/src/corelib/kernel/qjni.cpp
+++ b/src/corelib/kernel/qjni.cpp
@@ -269,6 +269,24 @@ QJNIObjectPrivate::QJNIObjectPrivate(const char *className, const char *sig, ...
}
}
+QJNIObjectPrivate::QJNIObjectPrivate(const char *className, const char *sig, va_list args)
+ : d(new QJNIObjectData())
+{
+ QJNIEnvironmentPrivate env;
+ d->m_jclass = getCachedClass(env, className);
+ d->m_own_jclass = false;
+ if (d->m_jclass) {
+ jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "<init>", sig);
+ if (constructorId) {
+ jobject obj = env->NewObjectV(d->m_jclass, constructorId, args);
+ if (obj) {
+ d->m_jobject = env->NewGlobalRef(obj);
+ env->DeleteLocalRef(obj);
+ }
+ }
+ }
+}
+
QJNIObjectPrivate::QJNIObjectPrivate(jclass clazz)
: d(new QJNIObjectData())
{
@@ -309,6 +327,25 @@ QJNIObjectPrivate::QJNIObjectPrivate(jclass clazz, const char *sig, ...)
}
}
+QJNIObjectPrivate::QJNIObjectPrivate(jclass clazz, const char *sig, va_list args)
+ : d(new QJNIObjectData())
+{
+ QJNIEnvironmentPrivate env;
+ if (clazz) {
+ d->m_jclass = static_cast<jclass>(env->NewGlobalRef(clazz));
+ if (d->m_jclass) {
+ jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "<init>", sig);
+ if (constructorId) {
+ jobject obj = env->NewObjectV(d->m_jclass, constructorId, args);
+ if (obj) {
+ d->m_jobject = env->NewGlobalRef(obj);
+ env->DeleteLocalRef(obj);
+ }
+ }
+ }
+ }
+}
+
QJNIObjectPrivate::QJNIObjectPrivate(jobject obj)
: d(new QJNIObjectData())
{