@@ -21,31 +21,27 @@ MethodCallBaton::~MethodCallBaton() {
2121 MethodCallBaton* self = static_cast <MethodCallBaton*>(req->data );
2222 JNIEnv *env = javaAttachCurrentThread (self->m_java ->getJvm ());
2323
24- jclass intClazz = env->FindClass (" java/lang/Integer" );
25- // jclass clazzClazz = env->FindClass("java/lang/Class");
2624 jclass methodClazz = env->FindClass (" java/lang/reflect/Method" );
2725 jmethodID method_invoke = env->GetMethodID (methodClazz, " invoke" , " (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;" );
2826 jmethodID method_getReturnType = env->GetMethodID (methodClazz, " getReturnType" , " ()Ljava/lang/Class;" );
29- // printf("a %d\n", (int)clazzClazz);
30- // jmethodID clazz_isInstance = env->GetMethodID(clazzClazz, "isInstance", "(Ljava/lang/Object;)Z");
3127
32- printf (" 1\n " );
3328 jclass returnType = (jclass)env->CallObjectMethod (self->m_method , method_getReturnType);
3429
3530 jclass objectClazz = env->FindClass (" java/lang/Object" );
3631 jobjectArray parameters = env->NewObjectArray (0 , objectClazz, NULL ); // TODO: init parameters
37- printf (" 2 %d %d %s %s\n " , (int )intClazz, (int )returnType, javaObjectToString (env, intClazz).c_str (), javaObjectToString (env, intClazz).c_str ());
38- // if(env->CallBooleanMethod(intClazz, clazz_isInstance, returnType)) {
39- if (returnType == intClazz) {
40- printf (" 4\n " );
41- self->m_result .i = env->CallIntMethod (self->m_method , method_invoke, self->m_javaObject ->m_obj , parameters);
42- self->m_resultType = TYPE_INT ;
43- } else {
44- printf (" 5\n " );
45- self->m_result .l = env->CallObjectMethod (self->m_method , method_invoke, self->m_javaObject ->m_obj , parameters);
46- self->m_resultType = TYPE_OBJECT ;
32+ self->m_resultType = javaGetType (env, returnType);
33+ switch (self->m_resultType ) {
34+ case TYPE_INT :
35+ printf (" m_method: %s\n " , javaObjectToString (env, self->m_method ).c_str ());
36+ printf (" obj: %s\n " , javaObjectToString (env, self->m_javaObject ->m_obj ).c_str ());
37+ printf (" parameters: %s\n " , javaObjectToString (env, parameters).c_str ());
38+ self->m_result .i = env->CallIntMethod (self->m_method , method_invoke, self->m_javaObject ->m_obj , parameters);
39+ printf (" %d\n " , self->m_result .i );
40+ break ;
41+ case TYPE_OBJECT :
42+ self->m_result .l = env->CallObjectMethod (self->m_method , method_invoke, self->m_javaObject ->m_obj , parameters);
43+ break ;
4744 }
48- printf (" 3\n " );
4945 if (env->ExceptionCheck ()) {
5046 env->ExceptionDescribe (); // TODO: handle error
5147 return ;
0 commit comments