1use core::range::Range;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8pub struct JavaRoot {
9 pub items: Vec<Item>,
11}
12
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15pub enum Item {
16 Class(ClassDeclaration),
18 Interface(InterfaceDeclaration),
20 Package(PackageDeclaration),
22 Import(ImportDeclaration),
24}
25
26#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28pub struct ClassDeclaration {
29 pub name: String,
31 pub members: Vec<Member>,
33 #[serde(with = "oak_core::serde_range")]
35 pub span: Range<usize>,
36}
37
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40pub enum Member {
41 Method(MethodDeclaration),
43 Field(FieldDeclaration),
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49pub struct MethodDeclaration {
50 pub name: String,
52 pub return_type: String,
54 pub parameters: Vec<Parameter>,
56 pub body: Vec<Statement>,
58 pub is_static: bool,
60 #[serde(with = "oak_core::serde_range")]
62 pub span: Range<usize>,
63}
64
65#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67pub struct Parameter {
68 pub name: String,
70 pub r#type: String,
72}
73
74#[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#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85pub enum Statement {
86 Expression(Expression),
88 Return(Option<Expression>),
90 Block(Vec<Statement>),
92}
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
96pub enum Expression {
97 Literal(Literal),
99 Identifier(String),
101 MethodCall(MethodCall),
103 FieldAccess(FieldAccess),
105}
106
107#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
109pub enum Literal {
110 Integer(i64),
111 String(String),
112 Boolean(bool),
113}
114
115#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
117pub struct FieldAccess {
118 pub target: Box<Expression>,
120 pub name: String,
122}
123
124#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
126pub struct MethodCall {
127 pub target: Option<Box<Expression>>,
129 pub name: String,
131 pub arguments: Vec<Expression>,
133}
134
135#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
137pub struct InterfaceDeclaration {
138 pub name: String,
140 #[serde(with = "oak_core::serde_range")]
142 pub span: Range<usize>,
143}
144
145#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
147pub struct PackageDeclaration {
148 pub name: String,
150 #[serde(with = "oak_core::serde_range")]
152 pub span: Range<usize>,
153}
154
155#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
157pub struct ImportDeclaration {
158 pub path: String,
160 pub is_static: bool,
162 #[serde(with = "oak_core::serde_range")]
164 pub span: Range<usize>,
165}