Skip to content

Commit 65670cb

Browse files
committed
Add java/lang/StringBuffer::length()I
1 parent b8e87a5 commit 65670cb

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
@@ -43,6 +43,7 @@ impl StringBuffer {
4343
JavaMethodProto::new("append", "([CII)Ljava/lang/StringBuffer;", Self::append_char_array, Default::default()),
4444
JavaMethodProto::new("toString", "()Ljava/lang/String;", Self::to_string, Default::default()),
4545
JavaMethodProto::new("setLength", "(I)V", Self::set_length, Default::default()),
46+
JavaMethodProto::new("length", "()I", Self::length, Default::default()),
4647
],
4748
fields: vec![
4849
JavaFieldProto::new("value", "[C", Default::default()),
@@ -221,4 +222,12 @@ impl StringBuffer {
221222

222223
Ok(())
223224
}
225+
226+
async fn length(jvm: &Jvm, _: &mut RuntimeContext, this: ClassInstanceRef<Self>) -> Result<i32> {
227+
tracing::debug!("java.lang.StringBuffer::length({:?})", &this);
228+
229+
let count: i32 = jvm.get_field(&this, "count", "I").await?;
230+
231+
Ok(count)
232+
}
224233
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ async fn test_string_buffer() -> Result<()> {
2121
.invoke_virtual(&string_buffer, "append", "(J)Ljava/lang/StringBuffer;", (42i64,))
2222
.await?;
2323

24+
let length: i32 = jvm.invoke_virtual(&string_buffer, "length", "()I", ()).await?;
25+
assert_eq!(length, 12);
26+
2427
let result = jvm.invoke_virtual(&string_buffer, "toString", "()Ljava/lang/String;", ()).await?;
2528
let result = JavaLangString::to_rust_string(&jvm, &result).await?;
2629

0 commit comments

Comments
 (0)