@@ -119,13 +119,12 @@ v8::Local<v8::Value> MethodCallBaton::resultsToV8(JNIEnv *env) {
119119}
120120
121121void NewInstanceBaton::ExecuteInternal (JNIEnv* env) {
122- jclass constructorClazz = env->FindClass (" java/lang/reflect/Constructor" );
123- jmethodID constructor_newInstance = env->GetMethodID (constructorClazz, " newInstance" , " ([Ljava/lang/Object;)Ljava/lang/Object;" );
124-
125- // printf("invoke: %s\n", javaMethodCallToString(env, m_method, constructor_newInstance, m_args).c_str());
122+ jclass batonClazz = env->FindClass (" node/MethodCallBaton" );
123+ jmethodID newInstance = env->GetStaticMethodID (batonClazz, " newInstance" , " (Ljava/lang/reflect/Constructor;[Ljava/lang/Object;)Ljava/lang/Object;" );
126124
127125 jarray args = javaGetArgsForConstructor (env, m_method, m_args);
128- jobject result = env->CallObjectMethod (m_method, constructor_newInstance, args);
126+ jobject result = env->CallStaticObjectMethod (batonClazz, newInstance, m_method, args);
127+
129128 if (env->ExceptionCheck ()) {
130129 jthrowable ex = env->ExceptionOccurred ();
131130 env->ExceptionClear ();
@@ -138,8 +137,6 @@ void NewInstanceBaton::ExecuteInternal(JNIEnv* env) {
138137}
139138
140139void StaticMethodCallBaton::ExecuteInternal (JNIEnv* env) {
141- jmethodID method_invoke = getMethodInvokeMethodId (env);
142-
143140 /*
144141 printf("calling %s\n", javaObjectToString(env, m_method).c_str());
145142 printf("arguments\n");
@@ -150,8 +147,11 @@ void StaticMethodCallBaton::ExecuteInternal(JNIEnv* env) {
150147 }
151148 */
152149
150+ jclass batonClazz = env->FindClass (" node/MethodCallBaton" );
151+ jmethodID invokeMethod = env->GetStaticMethodID (batonClazz, env->GetVersion () >= 0x90000 ? " invokeMethod9" : " invokeMethod" , " (Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;" );
152+
153153 jarray args = javaGetArgsForMethod (env, m_method, m_args);
154- jobject result = env->CallObjectMethod (m_method, method_invoke , NULL , args);
154+ jobject result = env->CallStaticObjectMethod (batonClazz, invokeMethod, m_method , NULL , args);
155155
156156 if (env->ExceptionCheck ()) {
157157 jthrowable ex = env->ExceptionOccurred ();
@@ -165,18 +165,19 @@ void StaticMethodCallBaton::ExecuteInternal(JNIEnv* env) {
165165}
166166
167167void InstanceMethodCallBaton::ExecuteInternal (JNIEnv* env) {
168- jmethodID method_invoke = getMethodInvokeMethodId (env);
169-
170168 /*
171169 printf("calling %s\n", javaObjectToString(env, m_method).c_str());
172170 printf("arguments\n");
173171 for(int i=0; i<env->GetArrayLength(m_args); i++) {
174172 printf(" %s\n", javaObjectToString(env, env->GetObjectArrayElement((jobjectArray)m_args, i)).c_str());
175173 }
176174 */
177-
175+
176+ jclass batonClazz = env->FindClass (" node/MethodCallBaton" );
177+ jmethodID invokeMethod = env->GetStaticMethodID (batonClazz, env->GetVersion () >= 0x90000 ? " invokeMethod9" : " invokeMethod" , " (Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;" );
178+
178179 jarray args = javaGetArgsForMethod (env, m_method, m_args);
179- jobject result = env->CallObjectMethod (m_method, method_invoke , m_javaObject->getObject (), args);
180+ jobject result = env->CallStaticObjectMethod (batonClazz, invokeMethod, m_method , m_javaObject->getObject (), args);
180181
181182 if (env->ExceptionCheck ()) {
182183 jthrowable ex = env->ExceptionOccurred ();
0 commit comments