Skip to content

Commit 58507c7

Browse files
committed
Remove unrequired method
1 parent 6f40f90 commit 58507c7

File tree

5 files changed

+24
-31
lines changed

5 files changed

+24
-31
lines changed

jvm/src/field.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ use core::fmt::Debug;
33

44
use java_constants::FieldAccessFlags;
55

6-
use crate::{as_any::AsAny, r#type::JavaType};
6+
use crate::as_any::AsAny;
77

88
pub trait Field: Sync + Send + AsAny + Debug {
99
fn name(&self) -> String;
1010
fn descriptor(&self) -> String;
11-
fn r#type(&self) -> JavaType;
1211
fn access_flags(&self) -> FieldAccessFlags;
1312
}

jvm/src/garbage_collector.rs

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use bytemuck::cast_slice;
55
use hashbrown::{hash_set::Entry, HashMap, HashSet};
66
use parking_lot::Mutex;
77

8-
use crate::{thread::JvmThread, ClassInstance, JavaType, JavaValue, Jvm};
8+
use crate::{thread::JvmThread, ClassInstance, JavaValue, Jvm};
99

1010
// XXX java/util/Vector, java/util/HashMap internal..
1111
type RustVector = Arc<Mutex<Vec<Box<dyn ClassInstance>>>>;
@@ -59,29 +59,27 @@ fn find_reachable_objects(jvm: &Jvm, object: &Box<dyn ClassInstance>, reachable_
5959

6060
let fields = object.class_definition().fields();
6161
for field in fields {
62-
match field.r#type() {
63-
JavaType::Class(_) => {
64-
let value = object.get_field(&*field).unwrap();
65-
if let JavaValue::Object(Some(value)) = value {
66-
find_reachable_objects(jvm, &value, reachable_objects);
67-
}
62+
let descriptor = field.descriptor();
63+
64+
if descriptor.starts_with("L") && descriptor.ends_with(";") {
65+
let value = object.get_field(&*field).unwrap();
66+
if let JavaValue::Object(Some(value)) = value {
67+
find_reachable_objects(jvm, &value, reachable_objects);
6868
}
69-
JavaType::Array(_) => {
70-
let value = object.get_field(&*field).unwrap();
71-
if let JavaValue::Object(Some(value)) = value {
72-
reachable_objects.insert(value.clone());
73-
74-
let array = value.as_array_instance().unwrap();
75-
let values = array.load(0, array.length()).unwrap();
76-
77-
for value in values {
78-
if let JavaValue::Object(Some(value)) = value {
79-
find_reachable_objects(jvm, &value, reachable_objects);
80-
}
69+
} else if descriptor.starts_with("[") {
70+
let value = object.get_field(&*field).unwrap();
71+
if let JavaValue::Object(Some(value)) = value {
72+
reachable_objects.insert(value.clone());
73+
74+
let array = value.as_array_instance().unwrap();
75+
let values = array.load(0, array.length()).unwrap();
76+
77+
for value in values {
78+
if let JavaValue::Object(Some(value)) = value {
79+
find_reachable_objects(jvm, &value, reachable_objects);
8180
}
8281
}
8382
}
84-
_ => {}
8583
}
8684
}
8785
}

jvm_rust/src/class_definition.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use parking_lot::RwLock;
1515
use classfile::ClassInfo;
1616
use java_class_proto::JavaClassProto;
1717
use java_constants::{FieldAccessFlags, MethodAccessFlags};
18-
use jvm::{ClassDefinition, ClassInstance, Field, JavaValue, Method, Result};
18+
use jvm::{ClassDefinition, ClassInstance, Field, JavaType, JavaValue, Method, Result};
1919

2020
use crate::{class_instance::ClassInstanceImpl, field::FieldImpl, method::MethodImpl};
2121

@@ -124,7 +124,7 @@ impl ClassDefinition for ClassDefinitionImpl {
124124
if let Some(x) = value {
125125
Ok(x.clone())
126126
} else {
127-
Ok(field.r#type().default())
127+
Ok(JavaType::parse(&field.descriptor()).default())
128128
}
129129
}
130130

jvm_rust/src/class_instance.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use core::{
66

77
use parking_lot::RwLock;
88

9-
use jvm::{ClassDefinition, ClassInstance, Field, JavaValue, Result};
9+
use jvm::{ClassDefinition, ClassInstance, Field, JavaType, JavaValue, Result};
1010

1111
use crate::{class_definition::ClassDefinitionImpl, FieldImpl};
1212

@@ -58,7 +58,7 @@ impl ClassInstance for ClassInstanceImpl {
5858
if let Some(x) = value {
5959
Ok(x.clone())
6060
} else {
61-
Ok(field.r#type().default())
61+
Ok(JavaType::parse(&field.descriptor()).default())
6262
}
6363
}
6464

jvm_rust/src/field.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use alloc::{
66
use classfile::FieldInfo;
77
use java_class_proto::JavaFieldProto;
88
use java_constants::FieldAccessFlags;
9-
use jvm::{Field, JavaType};
9+
use jvm::Field;
1010

1111
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd)]
1212
struct FieldInner {
@@ -58,8 +58,4 @@ impl Field for FieldImpl {
5858
fn access_flags(&self) -> FieldAccessFlags {
5959
self.inner.access_flags
6060
}
61-
62-
fn r#type(&self) -> JavaType {
63-
JavaType::parse(&self.inner.descriptor)
64-
}
6561
}

0 commit comments

Comments
 (0)