@@ -38,6 +38,7 @@ impl Vector {
3838 JavaMethodProto :: new( "removeElementAt" , "(I)V" , Self :: remove_element_at, Default :: default ( ) ) ,
3939 JavaMethodProto :: new( "lastIndexOf" , "(Ljava/lang/Object;)I" , Self :: last_index_of, Default :: default ( ) ) ,
4040 JavaMethodProto :: new( "lastIndexOf" , "(Ljava/lang/Object;I)I" , Self :: last_index_of_index, Default :: default ( ) ) ,
41+ JavaMethodProto :: new( "firstElement" , "()Ljava/lang/Object;" , Self :: first_element, Default :: default ( ) ) ,
4142 ] ,
4243 fields : vec ! [ JavaFieldProto :: new( "raw" , "[B" , Default :: default ( ) ) ] ,
4344 }
@@ -226,6 +227,20 @@ impl Vector {
226227 Ok ( -1 )
227228 }
228229
230+ async fn first_element ( jvm : & Jvm , _: & mut RuntimeContext , this : ClassInstanceRef < Self > ) -> Result < ClassInstanceRef < Object > > {
231+ tracing:: debug!( "java.util.Vector::firstElement({:?})" , & this) ;
232+
233+ let rust_vector = Self :: get_rust_vector ( jvm, & this) . await ?;
234+
235+ if rust_vector. lock ( ) . await . len ( ) == 0 {
236+ return Ok ( None . into ( ) ) ;
237+ }
238+
239+ let element = rust_vector. lock ( ) . await . first ( ) . cloned ( ) . unwrap ( ) ;
240+
241+ Ok ( element)
242+ }
243+
229244 async fn get_rust_vector ( jvm : & Jvm , this : & ClassInstanceRef < Self > ) -> Result < RustVector > {
230245 jvm. get_rust_object_field ( this, "raw" ) . await
231246 }
0 commit comments