use crate::{Version, ConstantPool, FieldInfo, MethodInfo};
use crate::classfile::types::U2;
use crate::classfile::attributes::{InnerClass, Type};
#[derive(Debug)]
pub struct ClassFile {
pub version: Version,
pub cp: ConstantPool,
pub acc_flags: U2,
pub this_class: U2,
pub super_class: U2,
pub interfaces: Vec<U2>,
pub fields: Vec<FieldInfo>,
pub methods: Vec<MethodInfo>,
pub attrs: Vec<Type>,
}
impl ClassFile {
pub fn inner_classes(&self) -> Option<Vec<InnerClass>> {
for it in self.attrs.iter() {
if let Type::InnerClasses { classes } = it {
return Some(classes.clone());
}
}
None
}
pub fn signature(&self) -> Option<usize> {
for it in self.attrs.iter() {
if let Type::Signature { signature_index} = it {
return Some(*signature_index as usize);
}
}
None
}
}