@@ -4,7 +4,10 @@ use java_class_proto::{JavaFieldProto, JavaMethodProto};
44use java_constants:: MethodAccessFlags ;
55use 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
1013pub 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