pclass_parser/classfile/
classfile.rs1use 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}