    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one
    003 * or more contributor license agreements.  See the NOTICE file
    004 * distributed with this work for additional information
    005 * regarding copyright ownership.  The ASF licenses this file
    006 * to you under the Apache License, Version 2.0 (the
    007 * "License"); you may not use this file except in compliance
    008 * with the License.  You may obtain a copy of the License at
    009 *
    010 *   https://www.apache.org/licenses/LICENSE-2.0
    011 *
    012 * Unless required by applicable law or agreed to in writing,
    013 * software distributed under the License is distributed on an
    014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    015 * KIND, either express or implied.  See the License for the
    016 * specific language governing permissions and limitations
    017 * under the License.
    018 */
    019package org.apache.bcel.classfile;
    020
    021/**
    022 * Interface to make use of the Visitor pattern programming style. I.e. a class that implements this interface can
    023 * traverse the contents of a Java class just by calling the 'accept' method which all classes have.
    024 */
    025public interface Visitor {
    026    /**
    027     * @since 6.0
    028     */
    029    void visitAnnotation(Annotations obj);
    030
    031    /**
    032     * @since 6.0
    033     */
    034    void visitAnnotationDefault(AnnotationDefault obj);
    035
    036    /**
    037     * @since 6.0
    038     */
    039    void visitAnnotationEntry(AnnotationEntry obj);
    040
    041    /**
    042     * @since 6.0
    043     */
    044    void visitBootstrapMethods(BootstrapMethods obj);
    045
    046    void visitCode(Code obj);
    047
    048    void visitCodeException(CodeException obj);
    049
    050    void visitConstantClass(ConstantClass obj);
    051
    052    void visitConstantDouble(ConstantDouble obj);
    053
    054    /**
    055     * @since 6.3
    056     */
    057    default void visitConstantDynamic(final ConstantDynamic constantDynamic) {
    058        // empty
    059    }
    060
    061    void visitConstantFieldref(ConstantFieldref obj);
    062
    063    void visitConstantFloat(ConstantFloat obj);
    064
    065    void visitConstantInteger(ConstantInteger obj);
    066
    067    void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj);
    068
    069    void visitConstantInvokeDynamic(ConstantInvokeDynamic obj);
    070
    071    void visitConstantLong(ConstantLong obj);
    072
    073    /**
    074     * @since 6.0
    075     */
    076    void visitConstantMethodHandle(ConstantMethodHandle obj);
    077
    078    void visitConstantMethodref(ConstantMethodref obj);
    079
    080    /**
    081     * @since 6.0
    082     */
    083    void visitConstantMethodType(ConstantMethodType obj);
    084
    085    /**
    086     * @since 6.1
    087     */
    088    void visitConstantModule(ConstantModule constantModule);
    089
    090    void visitConstantNameAndType(ConstantNameAndType obj);
    091
    092    /**
    093     * @since 6.1
    094     */
    095    void visitConstantPackage(ConstantPackage constantPackage);
    096
    097    void visitConstantPool(ConstantPool obj);
    098
    099    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}