forked from Konloch/bytecode-viewer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVisitor.java
More file actions
274 lines (257 loc) · 16.7 KB
/
Copy pathVisitor.java
File metadata and controls
274 lines (257 loc) · 16.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
/*
* Janino - An embedded Java[TM] compiler
*
* Copyright (c) 2001-2010, Arno Unkrig
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
* following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.codehaus.janino;
/** Basis for the "visitor" pattern as described in "Gamma, Helm, Johnson, Vlissides: Design Patterns". */
public
class Visitor {
/**
* The union of {@link ImportVisitor}, {@link TypeDeclarationVisitor}, {@link TypeBodyDeclarationVisitor} and
* {@link AtomVisitor}.
*/
public
interface ComprehensiveVisitor
extends ImportVisitor, TypeDeclarationVisitor, TypeBodyDeclarationVisitor, BlockStatementVisitor, AtomVisitor,
ElementValueVisitor { // SUPPRESS CHECKSTYLE WrapAndIndent
}
/** The visitor for all kinds of {@link Java.CompilationUnit.ImportDeclaration}s. */
public
interface ImportVisitor {
/** Invoked by {@link Java.CompilationUnit.SingleTypeImportDeclaration#accept(Visitor.ImportVisitor)} */
void visitSingleTypeImportDeclaration(Java.CompilationUnit.SingleTypeImportDeclaration stid);
/** Invoked by {@link Java.CompilationUnit.TypeImportOnDemandDeclaration#accept(Visitor.ImportVisitor)} */
void visitTypeImportOnDemandDeclaration(Java.CompilationUnit.TypeImportOnDemandDeclaration tiodd);
/** Invoked by {@link Java.CompilationUnit.SingleStaticImportDeclaration#accept(Visitor.ImportVisitor)} */
void visitSingleStaticImportDeclaration(Java.CompilationUnit.SingleStaticImportDeclaration ssid);
/** Invoked by {@link Java.CompilationUnit.StaticImportOnDemandDeclaration#accept(Visitor.ImportVisitor)} */
void visitStaticImportOnDemandDeclaration(Java.CompilationUnit.StaticImportOnDemandDeclaration siodd);
}
/** The visitor for all kinds of {@link Java.TypeDeclaration}s. */
public
interface TypeDeclarationVisitor {
/** Invoked by {@link Java.AnonymousClassDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitAnonymousClassDeclaration(Java.AnonymousClassDeclaration acd);
/** Invoked by {@link Java.LocalClassDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitLocalClassDeclaration(Java.LocalClassDeclaration lcd);
/** Invoked by {@link Java.PackageMemberClassDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitPackageMemberClassDeclaration(Java.PackageMemberClassDeclaration pmcd);
/** Invoked by {@link Java.MemberInterfaceDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitMemberInterfaceDeclaration(Java.MemberInterfaceDeclaration mid);
/** Invoked by {@link Java.PackageMemberInterfaceDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitPackageMemberInterfaceDeclaration(Java.PackageMemberInterfaceDeclaration pmid);
/** Invoked by {@link Java.MemberClassDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitMemberClassDeclaration(Java.MemberClassDeclaration mcd);
}
/** The visitor for all kinds of {@link Java.FunctionDeclarator}s. */
public
interface FunctionDeclaratorVisitor {
/** Invoked by {@link Java.ConstructorDeclarator#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitConstructorDeclarator(Java.ConstructorDeclarator cd);
/** Invoked by {@link Java.MethodDeclarator#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitMethodDeclarator(Java.MethodDeclarator md);
}
/**
* The visitor for all kinds of {@link Java.TypeBodyDeclaration}s (declarations that may appear in the body of a
* type declaration).
*/
public
interface TypeBodyDeclarationVisitor extends FunctionDeclaratorVisitor {
/** Invoked by {@link Java.MemberInterfaceDeclaration#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitMemberInterfaceDeclaration(Java.MemberInterfaceDeclaration mid);
/** Invoked by {@link Java.MemberClassDeclaration#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitMemberClassDeclaration(Java.MemberClassDeclaration mcd);
/** Invoked by {@link Java.Initializer#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitInitializer(Java.Initializer i);
/** Invoked by {@link Java.FieldDeclaration#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitFieldDeclaration(Java.FieldDeclaration fd);
}
/** The visitor for all kinds of {@link Java.BlockStatement}s (statements that may appear with a block). */
public
interface BlockStatementVisitor {
/** Invoked by {@link Java.Initializer#accept(Visitor.BlockStatementVisitor)} */
void visitInitializer(Java.Initializer i);
/** Invoked by {@link Java.FieldDeclaration#accept(Visitor.BlockStatementVisitor)} */
void visitFieldDeclaration(Java.FieldDeclaration fd);
/** Invoked by {@link Java.LabeledStatement#accept(Visitor.BlockStatementVisitor)} */
void visitLabeledStatement(Java.LabeledStatement ls);
/** Invoked by {@link Java.Block#accept(Visitor.BlockStatementVisitor)} */
void visitBlock(Java.Block b);
/** Invoked by {@link Java.ExpressionStatement#accept(Visitor.BlockStatementVisitor)} */
void visitExpressionStatement(Java.ExpressionStatement es);
/** Invoked by {@link Java.IfStatement#accept(Visitor.BlockStatementVisitor)} */
void visitIfStatement(Java.IfStatement is);
/** Invoked by {@link Java.ForStatement#accept(Visitor.BlockStatementVisitor)} */
void visitForStatement(Java.ForStatement fs);
/** Invoked by {@link Java.ForEachStatement#accept(Visitor.BlockStatementVisitor)} */
void visitForEachStatement(Java.ForEachStatement forEachStatement);
/** Invoked by {@link Java.WhileStatement#accept(Visitor.BlockStatementVisitor)} */
void visitWhileStatement(Java.WhileStatement ws);
/** Invoked by {@link Java.TryStatement#accept(Visitor.BlockStatementVisitor)} */
void visitTryStatement(Java.TryStatement ts);
/** Invoked by {@link Java.SwitchStatement#accept(Visitor.BlockStatementVisitor)} */
void visitSwitchStatement(Java.SwitchStatement ss);
/** Invoked by {@link Java.SynchronizedStatement#accept(Visitor.BlockStatementVisitor)} */
void visitSynchronizedStatement(Java.SynchronizedStatement ss);
/** Invoked by {@link Java.DoStatement#accept(Visitor.BlockStatementVisitor)} */
void visitDoStatement(Java.DoStatement ds);
/** Invoked by {@link Java.LocalVariableDeclarationStatement#accept(Visitor.BlockStatementVisitor)} */
void visitLocalVariableDeclarationStatement(Java.LocalVariableDeclarationStatement lvds);
/** Invoked by {@link Java.ReturnStatement#accept(Visitor.BlockStatementVisitor)} */
void visitReturnStatement(Java.ReturnStatement rs);
/** Invoked by {@link Java.ThrowStatement#accept(Visitor.BlockStatementVisitor)} */
void visitThrowStatement(Java.ThrowStatement ts);
/** Invoked by {@link Java.BreakStatement#accept(Visitor.BlockStatementVisitor)} */
void visitBreakStatement(Java.BreakStatement bs);
/** Invoked by {@link Java.ContinueStatement#accept(Visitor.BlockStatementVisitor)} */
void visitContinueStatement(Java.ContinueStatement cs);
/** Invoked by {@link Java.AssertStatement#accept(Visitor.BlockStatementVisitor)} */
void visitAssertStatement(Java.AssertStatement as);
/** Invoked by {@link Java.EmptyStatement#accept(Visitor.BlockStatementVisitor)} */
void visitEmptyStatement(Java.EmptyStatement es);
/** Invoked by {@link Java.LocalClassDeclarationStatement#accept(Visitor.BlockStatementVisitor)} */
void visitLocalClassDeclarationStatement(Java.LocalClassDeclarationStatement lcds);
/** Invoked by {@link Java.AlternateConstructorInvocation#accept(Visitor.BlockStatementVisitor)} */
void visitAlternateConstructorInvocation(Java.AlternateConstructorInvocation aci);
/** Invoked by {@link Java.SuperConstructorInvocation#accept(Visitor.BlockStatementVisitor)} */
void visitSuperConstructorInvocation(Java.SuperConstructorInvocation sci);
}
/** The visitor for all kinds of {@link Java.Atom}s. */
public
interface AtomVisitor extends RvalueVisitor, TypeVisitor {
/** Invoked by {@link Java.Package#accept(Visitor.AtomVisitor)}. */
void visitPackage(Java.Package p);
}
/** The visitor for all kinds of {@link Java.Type}s. */
public
interface TypeVisitor {
/** Invoked by {@link Java.ArrayType#accept(Visitor.TypeVisitor)} */
void visitArrayType(Java.ArrayType at);
/** Invoked by {@link Java.BasicType#accept(Visitor.TypeVisitor)} */
void visitBasicType(Java.BasicType bt);
/** Invoked by {@link Java.ReferenceType#accept(Visitor.TypeVisitor)} */
void visitReferenceType(Java.ReferenceType rt);
/** Invoked by {@link Java.RvalueMemberType#accept(Visitor.TypeVisitor)} */
void visitRvalueMemberType(Java.RvalueMemberType rmt);
/** Invoked by {@link Java.SimpleType#accept(Visitor.TypeVisitor)} */
void visitSimpleType(Java.SimpleType st);
}
/** The visitor for all kinds of {@link Java.Rvalue}s. */
public
interface RvalueVisitor extends LvalueVisitor {
/** Invoked by {@link Java.ArrayLength#accept(Visitor.RvalueVisitor)} */
void visitArrayLength(Java.ArrayLength al);
/** Invoked by {@link Java.Assignment#accept(Visitor.RvalueVisitor)} */
void visitAssignment(Java.Assignment a);
/** Invoked by {@link Java.UnaryOperation#accept(Visitor.RvalueVisitor)} */
void visitUnaryOperation(Java.UnaryOperation uo);
/** Invoked by {@link Java.BinaryOperation#accept(Visitor.RvalueVisitor)} */
void visitBinaryOperation(Java.BinaryOperation bo);
/** Invoked by {@link Java.Cast#accept(Visitor.RvalueVisitor)} */
void visitCast(Java.Cast c);
/** Invoked by {@link Java.ClassLiteral#accept(Visitor.RvalueVisitor)} */
void visitClassLiteral(Java.ClassLiteral cl);
/** Invoked by {@link Java.ConditionalExpression#accept(Visitor.RvalueVisitor)} */
void visitConditionalExpression(Java.ConditionalExpression ce);
/** Invoked by {@link Java.Crement#accept(Visitor.RvalueVisitor)} */
void visitCrement(Java.Crement c);
/** Invoked by {@link Java.Instanceof#accept(Visitor.RvalueVisitor)} */
void visitInstanceof(Java.Instanceof io);
/** Invoked by {@link Java.MethodInvocation#accept(Visitor.RvalueVisitor)} */
void visitMethodInvocation(Java.MethodInvocation mi);
/** Invoked by {@link Java.SuperclassMethodInvocation#accept(Visitor.RvalueVisitor)} */
void visitSuperclassMethodInvocation(Java.SuperclassMethodInvocation smi);
/** Invoked by {@link Java.IntegerLiteral#accept(Visitor.RvalueVisitor)} */
void visitIntegerLiteral(Java.IntegerLiteral il);
/** Invoked by {@link Java.FloatingPointLiteral#accept(Visitor.RvalueVisitor)} */
void visitFloatingPointLiteral(Java.FloatingPointLiteral fpl);
/** Invoked by {@link Java.BooleanLiteral#accept(Visitor.RvalueVisitor)} */
void visitBooleanLiteral(Java.BooleanLiteral bl);
/** Invoked by {@link Java.CharacterLiteral#accept(Visitor.RvalueVisitor)} */
void visitCharacterLiteral(Java.CharacterLiteral cl);
/** Invoked by {@link Java.StringLiteral#accept(Visitor.RvalueVisitor)} */
void visitStringLiteral(Java.StringLiteral sl);
/** Invoked by {@link Java.NullLiteral#accept(Visitor.RvalueVisitor)} */
void visitNullLiteral(Java.NullLiteral nl);
/** Invoked by {@link Java.SimpleConstant#accept(Visitor.RvalueVisitor)} */
void visitSimpleConstant(Java.SimpleConstant sl);
/** Invoked by {@link Java.NewAnonymousClassInstance#accept(Visitor.RvalueVisitor)} */
void visitNewAnonymousClassInstance(Java.NewAnonymousClassInstance naci);
/** Invoked by {@link Java.NewArray#accept(Visitor.RvalueVisitor)} */
void visitNewArray(Java.NewArray na);
/** Invoked by {@link Java.NewInitializedArray#accept(Visitor.RvalueVisitor)} */
void visitNewInitializedArray(Java.NewInitializedArray nia);
/** Invoked by {@link Java.NewClassInstance#accept(Visitor.RvalueVisitor)} */
void visitNewClassInstance(Java.NewClassInstance nci);
/** Invoked by {@link Java.ParameterAccess#accept(Visitor.RvalueVisitor)} */
void visitParameterAccess(Java.ParameterAccess pa);
/** Invoked by {@link Java.QualifiedThisReference#accept(Visitor.RvalueVisitor)} */
void visitQualifiedThisReference(Java.QualifiedThisReference qtr);
/** Invoked by {@link Java.ArrayLength#accept(Visitor.RvalueVisitor)} */
void visitThisReference(Java.ThisReference tr);
}
/** The visitor for all kinds of {@link Java.Lvalue}s. */
public
interface LvalueVisitor {
/** Invoked by {@link Java.AmbiguousName#accept(Visitor.LvalueVisitor)} */
void visitAmbiguousName(Java.AmbiguousName an);
/** Invoked by {@link Java.ArrayAccessExpression#accept(Visitor.LvalueVisitor)} */
void visitArrayAccessExpression(Java.ArrayAccessExpression aae);
/** Invoked by {@link Java.FieldAccess#accept(Visitor.LvalueVisitor)} */
void visitFieldAccess(Java.FieldAccess fa);
/** Invoked by {@link Java.FieldAccessExpression#accept(Visitor.LvalueVisitor)} */
void visitFieldAccessExpression(Java.FieldAccessExpression fae);
/** Invoked by {@link Java.SuperclassFieldAccessExpression#accept(Visitor.LvalueVisitor)} */
void visitSuperclassFieldAccessExpression(Java.SuperclassFieldAccessExpression scfae);
/** Invoked by {@link Java.LocalVariableAccess#accept(Visitor.LvalueVisitor)} */
void visitLocalVariableAccess(Java.LocalVariableAccess lva);
/** Invoked by {@link Java.ParenthesizedExpression#accept(Visitor.LvalueVisitor)} */
void visitParenthesizedExpression(Java.ParenthesizedExpression pe);
}
/** The visitor for all kinds of {@link Java.Annotation}s. */
public
interface AnnotationVisitor {
/** Invoked by {@link Java.MarkerAnnotation#accept(Visitor.AnnotationVisitor)} */
void visitMarkerAnnotation(Java.MarkerAnnotation ma);
/** Invoked by {@link Java.NormalAnnotation#accept(Visitor.AnnotationVisitor)} */
void visitNormalAnnotation(Java.NormalAnnotation na);
/** Invoked by {@link Java.SingleElementAnnotation#accept(Visitor.AnnotationVisitor)} */
void visitSingleElementAnnotation(Java.SingleElementAnnotation sea);
}
/** The visitor for all kinds of {@link Java.ElementValue}s. */
public
interface ElementValueVisitor extends RvalueVisitor, AnnotationVisitor {
/** Invoked by {@link Java.ElementValueArrayInitializer#accept(Visitor.ElementValueVisitor)} */
void visitElementValueArrayInitializer(Java.ElementValueArrayInitializer evai);
}
/** The visitor for all kinds of {@link Java.TypeArgument}s. */
public
interface TypeArgumentVisitor {
/** Invoked by {@link Java.Wildcard#accept(Visitor.TypeArgumentVisitor)} */
void visitWildcard(Java.Wildcard w);
/** Invoked by {@link Java.ReferenceType#accept(Visitor.TypeArgumentVisitor)} */
void visitReferenceType(Java.ReferenceType rt);
/** Invoked by {@link Java.ArrayType#accept(Visitor.TypeArgumentVisitor)} */
void visitArrayType(Java.ArrayType arrayType);
}
}