pclass_parser/classfile/
classfile.rs

1use crate::{Version, ConstantPool, FieldInfo, MethodInfo};
2use crate::classfile::types::U2;
3use crate::classfile::attributes::{InnerClass, Type};
4
5#[derive(Debug)]
6pub struct ClassFile {
7    pub version: Version,
8    pub cp: ConstantPool,
9    pub acc_flags: U2,
10    pub this_class: U2,
11    pub super_class: U2,
12    pub interfaces: Vec<U2>,
13    pub fields: Vec<FieldInfo>,
14    pub methods: Vec<MethodInfo>,
15    pub attrs: Vec<Type>,
16}
17
18impl ClassFile {
19    pub fn inner_classes(&self) -> Option<Vec<InnerClass>> {
20        for it in self.attrs.iter() {
21            if let Type::InnerClasses { classes } = it {
22                return Some(classes.clone());
23            }
24        }
25
26        None
27    }
28
29    pub fn signature(&self) -> Option<usize> {
30        for it in self.attrs.iter() {
31            if let Type::Signature { signature_index} = it {
32                return Some(*signature_index as usize);
33            }
34        }
35
36        None
37    }
38}