View Javadoc
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 }