diff options
Diffstat (limited to 'src/corelib/kernel/qjni.cpp')
-rw-r--r-- | src/corelib/kernel/qjni.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp index d1113e4eae..54cd2b5a75 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()) { |