1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * https://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.bcel.classfile;
20
21 /**
22 * Interface to make use of the Visitor pattern programming style. I.e. a class that implements this interface can
23 * traverse the contents of a Java class just by calling the 'accept' method which all classes have.
24 */
25 public interface Visitor {
26
27 /**
28 * Visits an Annotations attribute.
29 *
30 * @param obj the attribute.
31 * @since 6.0
32 */
33 void visitAnnotation(Annotations obj);
34
35 /**
36 * Visits an AnnotationDefault attribute.
37 *
38 * @param obj the attribute.
39 * @since 6.0
40 */
41 void visitAnnotationDefault(AnnotationDefault obj);
42
43 /**
44 * Visits an AnnotationEntry.
45 *
46 * @param obj the annotation entry.
47 * @since 6.0
48 */
49 void visitAnnotationEntry(AnnotationEntry obj);
50
51 /**
52 * Visits a BootstrapMethods attribute.
53 *
54 * @param obj the attribute.
55 * @since 6.0
56 */
57 void visitBootstrapMethods(BootstrapMethods obj);
58
59 /**
60 * Visits a Code attribute.
61 *
62 * @param obj the attribute.
63 */
64 void visitCode(Code obj);
65
66 /**
67 * Visits a CodeException.
68 *
69 * @param obj the exception.
70 */
71 void visitCodeException(CodeException obj);
72
73 /**
74 * Visits a ConstantClass.
75 *
76 * @param obj the constant.
77 */
78 void visitConstantClass(ConstantClass obj);
79
80 /**
81 * Visits a ConstantDouble.
82 *
83 * @param obj the constant.
84 */
85 void visitConstantDouble(ConstantDouble obj);
86
87 /**
88 * Visits a ConstantDynamic.
89 *
90 * @param constantDynamic the constant.
91 * @since 6.3
92 */
93 default void visitConstantDynamic(final ConstantDynamic constantDynamic) {
94 // empty
95 }
96
97 /**
98 * Visits a ConstantFieldref.
99 *
100 * @param obj the constant.
101 */
102 void visitConstantFieldref(ConstantFieldref obj);
103
104 /**
105 * Visits a ConstantFloat.
106 *
107 * @param obj the constant.
108 */
109 void visitConstantFloat(ConstantFloat obj);
110
111 /**
112 * Visits a ConstantInteger.
113 *
114 * @param obj the constant.
115 */
116 void visitConstantInteger(ConstantInteger obj);
117
118 /**
119 * Visits a ConstantInterfaceMethodref.
120 *
121 * @param obj the constant.
122 */
123 void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj);
124
125 /**
126 * Visits a ConstantInvokeDynamic.
127 *
128 * @param obj the constant.
129 */
130 void visitConstantInvokeDynamic(ConstantInvokeDynamic obj);
131
132 /**
133 * Visits a ConstantLong.
134 *
135 * @param obj the constant.
136 */
137 void visitConstantLong(ConstantLong obj);
138
139 /**
140 * Visits a ConstantMethodHandle.
141 *
142 * @param obj the constant.
143 * @since 6.0
144 */
145 void visitConstantMethodHandle(ConstantMethodHandle obj);
146
147 /**
148 * Visits a ConstantMethodref.
149 *
150 * @param obj the constant.
151 */
152 void visitConstantMethodref(ConstantMethodref obj);
153
154 /**
155 * Visits a ConstantMethodType.
156 *
157 * @param obj the constant.
158 * @since 6.0
159 */
160 void visitConstantMethodType(ConstantMethodType obj);
161
162 /**
163 * Visits a ConstantModule.
164 *
165 * @param constantModule the constant.
166 * @since 6.1
167 */
168 void visitConstantModule(ConstantModule constantModule);
169
170 /**
171 * Visits a ConstantNameAndType.
172 *
173 * @param obj the constant.
174 */
175 void visitConstantNameAndType(ConstantNameAndType obj);
176
177 /**
178 * Visits a ConstantPackage.
179 *
180 * @param constantPackage the constant.
181 * @since 6.1
182 */
183 void visitConstantPackage(ConstantPackage constantPackage);
184
185 /**
186 * Visits a ConstantPool.
187 *
188 * @param obj the constant pool.
189 */
190 void visitConstantPool(ConstantPool obj);
191
192 /**
193 * Visits a ConstantString.
194 *
195 * @param obj the constant.
196 */
197 void visitConstantString(ConstantString obj);
198
199 /**
200 * Visits a ConstantUtf8.
201 *
202 * @param obj the constant.
203 */
204 void visitConstantUtf8(ConstantUtf8 obj);
205
206 /**
207 * Visits a ConstantValue attribute.
208 *
209 * @param obj the attribute.
210 */
211 void visitConstantValue(ConstantValue obj);
212
213 /**
214 * Visits a Deprecated attribute.
215 *
216 * @param obj the attribute.
217 */
218 void visitDeprecated(Deprecated obj);
219
220 /**
221 * Visits an EnclosingMethod attribute.
222 *
223 * @param obj the attribute.
224 * @since 6.0
225 */
226 void visitEnclosingMethod(EnclosingMethod obj);
227
228 /**
229 * Visits an ExceptionTable attribute.
230 *
231 * @param obj the attribute.
232 */
233 void visitExceptionTable(ExceptionTable obj);
234
235 /**
236 * Visits a Field.
237 *
238 * @param obj the field.
239 */
240 void visitField(Field obj);
241
242 /**
243 * Visits an InnerClass.
244 *
245 * @param obj the inner class.
246 */
247 void visitInnerClass(InnerClass obj);
248
249 /**
250 * Visits an InnerClasses attribute.
251 *
252 * @param obj the attribute.
253 */
254 void visitInnerClasses(InnerClasses obj);
255
256 /**
257 * Visits a JavaClass.
258 *
259 * @param obj the class.
260 */
261 void visitJavaClass(JavaClass obj);
262
263 /**
264 * Visits a LineNumber.
265 *
266 * @param obj the line number.
267 */
268 void visitLineNumber(LineNumber obj);
269
270 /**
271 * Visits a LineNumberTable attribute.
272 *
273 * @param obj the attribute.
274 */
275 void visitLineNumberTable(LineNumberTable obj);
276
277 /**
278 * Visits a LocalVariable.
279 *
280 * @param obj the local variable.
281 */
282 void visitLocalVariable(LocalVariable obj);
283
284 /**
285 * Visits a LocalVariableTable attribute.
286 *
287 * @param obj the attribute.
288 */
289 void visitLocalVariableTable(LocalVariableTable obj);
290
291 /**
292 * Visits a LocalVariableTypeTable attribute.
293 *
294 * @param obj the attribute.
295 * @since 6.0
296 */
297 void visitLocalVariableTypeTable(LocalVariableTypeTable obj);
298
299 /**
300 * Visits a Method.
301 *
302 * @param obj the method.
303 */
304 void visitMethod(Method obj);
305
306 /**
307 * Visits a MethodParameter.
308 *
309 * @param obj the method parameter.
310 * @since 6.4.0
311 */
312 default void visitMethodParameter(final MethodParameter obj) {
313 // empty
314 }
315
316 /**
317 * Visits a MethodParameters attribute.
318 *
319 * @param obj the attribute.
320 * @since 6.0
321 */
322 void visitMethodParameters(MethodParameters obj);
323
324 /**
325 * Visits a Module attribute.
326 *
327 * @param constantModule the module.
328 * @since 6.4.0
329 */
330 default void visitModule(final Module constantModule) {
331 // empty
332 }
333
334 /**
335 * Visits a ModuleExports entry.
336 *
337 * @param constantModule the module exports.
338 * @since 6.4.0
339 */
340 default void visitModuleExports(final ModuleExports constantModule) {
341 // empty
342 }
343
344 /**
345 * Visits a ModuleMainClass attribute.
346 *
347 * @param obj the attribute.
348 * @since 6.4.0
349 */
350 default void visitModuleMainClass(final ModuleMainClass obj) {
351 // empty
352 }
353
354 /**
355 * Visits a ModuleOpens entry.
356 *
357 * @param constantModule the module opens.
358 * @since 6.4.0
359 */
360 default void visitModuleOpens(final ModuleOpens constantModule) {
361 // empty
362 }
363
364 /**
365 * Visits a ModulePackages attribute.
366 *
367 * @param constantModule the module packages.
368 * @since 6.4.0
369 */
370 default void visitModulePackages(final ModulePackages constantModule) {
371 // empty
372 }
373
374 /**
375 * Visits a ModuleProvides entry.
376 *
377 * @param constantModule the module provides.
378 * @since 6.4.0
379 */
380 default void visitModuleProvides(final ModuleProvides constantModule) {
381 // empty
382 }
383
384 /**
385 * Visits a ModuleRequires entry.
386 *
387 * @param constantModule the module requires.
388 * @since 6.4.0
389 */
390 default void visitModuleRequires(final ModuleRequires constantModule) {
391 // empty
392 }
393
394 /**
395 * Visits a NestHost attribute.
396 *
397 * @param obj the attribute.
398 * @since 6.4.0
399 */
400 default void visitNestHost(final NestHost obj) {
401 // empty
402 }
403
404 /**
405 * Visits a NestMembers attribute.
406 *
407 * @param obj the attribute.
408 * @since 6.4.0
409 */
410 default void visitNestMembers(final NestMembers obj) {
411 // empty
412 }
413
414 /**
415 * Visits a ParameterAnnotations attribute.
416 *
417 * @param obj the attribute.
418 * @since 6.0
419 */
420 void visitParameterAnnotation(ParameterAnnotations obj);
421
422 /**
423 * Visits a ParameterAnnotationEntry.
424 *
425 * @param obj the annotation entry.
426 * @since 6.0
427 */
428 void visitParameterAnnotationEntry(ParameterAnnotationEntry obj);
429
430 /**
431 * Visits a {@link Record} object.
432 *
433 * @param obj Record to visit.
434 * @since 6.9.0
435 */
436 default void visitRecord(final Record obj) {
437 // empty
438 }
439
440 /**
441 * Visits a {@link RecordComponentInfo} object.
442 *
443 * @param record component to visit.
444 * @since 6.9.0
445 */
446 default void visitRecordComponent(final RecordComponentInfo record) {
447 // noop
448 }
449
450 /**
451 * Visits a Signature attribute.
452 *
453 * @param obj the attribute.
454 */
455 void visitSignature(Signature obj);
456
457 /**
458 * Visits a SourceFile attribute.
459 *
460 * @param obj the attribute.
461 */
462 void visitSourceFile(SourceFile obj);
463
464 /**
465 * Visits a StackMap attribute.
466 *
467 * @param obj the attribute.
468 */
469 void visitStackMap(StackMap obj);
470
471 /**
472 * Visits a StackMapEntry.
473 *
474 * @param obj the entry.
475 */
476 void visitStackMapEntry(StackMapEntry obj);
477
478 /**
479 * Visits a {@link StackMapType} object.
480 *
481 * @param obj object to visit.
482 * @since 6.8.0
483 */
484 default void visitStackMapType(final StackMapType obj) {
485 // empty
486 }
487
488 /**
489 * Visits a Synthetic attribute.
490 *
491 * @param obj the attribute.
492 */
493 void visitSynthetic(Synthetic obj);
494
495 /**
496 * Visits an Unknown attribute.
497 *
498 * @param obj the attribute.
499 */
500 void visitUnknown(Unknown obj);
501
502 }