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