Skip to content

Commit e3d6b0d

Browse files
committed
Add SimpleTimeZone
1 parent 72e2687 commit e3d6b0d

File tree

6 files changed

+54
-4
lines changed

6 files changed

+54
-4
lines changed

java_runtime/src/classes/java/util.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ mod gregorian_calendar;
1212
mod hashtable;
1313
mod properties;
1414
mod random;
15+
mod simple_time_zone;
1516
mod stack;
1617
mod time_zone;
1718
mod timer;
@@ -22,6 +23,6 @@ mod vector;
2223
pub use self::{
2324
abstract_collection::AbstractCollection, abstract_list::AbstractList, calendar::Calendar, date::Date, dictionary::Dictionary,
2425
empty_stack_exception::EmptyStackException, enumeration::Enumeration, gregorian_calendar::GregorianCalendar, hashtable::Hashtable,
25-
properties::Properties, random::Random, stack::Stack, time_zone::TimeZone, timer::Timer, timer_task::TimerTask, timer_thread::TimerThread,
26-
vector::Vector,
26+
properties::Properties, random::Random, simple_time_zone::SimpleTimeZone, stack::Stack, time_zone::TimeZone, timer::Timer, timer_task::TimerTask,
27+
timer_thread::TimerThread, vector::Vector,
2728
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
use alloc::vec;
2+
3+
use java_class_proto::JavaMethodProto;
4+
use jvm::{ClassInstanceRef, Jvm, Result};
5+
6+
use crate::{RuntimeClassProto, RuntimeContext, classes::java::lang::String};
7+
8+
// class java.util.SimpleTimeZone
9+
pub struct SimpleTimeZone;
10+
11+
impl SimpleTimeZone {
12+
pub fn as_proto() -> RuntimeClassProto {
13+
RuntimeClassProto {
14+
name: "java/util/SimpleTimeZone",
15+
parent_class: Some("java/util/TimeZone"),
16+
interfaces: vec![],
17+
methods: vec![JavaMethodProto::new("<init>", "(Ljava/lang/String;)V", Self::init, Default::default())],
18+
fields: vec![],
19+
}
20+
}
21+
22+
async fn init(jvm: &Jvm, _: &mut RuntimeContext, this: ClassInstanceRef<Self>, id: ClassInstanceRef<String>) -> Result<()> {
23+
tracing::debug!("java.util.SimpleTimeZone::<init>({this:?}, {id:?})");
24+
25+
let _: () = jvm.invoke_special(&this, "java/lang/Object", "<init>", "()V", ()).await?;
26+
27+
Ok(())
28+
}
29+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ impl TimeZone {
3737
}
3838

3939
async fn get_time_zone(jvm: &Jvm, _: &mut RuntimeContext, id: ClassInstanceRef<String>) -> Result<ClassInstanceRef<Self>> {
40-
tracing::warn!("stub java.util.TimeZone::getTimeZone({id:?})");
40+
tracing::debug!("java.util.TimeZone::getTimeZone({id:?})");
4141

42-
let result = jvm.new_class("java/util/TimeZone", "()V", ()).await?;
42+
let result = jvm.new_class("java/util/SimpleTimeZone", "(Ljava/lang/String;)V", (id,)).await?;
4343

4444
Ok(result.into())
4545
}

java_runtime/src/loader.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ pub fn get_runtime_class_proto(name: &str) -> Option<RuntimeClassProto> {
7474
crate::classes::java::util::Hashtable::as_proto(),
7575
crate::classes::java::util::Properties::as_proto(),
7676
crate::classes::java::util::Random::as_proto(),
77+
crate::classes::java::util::SimpleTimeZone::as_proto(),
7778
crate::classes::java::util::Stack::as_proto(),
7879
crate::classes::java::util::Timer::as_proto(),
7980
crate::classes::java::util::TimerTask::as_proto(),

java_runtime/tests/classes/java/util/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ mod test_hashtable;
44
mod test_random;
55
mod test_stack;
66
mod test_timer;
7+
mod test_timezone;
78
mod test_url;
89
mod test_vector;
910
mod zip;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use java_runtime::classes::java::util::TimeZone;
2+
use jvm::{ClassInstanceRef, Result, runtime::JavaLangString};
3+
4+
use test_utils::test_jvm;
5+
6+
#[tokio::test]
7+
async fn test_timezone() -> Result<()> {
8+
let jvm = test_jvm().await?;
9+
10+
let id = JavaLangString::from_rust_string(&jvm, "UTC").await?;
11+
let timezone: ClassInstanceRef<TimeZone> = jvm
12+
.invoke_static("java/util/TimeZone", "getTimeZone", "(Ljava/lang/String;)Ljava/util/TimeZone;", (id,))
13+
.await?;
14+
15+
assert!(!timezone.is_null());
16+
17+
Ok(())
18+
}

0 commit comments

Comments
 (0)