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 *
017 */
018package org.apache.bcel.classfile;
019
020/**
021 * Interface to make use of the Visitor pattern programming style. I.e. a class
022 * that implements this interface can traverse the contents of a Java class just
023 * by calling the `accept' method which all classes have.
024 * 
025 * @version $Id: Visitor.java 1747278 2016-06-07 17:28:43Z britter $
026 */
027public interface Visitor
028{
029    void visitCode(Code obj);
030
031    void visitCodeException(CodeException obj);
032
033    void visitConstantClass(ConstantClass obj);
034
035    void visitConstantDouble(ConstantDouble obj);
036
037    void visitConstantFieldref(ConstantFieldref obj);
038
039    void visitConstantFloat(ConstantFloat obj);
040
041    void visitConstantInteger(ConstantInteger obj);
042
043    void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj);
044
045    void visitConstantInvokeDynamic(ConstantInvokeDynamic obj);
046
047    void visitConstantLong(ConstantLong obj);
048
049    void visitConstantMethodref(ConstantMethodref obj);
050
051    void visitConstantNameAndType(ConstantNameAndType obj);
052
053    void visitConstantPool(ConstantPool obj);
054
055    void visitConstantString(ConstantString obj);
056
057    void visitConstantUtf8(ConstantUtf8 obj);
058
059    void visitConstantValue(ConstantValue obj);
060
061    void visitDeprecated(Deprecated obj);
062
063    void visitExceptionTable(ExceptionTable obj);
064
065    void visitField(Field obj);
066
067    void visitInnerClass(InnerClass obj);
068
069    void visitInnerClasses(InnerClasses obj);
070
071    void visitJavaClass(JavaClass obj);
072
073    void visitLineNumber(LineNumber obj);
074
075    void visitLineNumberTable(LineNumberTable obj);
076
077    void visitLocalVariable(LocalVariable obj);
078
079    void visitLocalVariableTable(LocalVariableTable obj);
080
081    void visitMethod(Method obj);
082
083    void visitSignature(Signature obj);
084
085    void visitSourceFile(SourceFile obj);
086
087    void visitSynthetic(Synthetic obj);
088
089    void visitUnknown(Unknown obj);
090
091    void visitStackMap(StackMap obj);
092
093    void visitStackMapEntry(StackMapEntry obj);
094
095    /**
096     * @since 6.0
097     */
098    void visitAnnotation(Annotations obj);
099
100    /**
101     * @since 6.0
102     */
103    void visitParameterAnnotation(ParameterAnnotations obj);
104
105    /**
106     * @since 6.0
107     */
108    void visitAnnotationEntry(AnnotationEntry obj);
109
110    /**
111     * @since 6.0
112     */
113    void visitAnnotationDefault(AnnotationDefault obj);
114
115    /**
116     * @since 6.0
117     */
118    void visitLocalVariableTypeTable(LocalVariableTypeTable obj);
119
120    /**
121     * @since 6.0
122     */
123    void visitEnclosingMethod(EnclosingMethod obj);
124
125    /**
126     * @since 6.0
127     */
128    void visitBootstrapMethods(BootstrapMethods obj);
129
130    /**
131     * @since 6.0
132     */
133    void visitMethodParameters(MethodParameters obj);
134
135    /**
136     * @since 6.0
137     */
138    void visitConstantMethodType(ConstantMethodType obj);
139
140    /**
141     * @since 6.0
142     */
143    void visitConstantMethodHandle(ConstantMethodHandle obj);
144
145    /**
146     * @since 6.0
147     */
148    void visitParameterAnnotationEntry(ParameterAnnotationEntry obj);
149}