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    #[serde(with = "oak_core::serde_range")]
33    pub span: Range<usize>,
34}
35
36/// 接口声明
37#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
38pub struct InterfaceDeclaration {
39    /// 接口名
40    pub name: String,
41    /// 源码位置
42    #[serde(with = "oak_core::serde_range")]
43    pub span: Range<usize>,
44}
45
46/// 包声明
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
48pub struct PackageDeclaration {
49    /// 包名
50    pub name: String,
51    /// 源码位置
52    #[serde(with = "oak_core::serde_range")]
53    pub span: Range<usize>,
54}
55
56/// 导入声明
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
58pub struct ImportDeclaration {
59    /// 导入路径
60    pub path: String,
61    /// 是否为静态导入
62    pub is_static: bool,
63    /// 源码位置
64    #[serde(with = "oak_core::serde_range")]
65    pub span: Range<usize>,
66}