Skip to content

Commit 7ddb61f

Browse files
committed
call but invalid result
1 parent 17b916a commit 7ddb61f

4 files changed

Lines changed: 31 additions & 21 deletions

File tree

src/methodCallBaton.cpp

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

src/methodCallBaton.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,6 @@
1111
class Java;
1212
class JavaObject;
1313

14-
typedef enum _jvalueType {
15-
TYPE_INT,
16-
TYPE_OBJECT
17-
} jvalueType;
18-
1914
class MethodCallBaton {
2015
public:
2116
MethodCallBaton(Java* java, JavaObject* obj, jobject method, std::list<jobject> args, v8::Handle<v8::Value> &callback);

src/utils.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
#include "utils.h"
3+
#include <string.h>
34

45
std::list<jobject> javaReflectionGetDeclaredMethods(JNIEnv *env, jclass clazz) {
56
std::list<jobject> results;
@@ -61,3 +62,15 @@ JNIEnv* javaAttachCurrentThread(JavaVM* jvm) {
6162
void javaDetachCurrentThread(JavaVM* jvm) {
6263
jvm->DetachCurrentThread();
6364
}
65+
66+
jvalueType javaGetType(JNIEnv *env, jclass type) {
67+
// TODO: has to be a better way
68+
const char *typeStr = javaObjectToString(env, type).c_str();
69+
if(strcmp(typeStr, "int") == 0) {
70+
return TYPE_INT;
71+
}
72+
73+
//jclass intClazz = env->FindClass("java/lang/Integer");
74+
75+
return TYPE_OBJECT;
76+
}

src/utils.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
#include <list>
77
#include <string>
88

9+
typedef enum _jvalueType {
10+
TYPE_INT,
11+
TYPE_OBJECT
12+
} jvalueType;
13+
914
std::list<jobject> javaReflectionGetDeclaredMethods(JNIEnv *env, jclass clazz);
1015
std::string javaToString(JNIEnv *env, jstring str);
1116
std::string javaObjectToString(JNIEnv *env, jobject obj);
@@ -16,5 +21,6 @@ jobject javaFindBestMatchingMethod(
1621
std::list<jobject>& args);
1722
JNIEnv* javaAttachCurrentThread(JavaVM* jvm);
1823
void javaDetachCurrentThread(JavaVM* jvm);
24+
jvalueType javaGetType(JNIEnv *env, jclass type);
1925

2026
#endif

0 commit comments

Comments
 (0)