001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 *  Unless required by applicable law or agreed to in writing, software
012 *  distributed under the License is distributed on an "AS IS" BASIS,
013 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 *  See the License for the specific language governing permissions and
015 *  limitations under the License.
016 */
017package org.apache.bcel.classfile;
018
019/**
020 * Interface to make use of the Visitor pattern programming style. I.e. a class that implements this interface can
021 * traverse the contents of a Java class just by calling the 'accept' method which all classes have.
022 */
023public interface Visitor {
024    /**
025     * @since 6.0
026     */
027    void visitAnnotation(Annotations obj);
028
029    /**
030     * @since 6.0
031     */
032    void visitAnnotationDefault(AnnotationDefault obj);
033
034    /**
035     * @since 6.0
036     */
037    void visitAnnotationEntry(AnnotationEntry obj);
038
039    /**
040     * @since 6.0
041     */
042    void visitBootstrapMethods(BootstrapMethods obj);
043
044    void visitCode(Code obj);
045
046    void visitCodeException(CodeException obj);
047
048    void visitConstantClass(ConstantClass obj);
049
050    void visitConstantDouble(ConstantDouble obj);
051
052    /**
053     * @since 6.3
054     */
055    default void visitConstantDynamic(final ConstantDynamic constantDynamic) {
056        // empty
057    }
058
059    void visitConstantFieldref(ConstantFieldref obj);
060
061    void visitConstantFloat(ConstantFloat obj);
062
063    void visitConstantInteger(ConstantInteger obj);
064
065    void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj);
066
067    void visitConstantInvokeDynamic(ConstantInvokeDynamic obj);
068
069    void visitConstantLong(ConstantLong obj);
070
071    /**
072     * @since 6.0
073     */
074    void visitConstantMethodHandle(ConstantMethodHandle obj);
075
076    void visitConstantMethodref(ConstantMethodref obj);
077
078    /**
079     * @since 6.0
080     */
081    void visitConstantMethodType(ConstantMethodType obj);
082
083    /**
084     * @since 6.1
085     */
086    void visitConstantModule(ConstantModule constantModule);
087
088    void visitConstantNameAndType(ConstantNameAndType obj);
089
090    /**
091     * @since 6.1
092     */
093    void visitConstantPackage(ConstantPackage constantPackage);
094
095    void visitConstantPool(ConstantPool obj);
096
097    void visitConstantString(ConstantString obj);
098
099    void visitConstantUtf8(ConstantUtf8 obj);
100
101    void visitConstantValue(ConstantValue obj);
102
103    void visitDeprecated(Deprecated obj);
104
105    /**
106     * @since 6.0
107     */
108    void visitEnclosingMethod(EnclosingMethod obj);
109
110    void visitExceptionTable(ExceptionTable obj);
111
112    void visitField(Field obj);
113
114    void visitInnerClass(InnerClass obj);
115
116    void visitInnerClasses(InnerClasses obj);
117
118    void visitJavaClass(JavaClass obj);
119
120    void visitLineNumber(LineNumber obj);
121
122    void visitLineNumberTable(LineNumberTable obj);
123
124    void visitLocalVariable(LocalVariable obj);
125
126    void visitLocalVariableTable(LocalVariableTable obj);
127
128    /**
129     * @since 6.0
130     */
131    void visitLocalVariableTypeTable(LocalVariableTypeTable obj);
132
133    void visitMethod(Method obj);
134
135    /**
136     * @since 6.4.0
137     */
138    default void visitMethodParameter(final MethodParameter obj) {
139        // empty
140    }
141
142    /**
143     * @since 6.0
144     */
145    void visitMethodParameters(MethodParameters obj);
146
147    /**
148     * @since 6.4.0
149     */
150    default void visitModule(final Module constantModule) {
151        // empty
152    }
153
154    /**
155     * @since 6.4.0
156     */
157    default void visitModuleExports(final ModuleExports constantModule) {
158        // empty
159    }
160
161    /**
162     * @since 6.4.0
163     */
164    default void visitModuleMainClass(final ModuleMainClass obj) {
165        // empty
166    }
167
168    /**
169     * @since 6.4.0
170     */
171    default void visitModuleOpens(final ModuleOpens constantModule) {
172        // empty
173    }
174
175    /**
176     * @since 6.4.0
177     */
178    default void visitModulePackages(final ModulePackages constantModule) {
179        // empty
180    }
181
182    /**
183     * @since 6.4.0
184     */
185    default void visitModuleProvides(final ModuleProvides constantModule) {
186        // empty
187    }
188
189    /**
190     * @since 6.4.0
191     */
192    default void visitModuleRequires(final ModuleRequires constantModule) {
193        // empty
194    }
195
196    /**
197     * @since 6.4.0
198     */
199    default void visitNestHost(final NestHost obj) {
200        // empty
201    }
202
203    /**
204     * @since 6.4.0
205     */
206    default void visitNestMembers(final NestMembers obj) {
207        // empty
208    }
209
210    /**
211     * @since 6.0
212     */
213    void visitParameterAnnotation(ParameterAnnotations obj);
214
215
216    /**
217     * @since 6.0
218     */
219    void visitParameterAnnotationEntry(ParameterAnnotationEntry obj);
220
221    /**
222     * Visits a {@link Record} object.
223     *
224     * @param obj Record to visit
225     * @since 6.9.0
226     */
227    default void visitRecord(final Record obj) {
228        // empty
229    }
230
231    /**
232     * Visits a {@link RecordComponentInfo} object.
233     *
234     * @param record component to visit
235     * @since 6.9.0
236     */
237    default void visitRecordComponent(final RecordComponentInfo record) {
238     // noop
239    }
240
241    void visitSignature(Signature obj);
242
243    void visitSourceFile(SourceFile obj);
244
245    void visitStackMap(StackMap obj);
246
247    void visitStackMapEntry(StackMapEntry obj);
248
249    /**
250     * Visits a {@link StackMapType} object.
251     *
252     * @param obj object to visit
253     * @since 6.8.0
254     */
255    default void visitStackMapType(final StackMapType obj) {
256      // empty
257    }
258
259    void visitSynthetic(Synthetic obj);
260
261    void visitUnknown(Unknown obj);
262
263}