1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.themis.parser.base;
18
19 import com.github.javaparser.ast.Node;
20 import com.github.javaparser.ast.NodeList;
21 import com.github.javaparser.ast.PackageDeclaration;
22 import com.github.javaparser.ast.body.BodyDeclaration;
23 import com.github.javaparser.ast.expr.Expression;
24 import com.github.javaparser.ast.modules.ModuleDirective;
25 import com.github.javaparser.ast.stmt.Statement;
26 import com.github.javaparser.ast.type.Type;
27 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
28 import io.github.tonywasher.joceanus.tethys.api.thread.TethysUIThreadStatusReport;
29 import io.github.tonywasher.joceanus.themis.parser.base.ThemisInstance.ThemisClassInstance;
30 import io.github.tonywasher.joceanus.themis.parser.base.ThemisInstance.ThemisDeclarationInstance;
31 import io.github.tonywasher.joceanus.themis.parser.base.ThemisInstance.ThemisExpressionInstance;
32 import io.github.tonywasher.joceanus.themis.parser.base.ThemisInstance.ThemisModuleInstance;
33 import io.github.tonywasher.joceanus.themis.parser.base.ThemisInstance.ThemisNodeInstance;
34 import io.github.tonywasher.joceanus.themis.parser.base.ThemisInstance.ThemisStatementInstance;
35 import io.github.tonywasher.joceanus.themis.parser.base.ThemisInstance.ThemisTypeInstance;
36
37 import java.io.File;
38 import java.util.ArrayList;
39 import java.util.Collections;
40 import java.util.List;
41
42
43
44
45 public interface ThemisParserDef {
46
47
48
49
50
51 TethysUIThreadStatusReport getReporter();
52
53
54
55
56
57
58
59 ThemisNodeInstance parseJavaFile() throws OceanusException;
60
61
62
63
64
65
66
67
68 ThemisModuleInstance parseModuleInfo(File pInfoFile) throws OceanusException;
69
70
71
72
73
74
75 void setCurrentPackage(String pPackage);
76
77
78
79
80
81
82 void setCurrentFile(File pFile);
83
84
85
86
87
88
89 List<ThemisClassInstance> getClasses();
90
91
92
93
94
95
96
97
98 OceanusException buildException(String pMessage,
99 Node pNode);
100
101
102
103
104
105
106
107 void checkPackage(PackageDeclaration pPackage) throws OceanusException;
108
109
110
111
112
113
114
115
116 ThemisInstance registerInstance(ThemisInstance pInstance) throws OceanusException;
117
118
119
120
121
122
123
124 String registerClass(ThemisClassInstance pClass) throws OceanusException;
125
126
127
128
129
130
131
132
133 ThemisDeclarationInstance parseDeclaration(BodyDeclaration<?> pDecl) throws OceanusException;
134
135
136
137
138
139
140
141
142 default List<ThemisDeclarationInstance> parseDeclarationList(final NodeList<? extends BodyDeclaration<?>> pDeclList) throws OceanusException {
143
144 if (pDeclList == null) {
145 return Collections.emptyList();
146 }
147
148
149 final List<ThemisDeclarationInstance> myList = new ArrayList<>();
150 for (BodyDeclaration<?> myDecl : pDeclList) {
151 final ThemisDeclarationInstance myParsed = parseDeclaration(myDecl);
152 myList.add(myParsed);
153 }
154 return myList;
155 }
156
157
158
159
160
161
162
163
164 ThemisNodeInstance parseNode(Node pNode) throws OceanusException;
165
166
167
168
169
170
171
172
173 default List<ThemisNodeInstance> parseNodeList(final NodeList<? extends Node> pNodeList) throws OceanusException {
174
175 if (pNodeList == null) {
176 return Collections.emptyList();
177 }
178
179
180 final List<ThemisNodeInstance> myList = new ArrayList<>();
181 for (Node myNode : pNodeList) {
182 final ThemisNodeInstance myParsed = parseNode(myNode);
183 myList.add(myParsed);
184 }
185 return myList;
186 }
187
188
189
190
191
192
193
194
195 ThemisModifierList parseModifierList(NodeList<? extends Node> pNodeList) throws OceanusException;
196
197
198
199
200
201
202
203
204 ThemisTypeInstance parseType(Type pType) throws OceanusException;
205
206
207
208
209
210
211
212
213 default List<ThemisTypeInstance> parseTypeList(final NodeList<? extends Type> pTypeList) throws OceanusException {
214
215 if (pTypeList == null) {
216 return Collections.emptyList();
217 }
218
219
220 final List<ThemisTypeInstance> myList = new ArrayList<>();
221 for (Type myType : pTypeList) {
222 final ThemisTypeInstance myParsed = parseType(myType);
223 myList.add(myParsed);
224 }
225 return myList;
226 }
227
228
229
230
231
232
233
234
235 ThemisStatementInstance parseStatement(Statement pStatement) throws OceanusException;
236
237
238
239
240
241
242
243
244 default List<ThemisStatementInstance> parseStatementList(final NodeList<? extends Statement> pStatementList) throws OceanusException {
245
246 if (pStatementList == null) {
247 return Collections.emptyList();
248 }
249
250
251 final List<ThemisStatementInstance> myList = new ArrayList<>();
252 for (Statement myStatement : pStatementList) {
253 final ThemisStatementInstance myParsed = parseStatement(myStatement);
254 myList.add(myParsed);
255 }
256 return myList;
257 }
258
259
260
261
262
263
264
265
266 ThemisExpressionInstance parseExpression(Expression pExpression) throws OceanusException;
267
268
269
270
271
272
273
274
275 default List<ThemisExpressionInstance> parseExprList(final NodeList<? extends Expression> pExprList) throws OceanusException {
276
277 if (pExprList == null) {
278 return Collections.emptyList();
279 }
280
281
282 final List<ThemisExpressionInstance> myList = new ArrayList<>();
283 for (Expression myExpr : pExprList) {
284 final ThemisExpressionInstance myParsed = parseExpression(myExpr);
285 myList.add(myParsed);
286 }
287 return myList;
288 }
289
290
291
292
293
294
295
296
297 ThemisModuleInstance parseModule(Node pDeclaration) throws OceanusException;
298
299
300
301
302
303
304
305
306 default List<ThemisModuleInstance> parseModuleList(final NodeList<? extends ModuleDirective> pDirList) throws OceanusException {
307
308 if (pDirList == null) {
309 return Collections.emptyList();
310 }
311
312
313 final List<ThemisModuleInstance> myList = new ArrayList<>();
314 for (ModuleDirective myDir : pDirList) {
315 final ThemisModuleInstance myParsed = parseModule(myDir);
316 myList.add(myParsed);
317 }
318 return myList;
319 }
320 }