33#include " java.h"
44#include " javaObject.h"
55
6- MethodCallBaton::MethodCallBaton (Java* java, jobject method, std::list<jobject>& args, v8::Handle<v8::Value>& callback) {
6+ MethodCallBaton::MethodCallBaton (Java* java, jobject method, jarray args, v8::Handle<v8::Value>& callback) {
77 JNIEnv *env = java->getJavaEnv ();
88
99 m_java = java;
10- for (std::list<jobject>::iterator it = args.begin (); it != args.end (); it++) {
11- m_args.push_back (env->NewGlobalRef (*it));
12- }
10+ m_args = (jarray)env->NewGlobalRef (args);
1311 m_callback = v8::Persistent<v8::Value>::New (callback);
1412 m_method = env->NewGlobalRef (method);
1513}
1614
1715MethodCallBaton::~MethodCallBaton () {
1816 JNIEnv *env = m_java->getJavaEnv ();
19- for (std::list<jobject>::iterator it = m_args.begin (); it != m_args.end (); it++) {
20- env->DeleteGlobalRef (*it);
21- }
22-
17+ env->DeleteGlobalRef (m_args);
2318 env->DeleteGlobalRef (m_method);
2419 m_callback.Dispose ();
2520}
@@ -83,9 +78,7 @@ void NewInstanceBaton::execute(JNIEnv *env) {
8378 jclass constructorClazz = env->FindClass (" java/lang/reflect/Constructor" );
8479 jmethodID constructor_newInstance = env->GetMethodID (constructorClazz, " newInstance" , " ([Ljava/lang/Object;)Ljava/lang/Object;" );
8580
86- jclass objectClazz = env->FindClass (" java/lang/Object" );
87- jobjectArray parameters = env->NewObjectArray (0 , objectClazz, NULL ); // TODO: init parameters
88- jobject result = env->CallObjectMethod (m_method, constructor_newInstance, parameters);
81+ jobject result = env->CallObjectMethod (m_method, constructor_newInstance, m_args);
8982 m_resultType = TYPE_OBJECT;
9083 m_result = env->NewGlobalRef (result);
9184 if (env->ExceptionCheck ()) {
@@ -101,10 +94,8 @@ void InstanceMethodCallBaton::execute(JNIEnv *env) {
10194
10295 jclass returnType = (jclass)env->CallObjectMethod (m_method, method_getReturnType);
10396
104- jclass objectClazz = env->FindClass (" java/lang/Object" );
105- jobjectArray parameters = env->NewObjectArray (0 , objectClazz, NULL ); // TODO: init parameters
10697 m_resultType = javaGetType (env, returnType);
107- jobject result = env->CallObjectMethod (m_method, method_invoke, m_javaObject->getObject (), parameters );
98+ jobject result = env->CallObjectMethod (m_method, method_invoke, m_javaObject->getObject (), m_args );
10899 m_result = env->NewGlobalRef (result);
109100 if (env->ExceptionCheck ()) {
110101 env->ExceptionDescribe (); // TODO: handle error
@@ -116,7 +107,7 @@ NewInstanceBaton::NewInstanceBaton(
116107 Java* java,
117108 jclass clazz,
118109 jobject method,
119- std::list<jobject>& args,
110+ jarray args,
120111 v8::Handle<v8::Value>& callback) : MethodCallBaton(java, method, args, callback) {
121112 JNIEnv *env = m_java->getJavaEnv ();
122113 m_clazz = (jclass)env->NewGlobalRef (clazz);
@@ -131,7 +122,7 @@ InstanceMethodCallBaton::InstanceMethodCallBaton(
131122 Java* java,
132123 JavaObject* obj,
133124 jobject method,
134- std::list<jobject>& args,
125+ jarray args,
135126 v8::Handle<v8::Value>& callback) : MethodCallBaton(java, method, args, callback) {
136127 m_javaObject = obj;
137128 m_javaObject->Ref ();
0 commit comments