From d519b085d18b7a2a4b4035c994def4872ca798bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Wed, 2 Oct 2013 15:10:54 +0200 Subject: Android: Add private ctors in QJNIObjectPrivate that takes va_list. NewObjectV() was failing because QJNIObject was calling the variadic constructors with a va_list, which in turn created a new va_list. Change-Id: I1cf4c8133f237596964177271a20ca651174e695 Reviewed-by: Yoann Lopes --- src/corelib/kernel/qjni.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/corelib/kernel/qjni.cpp') 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, "", 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(env->NewGlobalRef(clazz)); + if (d->m_jclass) { + jmethodID constructorId = getCachedMethodID(env, d->m_jclass, "", 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()) { -- cgit v1.2.3