pub struct ClassShell {
pub minor_version: u16,
pub major_version: u16,
pub constant_pool: ConstantPool,
pub access_flags: u16,
pub this_class: u16,
pub super_class: u16,
pub interfaces: Vec<u16>,
pub fields: Vec<FieldShell>,
pub methods: Vec<MethodShell>,
pub attributes: Vec<AttributeShell>,
pub origin: Origin,
}Expand description
The bounded structural classfile read, before any shell index is checked.
Fields§
§minor_version: u16Classfile minor version.
major_version: u16Classfile major version.
constant_pool: ConstantPoolStructurally decoded constant pool.
access_flags: u16Raw JVM class access flags.
this_class: u16Raw constant-pool index of this class.
super_class: u16Raw constant-pool index of the superclass, or zero for java/lang/Object.
interfaces: Vec<u16>Raw constant-pool indices of directly implemented interfaces.
fields: Vec<FieldShell>Field declarations in classfile order.
methods: Vec<MethodShell>Method declarations in classfile order.
attributes: Vec<AttributeShell>Class attributes in classfile order.
origin: OriginSource span covering the whole shell.
Implementations§
Source§impl ClassShell
impl ClassShell
Sourcepub fn decode(
bytes: &[u8],
allocation_budget: usize,
budget: ShellBudget,
codec: CodecId,
source: SourceId,
) -> Result<Self, ShellError>
pub fn decode( bytes: &[u8], allocation_budget: usize, budget: ShellBudget, codec: CodecId, source: SourceId, ) -> Result<Self, ShellError>
Structurally decode a complete classfile without validating shell indices.
Sourcepub fn validate(&self) -> Result<ValidatedClassShell, ShellError>
pub fn validate(&self) -> Result<ValidatedClassShell, ShellError>
Validate every raw shell index and return a separate typed projection.
Sourcepub fn encode(&self, allocation_budget: usize) -> Result<Vec<u8>, ShellError>
pub fn encode(&self, allocation_budget: usize) -> Result<Vec<u8>, ShellError>
Encode the complete shell, retaining all attribute bytes and table order exactly.
Sourcepub fn replace_method_code(
&mut self,
method_index: usize,
code: Vec<u8>,
allocation_budget: usize,
) -> Result<EditReport, ShellError>
pub fn replace_method_code( &mut self, method_index: usize, code: Vec<u8>, allocation_budget: usize, ) -> Result<EditReport, ShellError>
Replace one method’s Code byte array without disturbing unrelated raw attributes.
The selected payload is decoded and re-encoded structurally, so malformed code metadata or an edit that invalidates exception ranges is rejected. The report precisely distinguishes a same-size content edit from an edit that shifts following byte positions.
Trait Implementations§
Source§impl Clone for ClassShell
impl Clone for ClassShell
Source§fn clone(&self) -> ClassShell
fn clone(&self) -> ClassShell
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more