Class PreorderVisitor

java.lang.Object
edu.umd.cs.findbugs.visitclass.BetterVisitor
edu.umd.cs.findbugs.visitclass.PreorderVisitor
All Implemented Interfaces:
Constants2, org.apache.bcel.classfile.Visitor, org.apache.bcel.Constants
Direct Known Subclasses:
AnnotationVisitor, CallToUnconditionalThrower, CheckImmutableAnnotation, ComparatorIdiom, ConfusedInheritance, DontCatchIllegalMonitorStateException, DroppedException, DuplicateBranches, FindBugsSummaryStats, Methods, Naming, PreorderDetector, RedundantInterfaces, ResolveAllReferences, TrainLongInstantfParams

public class PreorderVisitor extends BetterVisitor implements Constants2
Interface to make the use of a visitor pattern programming style possible. I.e. a class that implements this interface can traverse the contents of a Java class just by calling the `accept' method which all classes have.

Implemented by wish of Boris Bokowski.

If don't like it, blame him. If you do like it thank me 8-)

Version:
970819
Author:
M. Dahm
  • Field Summary

    Fields inherited from interface org.apache.bcel.Constants

    AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_SYPER, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, APPEND_FRAME, APPEND_FRAME_MAX, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_ANNOTATION_DEFAULT, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_ENCLOSING_METHOD, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_LOCAL_VARIABLE_TYPE_TABLE, ATTR_PMG, ATTR_RUNTIME_VISIBLE_ANNOTATIONS, ATTR_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIMEIN_VISIBLE_ANNOTATIONS, ATTR_RUNTIMEIN_VISIBLE_PARAMETER_ANNOTATIONS, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_STACK_MAP_TABLE, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CHOP_FRAME, CHOP_FRAME_MAX, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_Methodref, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, FULL_FRAME, GETFIELD, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INEG, INSTANCEOF, INSTANCEOF_QUICK, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAJOR_1_4, MAJOR_1_5, MAJOR_1_6, MAJOR_1_7, MAJOR_1_8, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, MINOR_1_6, MINOR_1_7, MINOR_1_8, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEW, NEW_QUICK, NEWARRAY, NO_OF_OPERANDS, NOP, OPCODE_NAMES, POP, POP2, PRODUCE_STACK, PUSH, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RETURN, SALOAD, SAME_FRAME, SAME_FRAME_EXTENDED, SAME_FRAME_MAX, SAME_LOCALS_1_STACK_ITEM_FRAME, SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED, SAME_LOCALS_1_STACK_ITEM_FRAME_MAX, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STATIC_INITIALIZER_NAME, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TYPE_NAMES, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE, WIDE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
     
    protected int
     
    void
    doVisitMethod(org.apache.bcel.classfile.Method method)
     
     
    Get the slash-formatted class name for the current or most recently visited class
    org.apache.bcel.classfile.Code
    Return the current Code attribute; assuming one is being visited
    org.apache.bcel.classfile.ConstantPool
    Get the constant pool for the current or most recently visited class
    Get the dotted class name for the current or most recently visited class
    Deprecated.
    If currently visiting a method, get the method's dotted method signature
    Get the dotted superclass name for the current or most recently visited class
    org.apache.bcel.classfile.Field
    If currently visiting a field, get the field's Field object
     
    boolean
    If currently visiting a field, return whether or not the field is static
    If currently visiting a field, get the field's name
    If currently visiting a field, get the field's slash-formatted signature
    If currently visiting a field, get the field's fully qualified name
    If currently visiting a method, get the method's fully qualified name
    org.apache.bcel.classfile.Method
    If currently visiting a method, get the method's Method object
     
    If currently visiting a method, get the method's name
    If currently visiting a method, get the method's slash-formatted signature
    protected Iterable<org.apache.bcel.classfile.Method>
    getMethodVisitOrder(org.apache.bcel.classfile.JavaClass obj)
     
    static int
     
    int
     
    Get the (slash-formatted?) package name for the current or most recently visited class
    int
    Get lines of code in try block that surround pc
    int
    getSizeOfSurroundingTryBlock(String vmNameOfExceptionClass, int pc)
    Get lines of code in try block that surround pc
    Get the source file name for the current or most recently visited class
    protected String
     
    Get the slash-formatted superclass name for the current or most recently visited class
     
    getSurroundingCaughtExceptions(int pc, int maxTryBlockSize)
     
    org.apache.bcel.classfile.CodeException
     
    org.apache.bcel.classfile.CodeException
    getSurroundingTryBlock(String vmNameOfExceptionClass, int pc)
     
    org.apache.bcel.classfile.JavaClass
    Get the JavaClass object for the current or most recently visited class
     
     
     
    static boolean
    hasInterestingClass(org.apache.bcel.classfile.ConstantPool cp, Collection<String> classes)
     
    static boolean
    hasInterestingMethod(org.apache.bcel.classfile.ConstantPool cp, Collection<MethodDescriptor> methods)
    Returns true if given constant pool probably has a reference to any of supplied methods Useful to exclude from analysis uninteresting classes
    protected boolean
     
    void
    setupVisitorForClass(org.apache.bcel.classfile.JavaClass obj)
     
    protected void
    setVisitMethodsInCallOrder(boolean visitMethodsInCallOrder)
     
    boolean
    shouldVisit(org.apache.bcel.classfile.JavaClass obj)
     
     
    void
    visitAfter(org.apache.bcel.classfile.Code obj)
    Called after visiting a code attribute
    void
    visitAfter(org.apache.bcel.classfile.JavaClass obj)
     
    void
    visitAnnotation(org.apache.bcel.classfile.Annotations arg0)
     
    void
    visitAnnotationDefault(org.apache.bcel.classfile.AnnotationDefault arg0)
     
    void
    visitAnnotationEntry(org.apache.bcel.classfile.AnnotationEntry arg0)
     
    void
    visitCode(org.apache.bcel.classfile.Code obj)
     
    void
    visitConstantPool(org.apache.bcel.classfile.ConstantPool obj)
     
    void
    visitEnclosingMethod(org.apache.bcel.classfile.EnclosingMethod arg0)
     
    boolean
    is the visitor currently visiting a field?
    boolean
    is the visitor currently visiting a method?
    void
    visitInnerClasses(org.apache.bcel.classfile.InnerClasses obj)
     
    void
    visitJavaClass(org.apache.bcel.classfile.JavaClass obj)
     
    void
    visitLineNumberTable(org.apache.bcel.classfile.LineNumberTable obj)
     
    void
    visitLocalVariableTable(org.apache.bcel.classfile.LocalVariableTable obj)
     
    void
    visitParameterAnnotation(org.apache.bcel.classfile.ParameterAnnotations arg0)
     
    void
    visitStackMapTable(org.apache.bcel.classfile.StackMapTable arg0)
     
    void
    visitStackMapTableEntry(org.apache.bcel.classfile.StackMapTableEntry arg0)
     

    Methods inherited from class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • PreorderVisitor

      public PreorderVisitor()
  • Method Details

    • getStringFromIndex

      protected String getStringFromIndex(int i)
    • asUnsignedByte

      protected int asUnsignedByte(byte b)
    • getCode

      public org.apache.bcel.classfile.Code getCode()
      Return the current Code attribute; assuming one is being visited
      Returns:
      current code attribute
    • getSurroundingCaughtExceptions

      public Set<String> getSurroundingCaughtExceptions(int pc)
    • getSurroundingCaughtExceptions

      public Set<String> getSurroundingCaughtExceptions(int pc, int maxTryBlockSize)
    • getSizeOfSurroundingTryBlock

      public int getSizeOfSurroundingTryBlock(int pc)
      Get lines of code in try block that surround pc
      Parameters:
      pc -
      Returns:
      number of lines of code in try block
    • getSizeOfSurroundingTryBlock

      public int getSizeOfSurroundingTryBlock(String vmNameOfExceptionClass, int pc)
      Get lines of code in try block that surround pc
      Parameters:
      pc -
      Returns:
      number of lines of code in try block
    • getSurroundingTryBlock

      public org.apache.bcel.classfile.CodeException getSurroundingTryBlock(int pc)
    • getSurroundingTryBlock

      public org.apache.bcel.classfile.CodeException getSurroundingTryBlock(String vmNameOfExceptionClass, int pc)
    • visitCode

      public void visitCode(org.apache.bcel.classfile.Code obj)
      Specified by:
      visitCode in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitCode in class BetterVisitor
    • visitAfter

      public void visitAfter(org.apache.bcel.classfile.Code obj)
      Called after visiting a code attribute
      Parameters:
      obj - Code that was just visited
    • visitConstantPool

      public void visitConstantPool(org.apache.bcel.classfile.ConstantPool obj)
      Specified by:
      visitConstantPool in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitConstantPool in class BetterVisitor
    • doVisitMethod

      public void doVisitMethod(org.apache.bcel.classfile.Method method)
    • amVisitingMainMethod

      public boolean amVisitingMainMethod()
    • visitInnerClasses

      public void visitInnerClasses(org.apache.bcel.classfile.InnerClasses obj)
      Specified by:
      visitInnerClasses in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitInnerClasses in class BetterVisitor
    • visitAfter

      public void visitAfter(org.apache.bcel.classfile.JavaClass obj)
    • shouldVisit

      public boolean shouldVisit(org.apache.bcel.classfile.JavaClass obj)
    • isVisitMethodsInCallOrder

      protected boolean isVisitMethodsInCallOrder()
    • setVisitMethodsInCallOrder

      protected void setVisitMethodsInCallOrder(boolean visitMethodsInCallOrder)
    • getMethodVisitOrder

      protected Iterable<org.apache.bcel.classfile.Method> getMethodVisitOrder(org.apache.bcel.classfile.JavaClass obj)
    • visitJavaClass

      public void visitJavaClass(org.apache.bcel.classfile.JavaClass obj)
      Specified by:
      visitJavaClass in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitJavaClass in class BetterVisitor
    • setupVisitorForClass

      public void setupVisitorForClass(org.apache.bcel.classfile.JavaClass obj)
    • visitLineNumberTable

      public void visitLineNumberTable(org.apache.bcel.classfile.LineNumberTable obj)
      Specified by:
      visitLineNumberTable in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitLineNumberTable in class BetterVisitor
    • visitLocalVariableTable

      public void visitLocalVariableTable(org.apache.bcel.classfile.LocalVariableTable obj)
      Specified by:
      visitLocalVariableTable in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitLocalVariableTable in class BetterVisitor
    • getXClass

      public XClass getXClass()
    • getClassDescriptor

      public ClassDescriptor getClassDescriptor()
    • getXMethod

      public XMethod getXMethod()
    • getMethodDescriptor

      public MethodDescriptor getMethodDescriptor()
    • getXField

      public XField getXField()
    • getFieldDescriptor

      public FieldDescriptor getFieldDescriptor()
    • getConstantPool

      public org.apache.bcel.classfile.ConstantPool getConstantPool()
      Get the constant pool for the current or most recently visited class
    • getClassName

      @SlashedClassName public String getClassName()
      Get the slash-formatted class name for the current or most recently visited class
    • getDottedClassName

      @DottedClassName public String getDottedClassName()
      Get the dotted class name for the current or most recently visited class
    • getPackageName

      public String getPackageName()
      Get the (slash-formatted?) package name for the current or most recently visited class
    • getSourceFile

      public String getSourceFile()
      Get the source file name for the current or most recently visited class
    • getSuperclassName

      @SlashedClassName public String getSuperclassName()
      Get the slash-formatted superclass name for the current or most recently visited class
    • getDottedSuperclassName

      @DottedClassName public String getDottedSuperclassName()
      Get the dotted superclass name for the current or most recently visited class
    • getThisClass

      public org.apache.bcel.classfile.JavaClass getThisClass()
      Get the JavaClass object for the current or most recently visited class
    • getFullyQualifiedMethodName

      public String getFullyQualifiedMethodName()
      If currently visiting a method, get the method's fully qualified name
    • visitingMethod

      public boolean visitingMethod()
      is the visitor currently visiting a method?
    • visitingField

      public boolean visitingField()
      is the visitor currently visiting a field?
    • getField

      public org.apache.bcel.classfile.Field getField()
      If currently visiting a field, get the field's Field object
    • getMethod

      public org.apache.bcel.classfile.Method getMethod()
      If currently visiting a method, get the method's Method object
    • getMethodName

      public String getMethodName()
      If currently visiting a method, get the method's name
    • getNumberArguments

      public static int getNumberArguments(String signature)
    • hasInterestingMethod

      public static boolean hasInterestingMethod(org.apache.bcel.classfile.ConstantPool cp, Collection<MethodDescriptor> methods)
      Returns true if given constant pool probably has a reference to any of supplied methods Useful to exclude from analysis uninteresting classes
      Parameters:
      cp - constant pool
      methods - methods collection
      Returns:
      true if method is found
    • hasInterestingClass

      public static boolean hasInterestingClass(org.apache.bcel.classfile.ConstantPool cp, Collection<String> classes)
    • getNumberMethodArguments

      public int getNumberMethodArguments()
    • getMethodSig

      public String getMethodSig()
      If currently visiting a method, get the method's slash-formatted signature
    • getDottedMethodSig

      public String getDottedMethodSig()
      If currently visiting a method, get the method's dotted method signature
    • getFieldName

      public String getFieldName()
      If currently visiting a field, get the field's name
    • getFieldSig

      public String getFieldSig()
      If currently visiting a field, get the field's slash-formatted signature
    • getFieldIsStatic

      public boolean getFieldIsStatic()
      If currently visiting a field, return whether or not the field is static
    • getFullyQualifiedFieldName

      public String getFullyQualifiedFieldName()
      If currently visiting a field, get the field's fully qualified name
    • getDottedFieldSig

      @Deprecated public String getDottedFieldSig()
      Deprecated.
      If currently visiting a field, get the field's dot-formatted signature
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • visitAnnotation

      public void visitAnnotation(org.apache.bcel.classfile.Annotations arg0)
      Specified by:
      visitAnnotation in interface org.apache.bcel.classfile.Visitor
    • visitAnnotationDefault

      public void visitAnnotationDefault(org.apache.bcel.classfile.AnnotationDefault arg0)
      Specified by:
      visitAnnotationDefault in interface org.apache.bcel.classfile.Visitor
    • visitAnnotationEntry

      public void visitAnnotationEntry(org.apache.bcel.classfile.AnnotationEntry arg0)
      Specified by:
      visitAnnotationEntry in interface org.apache.bcel.classfile.Visitor
    • visitEnclosingMethod

      public void visitEnclosingMethod(org.apache.bcel.classfile.EnclosingMethod arg0)
      Specified by:
      visitEnclosingMethod in interface org.apache.bcel.classfile.Visitor
    • visitParameterAnnotation

      public void visitParameterAnnotation(org.apache.bcel.classfile.ParameterAnnotations arg0)
      Specified by:
      visitParameterAnnotation in interface org.apache.bcel.classfile.Visitor
    • visitStackMapTable

      public void visitStackMapTable(org.apache.bcel.classfile.StackMapTable arg0)
      Specified by:
      visitStackMapTable in interface org.apache.bcel.classfile.Visitor
    • visitStackMapTableEntry

      public void visitStackMapTableEntry(org.apache.bcel.classfile.StackMapTableEntry arg0)
      Specified by:
      visitStackMapTableEntry in interface org.apache.bcel.classfile.Visitor