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       * @since 6.0
28       */
29      void visitAnnotation(Annotations obj);
30  
31      /**
32       * @since 6.0
33       */
34      void visitAnnotationDefault(AnnotationDefault obj);
35  
36      /**
37       * @since 6.0
38       */
39      void visitAnnotationEntry(AnnotationEntry obj);
40  
41      /**
42       * @since 6.0
43       */
44      void visitBootstrapMethods(BootstrapMethods obj);
45  
46      void visitCode(Code obj);
47  
48      void visitCodeException(CodeException obj);
49  
50      void visitConstantClass(ConstantClass obj);
51  
52      void visitConstantDouble(ConstantDouble obj);
53  
54      /**
55       * @since 6.3
56       */
57      default void visitConstantDynamic(final ConstantDynamic constantDynamic) {
58          // empty
59      }
60  
61      void visitConstantFieldref(ConstantFieldref obj);
62  
63      void visitConstantFloat(ConstantFloat obj);
64  
65      void visitConstantInteger(ConstantInteger obj);
66  
67      void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj);
68  
69      void visitConstantInvokeDynamic(ConstantInvokeDynamic obj);
70  
71      void visitConstantLong(ConstantLong obj);
72  
73      /**
74       * @since 6.0
75       */
76      void visitConstantMethodHandle(ConstantMethodHandle obj);
77  
78      void visitConstantMethodref(ConstantMethodref obj);
79  
80      /**
81       * @since 6.0
82       */
83      void visitConstantMethodType(ConstantMethodType obj);
84  
85      /**
86       * @since 6.1
87       */
88      void visitConstantModule(ConstantModule constantModule);
89  
90      void visitConstantNameAndType(ConstantNameAndType obj);
91  
92      /**
93       * @since 6.1
94       */
95      void visitConstantPackage(ConstantPackage constantPackage);
96  
97      void visitConstantPool(ConstantPool obj);
98  
99      void visitConstantString(ConstantString obj);
100 
101     void visitConstantUtf8(ConstantUtf8 obj);
102 
103     void visitConstantValue(ConstantValue obj);
104 
105     void visitDeprecated(Deprecated obj);
106 
107     /**
108      * @since 6.0
109      */
110     void visitEnclosingMethod(EnclosingMethod obj);
111 
112     void visitExceptionTable(ExceptionTable obj);
113 
114     void visitField(Field obj);
115 
116     void visitInnerClass(InnerClass obj);
117 
118     void visitInnerClasses(InnerClasses obj);
119 
120     void visitJavaClass(JavaClass obj);
121 
122     void visitLineNumber(LineNumber obj);
123 
124     void visitLineNumberTable(LineNumberTable obj);
125 
126     void visitLocalVariable(LocalVariable obj);
127 
128     void visitLocalVariableTable(LocalVariableTable obj);
129 
130     /**
131      * @since 6.0
132      */
133     void visitLocalVariableTypeTable(LocalVariableTypeTable obj);
134 
135     void visitMethod(Method obj);
136 
137     /**
138      * @since 6.4.0
139      */
140     default void visitMethodParameter(final MethodParameter obj) {
141         // empty
142     }
143 
144     /**
145      * @since 6.0
146      */
147     void visitMethodParameters(MethodParameters obj);
148 
149     /**
150      * @since 6.4.0
151      */
152     default void visitModule(final Module constantModule) {
153         // empty
154     }
155 
156     /**
157      * @since 6.4.0
158      */
159     default void visitModuleExports(final ModuleExports constantModule) {
160         // empty
161     }
162 
163     /**
164      * @since 6.4.0
165      */
166     default void visitModuleMainClass(final ModuleMainClass obj) {
167         // empty
168     }
169 
170     /**
171      * @since 6.4.0
172      */
173     default void visitModuleOpens(final ModuleOpens constantModule) {
174         // empty
175     }
176 
177     /**
178      * @since 6.4.0
179      */
180     default void visitModulePackages(final ModulePackages constantModule) {
181         // empty
182     }
183 
184     /**
185      * @since 6.4.0
186      */
187     default void visitModuleProvides(final ModuleProvides constantModule) {
188         // empty
189     }
190 
191     /**
192      * @since 6.4.0
193      */
194     default void visitModuleRequires(final ModuleRequires constantModule) {
195         // empty
196     }
197 
198     /**
199      * @since 6.4.0
200      */
201     default void visitNestHost(final NestHost obj) {
202         // empty
203     }
204 
205     /**
206      * @since 6.4.0
207      */
208     default void visitNestMembers(final NestMembers obj) {
209         // empty
210     }
211 
212     /**
213      * @since 6.0
214      */
215     void visitParameterAnnotation(ParameterAnnotations obj);
216 
217     /**
218      * @since 6.0
219      */
220     void visitParameterAnnotationEntry(ParameterAnnotationEntry obj);
221 
222     /**
223      * Visits a {@link Record} object.
224      *
225      * @param obj Record to visit
226      * @since 6.9.0
227      */
228     default void visitRecord(final Record obj) {
229         // empty
230     }
231 
232     /**
233      * Visits a {@link RecordComponentInfo} object.
234      *
235      * @param record component to visit
236      * @since 6.9.0
237      */
238     default void visitRecordComponent(final RecordComponentInfo record) {
239      // noop
240     }
241 
242     void visitSignature(Signature obj);
243 
244     void visitSourceFile(SourceFile obj);
245 
246     void visitStackMap(StackMap obj);
247 
248     void visitStackMapEntry(StackMapEntry obj);
249 
250     /**
251      * Visits a {@link StackMapType} object.
252      *
253      * @param obj object to visit
254      * @since 6.8.0
255      */
256     default void visitStackMapType(final StackMapType obj) {
257       // empty
258     }
259 
260     void visitSynthetic(Synthetic obj);
261 
262     void visitUnknown(Unknown obj);
263 
264 }