use crate::class_reader::{AttributeInfo, ExceptionTableEntry};
use crate::class_reader::{LineNumber, LocalVariable, MethodParameter};
use crate::constant_pool::CpInfo;
use crate::insn::InsnList;
use crate::insn::{AbstractInsnNode, TryCatchBlockNode};
#[derive(Debug, Clone)]
pub struct ClassNode {
pub minor_version: u16,
pub major_version: u16,
pub access_flags: u16,
pub constant_pool: Vec<CpInfo>,
pub this_class: u16,
pub name: String,
pub super_name: Option<String>,
pub source_file: Option<String>,
pub interfaces: Vec<String>,
pub interface_indices: Vec<u16>,
pub fields: Vec<FieldNode>,
pub methods: Vec<MethodNode>,
pub attributes: Vec<AttributeInfo>,
pub inner_classes: Vec<InnerClassNode>,
pub outer_class: String,
pub module: Option<ModuleNode>,
pub permitted_subclasses: Vec<String>,
pub record_components: Vec<RecordComponentNode>,
}
#[derive(Debug, Clone)]
pub struct InnerClassNode {
pub name: String,
pub outer_name: Option<String>,
pub inner_name: Option<String>,
pub access_flags: u16,
}
#[derive(Debug, Clone)]
pub struct ModuleNode {
pub name: String,
pub access_flags: u16,
pub version: Option<String>,
pub requires: Vec<ModuleRequireNode>,
pub exports: Vec<ModuleExportNode>,
pub opens: Vec<ModuleOpenNode>,
pub uses: Vec<String>,
pub provides: Vec<ModuleProvideNode>,
pub packages: Vec<String>,
pub main_class: Option<String>,
}
#[derive(Debug, Clone)]
pub struct ModuleRequireNode {
pub module: String,
pub access_flags: u16,
pub version: Option<String>,
}
#[derive(Debug, Clone)]
pub struct ModuleExportNode {
pub package: String,
pub access_flags: u16,
pub modules: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct ModuleOpenNode {
pub package: String,
pub access_flags: u16,
pub modules: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct ModuleProvideNode {
pub service: String,
pub providers: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct FieldNode {
pub access_flags: u16,
pub name: String,
pub descriptor: String,
pub attributes: Vec<AttributeInfo>,
}
#[derive(Debug, Clone)]
pub struct MethodNode {
pub access_flags: u16,
pub name: String,
pub descriptor: String,
pub has_code: bool,
pub max_stack: u16,
pub max_locals: u16,
pub instructions: InsnList,
pub instruction_offsets: Vec<u16>,
pub insn_nodes: Vec<AbstractInsnNode>,
pub exception_table: Vec<ExceptionTableEntry>,
pub try_catch_blocks: Vec<TryCatchBlockNode>,
pub line_numbers: Vec<LineNumber>,
pub local_variables: Vec<LocalVariable>,
pub method_parameters: Vec<MethodParameter>,
pub exceptions: Vec<String>,
pub signature: Option<String>,
pub code_attributes: Vec<AttributeInfo>,
pub attributes: Vec<AttributeInfo>,
}
#[derive(Debug, Clone)]
pub struct RecordComponentNode {
pub name: String,
pub descriptor: String,
pub attributes: Vec<AttributeInfo>,
}