@@ -36,6 +36,7 @@ impl Vector {
36
36
JavaMethodProto :: new( "remove" , "(I)Ljava/lang/Object;" , Self :: remove, Default :: default ( ) ) ,
37
37
JavaMethodProto :: new( "removeAllElements" , "()V" , Self :: remove_all_elements, Default :: default ( ) ) ,
38
38
JavaMethodProto :: new( "removeElementAt" , "(I)V" , Self :: remove_element_at, Default :: default ( ) ) ,
39
+ JavaMethodProto :: new( "indexOf" , "(Ljava/lang/Object;)I" , Self :: index_of, Default :: default ( ) ) ,
39
40
JavaMethodProto :: new( "lastIndexOf" , "(Ljava/lang/Object;)I" , Self :: last_index_of, Default :: default ( ) ) ,
40
41
JavaMethodProto :: new( "lastIndexOf" , "(Ljava/lang/Object;I)I" , Self :: last_index_of_index, Default :: default ( ) ) ,
41
42
JavaMethodProto :: new( "firstElement" , "()Ljava/lang/Object;" , Self :: first_element, Default :: default ( ) ) ,
@@ -181,6 +182,30 @@ impl Vector {
181
182
Ok ( ( ) )
182
183
}
183
184
185
+ async fn index_of ( jvm : & Jvm , _: & mut RuntimeContext , this : ClassInstanceRef < Self > , element : ClassInstanceRef < Object > ) -> Result < i32 > {
186
+ tracing:: debug!( "java.util.Vector::indexOf({:?}, {:?})" , & this, & element) ;
187
+
188
+ let rust_vector = Self :: get_rust_vector ( jvm, & this) . await ?;
189
+ let vector = rust_vector. lock ( ) ;
190
+
191
+ for ( i, item) in vector. iter ( ) . enumerate ( ) {
192
+ if item. is_none ( ) && element. is_null ( ) {
193
+ return Ok ( i as i32 ) ;
194
+ }
195
+
196
+ if item. is_none ( ) || element. is_null ( ) {
197
+ continue ;
198
+ }
199
+
200
+ let value: Box < dyn ClassInstance > = element. clone ( ) . into ( ) ;
201
+ if item. as_ref ( ) . unwrap ( ) . equals ( & * value) ? {
202
+ return Ok ( i as i32 ) ;
203
+ }
204
+ }
205
+
206
+ Ok ( -1 )
207
+ }
208
+
184
209
async fn last_index_of ( jvm : & Jvm , _: & mut RuntimeContext , this : ClassInstanceRef < Self > , element : ClassInstanceRef < Object > ) -> Result < i32 > {
185
210
tracing:: debug!( "java.util.Vector::lastIndexOf({:?}, {:?})" , & this, & element) ;
186
211
@@ -213,10 +238,11 @@ impl Vector {
213
238
let vector = rust_vector. lock ( ) ;
214
239
215
240
for ( i, item) in vector[ ..=index as usize ] . iter ( ) . enumerate ( ) . rev ( ) {
216
- if item. is_none ( ) {
217
- if element. is_null ( ) {
218
- return Ok ( i as i32 ) ;
219
- }
241
+ if item. is_none ( ) && element. is_null ( ) {
242
+ return Ok ( i as i32 ) ;
243
+ }
244
+
245
+ if item. is_none ( ) || element. is_null ( ) {
220
246
continue ;
221
247
}
222
248
0 commit comments