Visitor.java

  1. /*
  2.  * Licensed to the Apache Software Foundation (ASF) under one or more
  3.  * contributor license agreements.  See the NOTICE file distributed with
  4.  * this work for additional information regarding copyright ownership.
  5.  * The ASF licenses this file to You under the Apache License, Version 2.0
  6.  * (the "License"); you may not use this file except in compliance with
  7.  * the License.  You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  *  Unless required by applicable law or agreed to in writing, software
  12.  *  distributed under the License is distributed on an "AS IS" BASIS,
  13.  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  *  See the License for the specific language governing permissions and
  15.  *  limitations under the License.
  16.  */
  17. package org.apache.bcel.classfile;

  18. /**
  19.  * Interface to make use of the Visitor pattern programming style. I.e. a class that implements this interface can
  20.  * traverse the contents of a Java class just by calling the 'accept' method which all classes have.
  21.  */
  22. public interface Visitor {
  23.     /**
  24.      * @since 6.0
  25.      */
  26.     void visitAnnotation(Annotations obj);

  27.     /**
  28.      * @since 6.0
  29.      */
  30.     void visitAnnotationDefault(AnnotationDefault obj);

  31.     /**
  32.      * @since 6.0
  33.      */
  34.     void visitAnnotationEntry(AnnotationEntry obj);

  35.     /**
  36.      * @since 6.0
  37.      */
  38.     void visitBootstrapMethods(BootstrapMethods obj);

  39.     void visitCode(Code obj);

  40.     void visitCodeException(CodeException obj);

  41.     void visitConstantClass(ConstantClass obj);

  42.     void visitConstantDouble(ConstantDouble obj);

  43.     /**
  44.      * @since 6.3
  45.      */
  46.     default void visitConstantDynamic(final ConstantDynamic constantDynamic) {
  47.         // empty
  48.     }

  49.     void visitConstantFieldref(ConstantFieldref obj);

  50.     void visitConstantFloat(ConstantFloat obj);

  51.     void visitConstantInteger(ConstantInteger obj);

  52.     void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj);

  53.     void visitConstantInvokeDynamic(ConstantInvokeDynamic obj);

  54.     void visitConstantLong(ConstantLong obj);

  55.     /**
  56.      * @since 6.0
  57.      */
  58.     void visitConstantMethodHandle(ConstantMethodHandle obj);

  59.     void visitConstantMethodref(ConstantMethodref obj);

  60.     /**
  61.      * @since 6.0
  62.      */
  63.     void visitConstantMethodType(ConstantMethodType obj);

  64.     /**
  65.      * @since 6.1
  66.      */
  67.     void visitConstantModule(ConstantModule constantModule);

  68.     void visitConstantNameAndType(ConstantNameAndType obj);

  69.     /**
  70.      * @since 6.1
  71.      */
  72.     void visitConstantPackage(ConstantPackage constantPackage);

  73.     void visitConstantPool(ConstantPool obj);

  74.     void visitConstantString(ConstantString obj);

  75.     void visitConstantUtf8(ConstantUtf8 obj);

  76.     void visitConstantValue(ConstantValue obj);

  77.     void visitDeprecated(Deprecated obj);

  78.     /**
  79.      * @since 6.0
  80.      */
  81.     void visitEnclosingMethod(EnclosingMethod obj);

  82.     void visitExceptionTable(ExceptionTable obj);

  83.     void visitField(Field obj);

  84.     void visitInnerClass(InnerClass obj);

  85.     void visitInnerClasses(InnerClasses obj);

  86.     void visitJavaClass(JavaClass obj);

  87.     void visitLineNumber(LineNumber obj);

  88.     void visitLineNumberTable(LineNumberTable obj);

  89.     void visitLocalVariable(LocalVariable obj);

  90.     void visitLocalVariableTable(LocalVariableTable obj);

  91.     /**
  92.      * @since 6.0
  93.      */
  94.     void visitLocalVariableTypeTable(LocalVariableTypeTable obj);

  95.     void visitMethod(Method obj);

  96.     /**
  97.      * @since 6.4.0
  98.      */
  99.     default void visitMethodParameter(final MethodParameter obj) {
  100.         // empty
  101.     }

  102.     /**
  103.      * @since 6.0
  104.      */
  105.     void visitMethodParameters(MethodParameters obj);

  106.     /**
  107.      * @since 6.4.0
  108.      */
  109.     default void visitModule(final Module constantModule) {
  110.         // empty
  111.     }

  112.     /**
  113.      * @since 6.4.0
  114.      */
  115.     default void visitModuleExports(final ModuleExports constantModule) {
  116.         // empty
  117.     }

  118.     /**
  119.      * @since 6.4.0
  120.      */
  121.     default void visitModuleMainClass(final ModuleMainClass obj) {
  122.         // empty
  123.     }

  124.     /**
  125.      * @since 6.4.0
  126.      */
  127.     default void visitModuleOpens(final ModuleOpens constantModule) {
  128.         // empty
  129.     }

  130.     /**
  131.      * @since 6.4.0
  132.      */
  133.     default void visitModulePackages(final ModulePackages constantModule) {
  134.         // empty
  135.     }

  136.     /**
  137.      * @since 6.4.0
  138.      */
  139.     default void visitModuleProvides(final ModuleProvides constantModule) {
  140.         // empty
  141.     }

  142.     /**
  143.      * @since 6.4.0
  144.      */
  145.     default void visitModuleRequires(final ModuleRequires constantModule) {
  146.         // empty
  147.     }

  148.     /**
  149.      * @since 6.4.0
  150.      */
  151.     default void visitNestHost(final NestHost obj) {
  152.         // empty
  153.     }

  154.     /**
  155.      * @since 6.4.0
  156.      */
  157.     default void visitNestMembers(final NestMembers obj) {
  158.         // empty
  159.     }

  160.     /**
  161.      * @since 6.0
  162.      */
  163.     void visitParameterAnnotation(ParameterAnnotations obj);


  164.     /**
  165.      * @since 6.0
  166.      */
  167.     void visitParameterAnnotationEntry(ParameterAnnotationEntry obj);

  168.     /**
  169.      * Visits a {@link Record} object.
  170.      *
  171.      * @param obj Record to visit
  172.      * @since 6.9.0
  173.      */
  174.     default void visitRecord(final Record obj) {
  175.         // empty
  176.     }

  177.     /**
  178.      * Visits a {@link RecordComponentInfo} object.
  179.      *
  180.      * @param record component to visit
  181.      * @since 6.9.0
  182.      */
  183.     default void visitRecordComponent(final RecordComponentInfo record) {
  184.      // noop
  185.     }

  186.     void visitSignature(Signature obj);

  187.     void visitSourceFile(SourceFile obj);

  188.     void visitStackMap(StackMap obj);

  189.     void visitStackMapEntry(StackMapEntry obj);

  190.     /**
  191.      * Visits a {@link StackMapType} object.
  192.      *
  193.      * @param obj object to visit
  194.      * @since 6.8.0
  195.      */
  196.     default void visitStackMapType(final StackMapType obj) {
  197.       // empty
  198.     }

  199.     void visitSynthetic(Synthetic obj);

  200.     void visitUnknown(Unknown obj);

  201. }