Skip to content

Commit a894f8d

Browse files
committed
Add java/lang/StringBuffer::charAt(I)C
1 parent 61b5b17 commit a894f8d

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

java_runtime/src/classes/java/lang/string_buffer.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,13 @@ impl StringBuffer {
231231

232232
Ok(count)
233233
}
234+
235+
async fn char_at(jvm: &Jvm, _: &mut RuntimeContext, this: ClassInstanceRef<Self>, index: i32) -> Result<JavaChar> {
236+
tracing::debug!("java.lang.StringBuffer::charAt({:?}, {:?})", &this, index);
237+
238+
let java_value: ClassInstanceRef<Array<JavaChar>> = jvm.get_field(&this, "value", "[C").await?;
239+
let char_at: JavaChar = jvm.load_array(&java_value, index as _, 1).await?.into_iter().next().unwrap();
240+
241+
Ok(char_at)
242+
}
234243
}

java_runtime/tests/classes/java/lang/test_string_buffer.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ async fn test_string_buffer() -> Result<()> {
2424
let length: i32 = jvm.invoke_virtual(&string_buffer, "length", "()I", ()).await?;
2525
assert_eq!(length, 12);
2626

27+
let char: JavaChar = jvm.invoke_virtual(&string_buffer, "charAt", "(I)C", (7,)).await?;
28+
assert_eq!(char, '4' as JavaChar);
29+
2730
let result = jvm.invoke_virtual(&string_buffer, "toString", "()Ljava/lang/String;", ()).await?;
2831
let result = JavaLangString::to_rust_string(&jvm, &result).await?;
2932

0 commit comments

Comments
 (0)