@@ -116,13 +116,14 @@ pub(crate) async fn get_field_at_0(
116116 constant_pool. try_get_name_and_type ( * name_and_type_index) ?;
117117 let field_name = constant_pool. try_get_utf8 ( * name_index) ?;
118118 let field_name = field_name. to_object ( & vm) . await ?;
119- let field = vm
120- . invoke (
121- "java.lang.Class" ,
122- "getDeclaredField" ,
123- "(Ljava/lang/String;)Ljava/lang/reflect/Field;" ,
124- & [ class_object, field_name] ,
125- )
119+
120+ let class = thread. class ( "java.lang.Class" ) . await ?;
121+ let method = class. try_get_method (
122+ "getDeclaredField" ,
123+ "(Ljava/lang/String;)Ljava/lang/reflect/Field;" ,
124+ ) ?;
125+ let field = thread
126+ . execute ( & class, & method, & [ class_object, field_name] )
126127 . await ?;
127128 Ok ( field)
128129}
@@ -268,25 +269,29 @@ pub(crate) async fn get_method_at_0(
268269 parameters_classes. push ( parameter_type) ;
269270 }
270271 let class = thread. class ( "java/lang/Class" ) . await ?;
271- let class_parameters = Value :: try_from ( ( class, parameters_classes) ) ?;
272+ let class_parameters = Value :: try_from ( ( class. clone ( ) , parameters_classes) ) ?;
272273
273274 let method = if method_name == "<init>" {
274- vm. invoke (
275- "java.lang.Class" ,
275+ let method = class. try_get_method (
276276 "getDeclaredConstructor" ,
277277 "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;" ,
278- & [ class_object, class_parameters] ,
279- )
280- . await ?
278+ ) ?;
279+ thread
280+ . execute ( & class, & method, & [ class_object, class_parameters] )
281+ . await ?
281282 } else {
282283 let method_name = method_name. to_object ( & vm) . await ?;
283- vm. invoke (
284- "java.lang.Class" ,
284+ let method = class. try_get_method (
285285 "getDeclaredMethod" ,
286286 "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;" ,
287- & [ class_object, method_name, class_parameters] ,
288- )
289- . await ?
287+ ) ?;
288+ thread
289+ . execute (
290+ & class,
291+ & method,
292+ & [ class_object, method_name, class_parameters] ,
293+ )
294+ . await ?
290295 } ;
291296
292297 Ok ( method)
@@ -449,15 +454,12 @@ pub(crate) async fn get_tag_at_0(
449454 let class = class:: get_class ( & thread, & object) . await ?;
450455 let constant_pool = class. constant_pool ( ) ;
451456 let constant = constant_pool. try_get ( index) ?;
452- let vm = thread. vm ( ) ?;
453- let tag = vm
454- . invoke (
455- "jdk.internal.reflect.ConstantPool$Tag" ,
456- "valueOf" ,
457- "(B)Ljdk/internal/reflect/ConstantPool$Tag;" ,
458- & [ constant. tag ( ) ] ,
459- )
457+
458+ let class = thread
459+ . class ( "jdk/internal/reflect/ConstantPool$Tag" )
460460 . await ?;
461+ let method = class. try_get_method ( "valueOf" , "(B)Ljdk/internal/reflect/ConstantPool$Tag;" ) ?;
462+ let tag = thread. execute ( & class, & method, & [ constant. tag ( ) ] ) . await ?;
461463 Ok ( tag)
462464}
463465
0 commit comments