Skip to content

Commit 258cd4e

Browse files
committed
Remove duplicate array instance methods
1 parent 3d915ed commit 258cd4e

3 files changed

Lines changed: 27 additions & 51 deletions

File tree

jvm/src/array_class_instance.rs

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,15 @@
11
use alloc::{boxed::Box, vec::Vec};
22

3-
use crate::{Result, class_definition::ClassDefinition, class_instance::ClassInstance, field::Field, value::JavaValue};
3+
use crate::{Result, class_instance::ClassInstance, value::JavaValue};
44

5-
#[async_trait::async_trait]
65
pub trait ArrayClassInstance: ClassInstance {
7-
fn class_definition(&self) -> Box<dyn ClassDefinition>;
8-
fn destroy(self: Box<Self>);
9-
fn identity(&self) -> usize;
10-
fn shallow_clone(&self) -> Result<Box<dyn ClassInstance>>;
11-
fn equals(&self, other: &dyn ClassInstance) -> Result<bool>;
126
fn store(&mut self, offset: usize, values: Box<[JavaValue]>) -> Result<()>;
137
fn load(&self, offset: usize, count: usize) -> Result<Vec<JavaValue>>;
148
fn raw_buffer(&self) -> Result<Box<dyn ArrayRawBuffer>>;
159
fn raw_buffer_mut(&mut self) -> Result<Box<dyn ArrayRawBufferMut>>;
1610
fn length(&self) -> usize;
1711
}
1812

19-
#[async_trait::async_trait]
20-
impl<T: ArrayClassInstance> ClassInstance for T {
21-
fn destroy(self: Box<Self>) {
22-
ArrayClassInstance::destroy(self)
23-
}
24-
25-
fn identity(&self) -> usize {
26-
ArrayClassInstance::identity(self)
27-
}
28-
29-
fn shallow_clone(&self) -> Result<Box<dyn ClassInstance>> {
30-
ArrayClassInstance::shallow_clone(self)
31-
}
32-
33-
fn class_definition(&self) -> Box<dyn ClassDefinition> {
34-
ArrayClassInstance::class_definition(self)
35-
}
36-
37-
fn equals(&self, other: &dyn ClassInstance) -> Result<bool> {
38-
ArrayClassInstance::equals(self, other)
39-
}
40-
fn as_array_instance(&self) -> Option<&dyn ArrayClassInstance> {
41-
Some(self)
42-
}
43-
44-
fn as_array_instance_mut(&mut self) -> Option<&mut dyn ArrayClassInstance> {
45-
Some(self)
46-
}
47-
48-
fn get_field(&self, _field: &dyn Field) -> Result<JavaValue> {
49-
panic!("Array classes do not have fields")
50-
}
51-
52-
fn put_field(&mut self, _field: &dyn Field, _value: JavaValue) -> Result<()> {
53-
panic!("Array classes do not have fields")
54-
}
55-
}
56-
5713
pub trait ArrayRawBuffer: Send {
5814
fn read(&self, offset: usize, buffer: &mut [u8]) -> Result<()>;
5915
}

jvm/src/jvm.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use java_constants::{ClassAccessFlags, FieldAccessFlags, MethodAccessFlags};
1515

1616
use crate::{
1717
Result,
18-
array_class_instance::{ArrayClassInstance, ArrayRawBuffer, ArrayRawBufferMut},
18+
array_class_instance::{ArrayRawBuffer, ArrayRawBufferMut},
1919
class_definition::ClassDefinition,
2020
class_instance::ClassInstance,
2121
class_loader::{
@@ -451,7 +451,7 @@ impl Jvm {
451451
let array = array.as_array_instance();
452452

453453
if let Some(array) = array {
454-
let class = ArrayClassInstance::class_definition(array);
454+
let class = array.class_definition();
455455

456456
let type_name = &class.name()[1..]; // TODO can we store JavaType on class?
457457

jvm_rust/src/array_class_instance.rs

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

77
use parking_lot::RwLock;
88

9-
use jvm::{ArrayClassDefinition, ArrayClassInstance, ArrayRawBuffer, ArrayRawBufferMut, ClassDefinition, ClassInstance, JavaType, JavaValue, Result};
9+
use jvm::{
10+
ArrayClassDefinition, ArrayClassInstance, ArrayRawBuffer, ArrayRawBufferMut, ClassDefinition, ClassInstance, Field, JavaType, JavaValue, Result,
11+
};
1012

1113
use crate::array_class_definition::ArrayClassDefinitionImpl;
1214

@@ -112,7 +114,9 @@ impl ArrayClassInstanceImpl {
112114
}
113115

114116
#[async_trait::async_trait]
115-
impl ArrayClassInstance for ArrayClassInstanceImpl {
117+
impl ClassInstance for ArrayClassInstanceImpl {
118+
fn destroy(self: Box<Self>) {}
119+
116120
fn identity(&self) -> usize {
117121
Arc::as_ptr(&self.inner) as usize
118122
}
@@ -132,8 +136,6 @@ impl ArrayClassInstance for ArrayClassInstanceImpl {
132136
self.inner.class.clone()
133137
}
134138

135-
fn destroy(self: Box<Self>) {}
136-
137139
fn equals(&self, other: &dyn ClassInstance) -> Result<bool> {
138140
let other = other.as_any().downcast_ref::<ArrayClassInstanceImpl>();
139141
if other.is_none() {
@@ -144,6 +146,24 @@ impl ArrayClassInstance for ArrayClassInstanceImpl {
144146
Ok(Arc::ptr_eq(&self.inner, &other.inner))
145147
}
146148

149+
fn as_array_instance(&self) -> Option<&dyn ArrayClassInstance> {
150+
Some(self)
151+
}
152+
153+
fn as_array_instance_mut(&mut self) -> Option<&mut dyn ArrayClassInstance> {
154+
Some(self)
155+
}
156+
157+
fn get_field(&self, _field: &dyn Field) -> Result<JavaValue> {
158+
panic!("Array classes do not have fields")
159+
}
160+
161+
fn put_field(&mut self, _field: &dyn Field, _value: JavaValue) -> Result<()> {
162+
panic!("Array classes do not have fields")
163+
}
164+
}
165+
166+
impl ArrayClassInstance for ArrayClassInstanceImpl {
147167
fn store(&mut self, offset: usize, values: Box<[JavaValue]>) -> Result<()> {
148168
match &mut *self.inner.elements.write() {
149169
ArrayElements::Primitive(x) => {

0 commit comments

Comments
 (0)