Skip to main content

oak_java/ast/
mod.rs

1//! Java AST definitions
2
3use core::range::Range;
4use serde::{Deserialize, Serialize};
5
6/// Java 程序的根节点
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8pub struct JavaRoot {
9    /// 编译单元中的项目
10    pub items: Vec<Item>,
11}
12
13/// Java 程序中的顶级项目
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15pub enum Item {
16    /// 类声明
17    Class(ClassDeclaration),
18    /// 接口声明
19    Interface(InterfaceDeclaration),
20    /// 包声明
21    Package(PackageDeclaration),
22    /// 导入声明
23    Import(ImportDeclaration),
24}
25
26/// 类声明
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28pub struct ClassDeclaration {
29    /// 类名
30    pub name: String,
31    /// 成员
32    pub members: Vec<Member>,
33    /// 源码位置
34    #[serde(with = "oak_core::serde_range")]
35    pub span: Range<usize>,
36}
37
38/// 类成员
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40pub enum Member {
41    /// 方法声明
42    Method(MethodDeclaration),
43    /// 字段声明 (暂不支持)
44    Field(FieldDeclaration),
45}
46
47/// 方法声明
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49pub struct MethodDeclaration {
50    /// 方法名
51    pub name: String,
52    /// 返回类型
53    pub return_type: String,
54    /// 参数列表
55    pub parameters: Vec<Parameter>,
56    /// 方法体
57    pub body: Vec<Statement>,
58    /// 是否为静态
59    pub is_static: bool,
60    /// 源码位置
61    #[serde(with = "oak_core::serde_range")]
62    pub span: Range<usize>,
63}
64
65/// 参数
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67pub struct Parameter {
68    /// 参数名
69    pub name: String,
70    /// 参数类型
71    pub r#type: String,
72}
73
74/// 字段声明
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
76pub struct FieldDeclaration {
77    pub name: String,
78    pub r#type: String,
79    #[serde(with = "oak_core::serde_range")]
80    pub span: Range<usize>,
81}
82
83/// 语句
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85pub enum Statement {
86    /// 表达式语句
87    Expression(Expression),
88    /// 返回语句
89    Return(Option<Expression>),
90    /// 块语句
91    Block(Vec<Statement>),
92}
93
94/// 表达式
95#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
96pub enum Expression {
97    /// 字面量
98    Literal(Literal),
99    /// 变量引用
100    Identifier(String),
101    /// 方法调用
102    MethodCall(MethodCall),
103    /// 字段访问
104    FieldAccess(FieldAccess),
105}
106
107/// 字面量
108#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
109pub enum Literal {
110    Integer(i64),
111    String(String),
112    Boolean(bool),
113}
114
115/// 字段访问
116#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
117pub struct FieldAccess {
118    /// 访问目标
119    pub target: Box<Expression>,
120    /// 字段名
121    pub name: String,
122}
123
124/// 方法调用
125#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
126pub struct MethodCall {
127    /// 调用目标 (可选,如 System.out)
128    pub target: Option<Box<Expression>>,
129    /// 方法名
130    pub name: String,
131    /// 参数
132    pub arguments: Vec<Expression>,
133}
134
135/// 接口声明
136#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
137pub struct InterfaceDeclaration {
138    /// 接口名
139    pub name: String,
140    /// 源码位置
141    #[serde(with = "oak_core::serde_range")]
142    pub span: Range<usize>,
143}
144
145/// 包声明
146#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
147pub struct PackageDeclaration {
148    /// 包名
149    pub name: String,
150    /// 源码位置
151    #[serde(with = "oak_core::serde_range")]
152    pub span: Range<usize>,
153}
154
155/// 导入声明
156#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
157pub struct ImportDeclaration {
158    /// 导入路径
159    pub path: String,
160    /// 是否为静态导入
161    pub is_static: bool,
162    /// 源码位置
163    #[serde(with = "oak_core::serde_range")]
164    pub span: Range<usize>,
165}