Skip to content

Commit 927567a

Browse files
committed
Add Vector::firstElemetn
1 parent a1d6edf commit 927567a

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

java_runtime/src/classes/java/util/vector.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)