diff --git a/java_runtime/src/classes/java/io/file.rs b/java_runtime/src/classes/java/io/file.rs index 91a26e51..905fd83e 100644 --- a/java_runtime/src/classes/java/io/file.rs +++ b/java_runtime/src/classes/java/io/file.rs @@ -14,7 +14,7 @@ impl File { RuntimeClassProto { name: "java/io/File", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::clinit, MethodAccessFlags::STATIC), JavaMethodProto::new("", "(Ljava/lang/String;)V", Self::init, Default::default()), diff --git a/java_runtime/src/classes/java/lang/class.rs b/java_runtime/src/classes/java/lang/class.rs index eec466a3..2891c88d 100644 --- a/java_runtime/src/classes/java/lang/class.rs +++ b/java_runtime/src/classes/java/lang/class.rs @@ -23,7 +23,7 @@ impl Class { RuntimeClassProto { name: "java/lang/Class", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, Default::default()), JavaMethodProto::new("getName", "()Ljava/lang/String;", Self::get_name, Default::default()), diff --git a/java_runtime/src/classes/java/lang/throwable.rs b/java_runtime/src/classes/java/lang/throwable.rs index 12ef890c..48e9cf79 100644 --- a/java_runtime/src/classes/java/lang/throwable.rs +++ b/java_runtime/src/classes/java/lang/throwable.rs @@ -20,7 +20,7 @@ impl Throwable { RuntimeClassProto { name: "java/lang/Throwable", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, Default::default()), JavaMethodProto::new("", "(Ljava/lang/String;)V", Self::init_with_message, Default::default()), diff --git a/java_runtime/src/classes/java/net/url.rs b/java_runtime/src/classes/java/net/url.rs index 20f65e70..a21f1822 100644 --- a/java_runtime/src/classes/java/net/url.rs +++ b/java_runtime/src/classes/java/net/url.rs @@ -20,7 +20,7 @@ impl URL { RuntimeClassProto { name: "java/net/URL", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "(Ljava/lang/String;)V", Self::init_with_spec, Default::default()), JavaMethodProto::new( diff --git a/java_runtime/src/classes/java/util/array_list.rs b/java_runtime/src/classes/java/util/array_list.rs index 21c9264a..695d8616 100644 --- a/java_runtime/src/classes/java/util/array_list.rs +++ b/java_runtime/src/classes/java/util/array_list.rs @@ -14,7 +14,7 @@ impl ArrayList { RuntimeClassProto { name: "java/util/ArrayList", parent_class: Some("java/util/AbstractList"), - interfaces: vec![], + interfaces: vec!["java/lang/Cloneable", "java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, Default::default()), JavaMethodProto::new("", "(I)V", Self::init_with_capacity, Default::default()), diff --git a/java_runtime/src/classes/java/util/calendar.rs b/java_runtime/src/classes/java/util/calendar.rs index fed9991f..0e9338f1 100644 --- a/java_runtime/src/classes/java/util/calendar.rs +++ b/java_runtime/src/classes/java/util/calendar.rs @@ -20,7 +20,7 @@ impl Calendar { RuntimeClassProto { name: "java/util/Calendar", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/io/Serializable", "java/lang/Cloneable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, Default::default()), JavaMethodProto::new("getInstance", "()Ljava/util/Calendar;", Self::get_instance, MethodAccessFlags::STATIC), diff --git a/java_runtime/src/classes/java/util/hash_map.rs b/java_runtime/src/classes/java/util/hash_map.rs index e43d0271..177e9626 100644 --- a/java_runtime/src/classes/java/util/hash_map.rs +++ b/java_runtime/src/classes/java/util/hash_map.rs @@ -19,7 +19,7 @@ impl HashMap { RuntimeClassProto { name: "java/util/HashMap", parent_class: Some("java/util/AbstractMap"), - interfaces: vec![], + interfaces: vec!["java/lang/Cloneable", "java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, MethodAccessFlags::PUBLIC), JavaMethodProto::new("", "(I)V", Self::init_with_capacity, MethodAccessFlags::PUBLIC), diff --git a/java_runtime/src/classes/java/util/hash_set.rs b/java_runtime/src/classes/java/util/hash_set.rs index ffa5fc20..508afabd 100644 --- a/java_runtime/src/classes/java/util/hash_set.rs +++ b/java_runtime/src/classes/java/util/hash_set.rs @@ -18,7 +18,7 @@ impl HashSet { RuntimeClassProto { name: "java/util/HashSet", parent_class: Some("java/util/AbstractSet"), - interfaces: vec![], + interfaces: vec!["java/lang/Cloneable", "java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, Default::default()), JavaMethodProto::new("", "(I)V", Self::init_with_capacity, Default::default()), diff --git a/java_runtime/src/classes/java/util/hashtable.rs b/java_runtime/src/classes/java/util/hashtable.rs index d0ed3bca..07ebe21a 100644 --- a/java_runtime/src/classes/java/util/hashtable.rs +++ b/java_runtime/src/classes/java/util/hashtable.rs @@ -22,7 +22,7 @@ impl Hashtable { RuntimeClassProto { name: "java/util/Hashtable", parent_class: Some("java/util/Dictionary"), - interfaces: vec!["java/util/Map"], + interfaces: vec!["java/util/Map", "java/lang/Cloneable", "java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, Default::default()), JavaMethodProto::new("", "(I)V", Self::init_with_capacity, Default::default()), diff --git a/java_runtime/src/classes/java/util/jar/attributes.rs b/java_runtime/src/classes/java/util/jar/attributes.rs index aa506bd0..9f20ac97 100644 --- a/java_runtime/src/classes/java/util/jar/attributes.rs +++ b/java_runtime/src/classes/java/util/jar/attributes.rs @@ -13,7 +13,7 @@ impl Attributes { RuntimeClassProto { name: "java/util/jar/Attributes", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/lang/Cloneable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, Default::default()), JavaMethodProto::new( diff --git a/java_runtime/src/classes/java/util/jar/manifest.rs b/java_runtime/src/classes/java/util/jar/manifest.rs index 7273f753..ce6a0908 100644 --- a/java_runtime/src/classes/java/util/jar/manifest.rs +++ b/java_runtime/src/classes/java/util/jar/manifest.rs @@ -16,7 +16,7 @@ impl Manifest { RuntimeClassProto { name: "java/util/jar/Manifest", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/lang/Cloneable"], methods: vec![ JavaMethodProto::new("", "(Ljava/io/InputStream;)V", Self::init, Default::default()), JavaMethodProto::new("read", "(Ljava/io/InputStream;)V", Self::read, Default::default()), diff --git a/java_runtime/src/classes/java/util/logging/level.rs b/java_runtime/src/classes/java/util/logging/level.rs index 5b2b3352..7379652f 100644 --- a/java_runtime/src/classes/java/util/logging/level.rs +++ b/java_runtime/src/classes/java/util/logging/level.rs @@ -17,7 +17,7 @@ impl Level { RuntimeClassProto { name: "java/util/logging/Level", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::clinit, MethodAccessFlags::STATIC), JavaMethodProto::new("", "(Ljava/lang/String;I)V", Self::init, MethodAccessFlags::PROTECTED), diff --git a/java_runtime/src/classes/java/util/logging/log_record.rs b/java_runtime/src/classes/java/util/logging/log_record.rs index 24aeebe7..095cafac 100644 --- a/java_runtime/src/classes/java/util/logging/log_record.rs +++ b/java_runtime/src/classes/java/util/logging/log_record.rs @@ -19,7 +19,7 @@ impl LogRecord { RuntimeClassProto { name: "java/util/logging/LogRecord", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/io/Serializable"], methods: vec![ JavaMethodProto::new( "", diff --git a/java_runtime/src/classes/java/util/vector.rs b/java_runtime/src/classes/java/util/vector.rs index 9cacb6ab..8cfd94e5 100644 --- a/java_runtime/src/classes/java/util/vector.rs +++ b/java_runtime/src/classes/java/util/vector.rs @@ -22,7 +22,7 @@ impl Vector { RuntimeClassProto { name: "java/util/Vector", parent_class: Some("java/util/AbstractList"), - interfaces: vec!["java/util/List"], + interfaces: vec!["java/util/List", "java/lang/Cloneable", "java/io/Serializable"], methods: vec![ JavaMethodProto::new("", "()V", Self::init, Default::default()), JavaMethodProto::new("", "(I)V", Self::init_with_capacity, Default::default()), diff --git a/java_runtime/src/classes/java/util/zip/zip_entry.rs b/java_runtime/src/classes/java/util/zip/zip_entry.rs index 6db0ef83..46a40ea9 100644 --- a/java_runtime/src/classes/java/util/zip/zip_entry.rs +++ b/java_runtime/src/classes/java/util/zip/zip_entry.rs @@ -13,7 +13,7 @@ impl ZipEntry { RuntimeClassProto { name: "java/util/zip/ZipEntry", parent_class: Some("java/lang/Object"), - interfaces: vec![], + interfaces: vec!["java/lang/Cloneable"], methods: vec![ JavaMethodProto::new("", "(Ljava/lang/String;)V", Self::init, Default::default()), JavaMethodProto::new("", "(Ljava/util/zip/ZipEntry;)V", Self::init_with_zip_entry, Default::default()), diff --git a/jvm/src/jvm.rs b/jvm/src/jvm.rs index 105bb4ca..f74603a8 100644 --- a/jvm/src/jvm.rs +++ b/jvm/src/jvm.rs @@ -79,7 +79,14 @@ impl Jvm { }; // load bootstrap classes - let bootstrap_classes = ["java/lang/Object", "java/lang/Runnable", "java/lang/Thread", "[B", "java/lang/Class"]; + let bootstrap_classes = [ + "java/lang/Object", + "java/lang/Runnable", + "java/lang/Thread", + "[B", + "java/io/Serializable", + "java/lang/Class", + ]; for class_name in bootstrap_classes.iter() { let class_definition = jvm.inner.bootstrap_class_loader.load_class(&jvm, class_name).await?.unwrap(); let class = Class::new(class_definition, None);