unix/modjni: Actually check argument type when doing method resolution.
This is required to properly select among overloaded methods. It however relies on java.lang.Object-overloaded method to come last, which appears to be the case for OpenJDK.
This commit is contained in:
parent
ee7bebc94f
commit
91f2168dd5
|
@ -361,8 +361,8 @@ STATIC bool py2jvalue(const char **jtypesig, mp_obj_t arg, jvalue *out) {
|
|||
return false;
|
||||
}
|
||||
} else if (type == &jobject_type) {
|
||||
printf("TODO: Check java arg type!!\n");
|
||||
bool is_object = false;
|
||||
const char *expected_type = arg_type;
|
||||
while (1) {
|
||||
if (isalpha(*arg_type)) {
|
||||
} else if (*arg_type == '.') {
|
||||
|
@ -376,6 +376,14 @@ STATIC bool py2jvalue(const char **jtypesig, mp_obj_t arg, jvalue *out) {
|
|||
return false;
|
||||
}
|
||||
mp_obj_jobject_t *jo = arg;
|
||||
if (!MATCH(expected_type, "java.lang.Object")) {
|
||||
char class_name[64];
|
||||
get_jclass_name(jo->obj, class_name);
|
||||
//printf("Arg class: %s\n", class_name);
|
||||
if (strcmp(class_name, expected_type) != 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
out->l = jo->obj;
|
||||
} else if (type == &mp_type_bool) {
|
||||
if (IMATCH(arg_type, "boolean")) {
|
||||
|
|
Loading…
Reference in New Issue