Skip to content

Commit 4264e28

Browse files
committed
Add calendar constructor with timezone
1 parent 17d2da3 commit 4264e28

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

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

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ use java_class_proto::{JavaFieldProto, JavaMethodProto};
44
use java_constants::MethodAccessFlags;
55
use jvm::{ClassInstanceRef, Jvm, Result};
66

7-
use crate::{RuntimeClassProto, RuntimeContext, classes::java::util::Date};
7+
use crate::{
8+
RuntimeClassProto, RuntimeContext,
9+
classes::java::util::{Date, TimeZone},
10+
};
811

912
// class java.util.Calendar
1013
pub struct Calendar;
@@ -18,6 +21,12 @@ impl Calendar {
1821
methods: vec![
1922
JavaMethodProto::new("<init>", "()V", Self::init, Default::default()),
2023
JavaMethodProto::new("getInstance", "()Ljava/util/Calendar;", Self::get_instance, MethodAccessFlags::STATIC),
24+
JavaMethodProto::new(
25+
"getInstance",
26+
"(Ljava/util/TimeZone;)Ljava/util/Calendar;",
27+
Self::get_instance_with_time_zone,
28+
MethodAccessFlags::STATIC,
29+
),
2130
JavaMethodProto::new("setTime", "(Ljava/util/Date;)V", Self::set_time, Default::default()),
2231
JavaMethodProto::new("getTime", "()Ljava/util/Date;", Self::get_time, Default::default()),
2332
JavaMethodProto::new("set", "(II)V", Self::set, Default::default()),
@@ -40,6 +49,20 @@ impl Calendar {
4049
Ok(instance.into())
4150
}
4251

52+
async fn get_instance_with_time_zone(
53+
jvm: &Jvm,
54+
_: &mut RuntimeContext,
55+
time_zone: ClassInstanceRef<TimeZone>,
56+
) -> Result<ClassInstanceRef<Calendar>> {
57+
tracing::debug!("java.util.Calendar::getInstance({:?})", &time_zone);
58+
59+
let instance = jvm
60+
.new_class("java/util/GregorianCalendar", "(Ljava/util/TimeZone;)V", (time_zone,))
61+
.await?;
62+
63+
Ok(instance.into())
64+
}
65+
4366
async fn init(jvm: &Jvm, _: &mut RuntimeContext, mut this: ClassInstanceRef<Self>) -> Result<()> {
4467
tracing::debug!("java.util.Calendar::<init>({:?})", &this);
4568

0 commit comments

Comments
 (0)