@@ -48,7 +48,7 @@ static jmethodID Class_getField_mid;
4848static jmethodID Class_getMethods_mid ;
4949static jmethodID Class_getConstructors_mid ;
5050static jmethodID Method_getName_mid ;
51- static jmethodID Method_toString_mid ;
51+ static jmethodID Object_toString_mid ;
5252
5353static jclass List_class ;
5454static jmethodID List_get_mid ;
@@ -180,10 +180,17 @@ STATIC mp_obj_t new_jclass(jclass jc) {
180180// jobject
181181
182182STATIC void jobject_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
183- (void )kind ;
184183 mp_obj_jobject_t * self = self_in ;
185- // Variable value printed as cast to int
186- mp_printf (print , "<jobject @%p>" , self -> obj );
184+ if (kind == PRINT_REPR ) {
185+ mp_printf (print , "<jobject @%p \"" , self -> obj );
186+ }
187+ jobject str_o = JJ (CallObjectMethod , self -> obj , Object_toString_mid );
188+ const char * str = JJ (GetStringUTFChars , str_o , NULL );
189+ mp_printf (print , str );
190+ JJ (ReleaseStringUTFChars , str_o , str );
191+ if (kind == PRINT_REPR ) {
192+ mp_printf (print , "\">" );
193+ }
187194}
188195
189196STATIC void jobject_attr (mp_obj_t self_in , qstr attr_in , mp_obj_t * dest ) {
@@ -358,7 +365,7 @@ STATIC mp_obj_t call_method(jobject obj, const char *name, jarray methods, bool
358365 jsize num_methods = JJ (GetArrayLength , methods );
359366 for (int i = 0 ; i < num_methods ; i ++ ) {
360367 jobject meth = JJ (GetObjectArrayElement , methods , i );
361- jobject name_o = JJ (CallObjectMethod , meth , Method_toString_mid );
368+ jobject name_o = JJ (CallObjectMethod , meth , Object_toString_mid );
362369 const char * decl = JJ (GetStringUTFChars , name_o , NULL );
363370 const char * arg_types = strchr (decl , '(' ) + 1 ;
364371 //const char *arg_types_end = strchr(arg_types, ')');
@@ -500,6 +507,10 @@ STATIC void create_jvm() {
500507 jclass method_class = JJ (FindClass , "java/lang/reflect/Method" );
501508 String_class = JJ (FindClass , "java/lang/String" );
502509
510+ jclass Object_class = JJ (FindClass , "java/lang/Object" );
511+ Object_toString_mid = JJ (GetMethodID , Object_class , "toString" ,
512+ "()Ljava/lang/String;" );
513+
503514 Class_getField_mid = (* env )-> GetMethodID (env , Class_class , "getField" ,
504515 "(Ljava/lang/String;)Ljava/lang/reflect/Field;" );
505516 Class_getMethods_mid = (* env )-> GetMethodID (env , Class_class , "getMethods" ,
@@ -508,8 +519,6 @@ STATIC void create_jvm() {
508519 "()[Ljava/lang/reflect/Constructor;" );
509520 Method_getName_mid = (* env )-> GetMethodID (env , method_class , "getName" ,
510521 "()Ljava/lang/String;" );
511- Method_toString_mid = (* env )-> GetMethodID (env , method_class , "toString" ,
512- "()Ljava/lang/String;" );
513522
514523 List_class = JJ (FindClass , "java/util/List" );
515524 List_get_mid = JJ (GetMethodID , List_class , "get" ,
0 commit comments