Class Hierarchy2

java.lang.Object
edu.umd.cs.findbugs.ba.Hierarchy2

public class Hierarchy2 extends Object
Facade for class hierarchy queries. These typically access the class hierarchy using the Repository class. Callers should generally expect to handle ClassNotFoundException for when referenced classes can't be found.
Author:
William Pugh
  • Constructor Details

    • Hierarchy2

      public Hierarchy2()
  • Method Details

    • findExactMethod

      public static XMethod findExactMethod(org.apache.bcel.generic.InvokeInstruction inv, org.apache.bcel.generic.ConstantPoolGen cpg, JavaClassAndMethodChooser chooser)
      Look up the method referenced by given InvokeInstruction. This method does not look for implementations in super or subclasses according to the virtual dispatch rules.
      Parameters:
      inv - the InvokeInstruction
      cpg - the ConstantPoolGen used by the class the InvokeInstruction belongs to
      chooser - JavaClassAndMethodChooser to use to pick the method from among the candidates
      Returns:
      the JavaClassAndMethod, or null if no such method is defined in the class
    • findInvocationLeastUpperBound

      @CheckForNull public static XMethod findInvocationLeastUpperBound(org.apache.bcel.generic.InvokeInstruction inv, org.apache.bcel.generic.ConstantPoolGen cpg, JavaClassAndMethodChooser methodChooser)
    • findInvocationLeastUpperBound

      @CheckForNull public static XMethod findInvocationLeastUpperBound(ClassDescriptor classDesc, String methodName, String methodSig, boolean invokeStatic, boolean invokeInterface)
    • findInvocationLeastUpperBound

      @CheckForNull public static XMethod findInvocationLeastUpperBound(XClass jClass, String methodName, String methodSig, boolean invokeStatic, boolean invokeInterface)
    • findInvocationLeastUpperBound0

      @CheckForNull public static XMethod findInvocationLeastUpperBound0(XClass jClass, String methodName, String methodSig, boolean invokeStatic, boolean invokeInterface)
    • findSuperMethods

      public static Set<XMethod> findSuperMethods(XMethod m)
    • findFirstSuperMethod

      @CheckForNull public static XMethod findFirstSuperMethod(XMethod m)
    • findMethod

      @CheckForNull public static XMethod findMethod(ClassDescriptor classDescriptor, String methodName, String methodSig, boolean isStatic)
    • resolveMethodCallTargets

      @Nonnull public static Set<XMethod> resolveMethodCallTargets(org.apache.bcel.generic.InvokeInstruction invokeInstruction, TypeFrame typeFrame, org.apache.bcel.generic.ConstantPoolGen cpg) throws DataflowAnalysisException, ClassNotFoundException
      Resolve possible method call targets. This works for both static and instance method calls.
      Parameters:
      invokeInstruction - the InvokeInstruction
      typeFrame - the TypeFrame containing the types of stack values
      cpg - the ConstantPoolGen
      Returns:
      Set of methods which might be called
      Throws:
      DataflowAnalysisException
      ClassNotFoundException
    • resolveMethodCallTargets

      public static Set<XMethod> resolveMethodCallTargets(org.apache.bcel.generic.ReferenceType receiverType, org.apache.bcel.generic.InvokeInstruction invokeInstruction, org.apache.bcel.generic.ConstantPoolGen cpg) throws ClassNotFoundException
      Resolve possible instance method call targets. Assumes that invokevirtual and invokeinterface methods may call any subtype of the receiver class.
      Parameters:
      receiverType - type of the receiver object
      invokeInstruction - the InvokeInstruction
      cpg - the ConstantPoolGen
      Returns:
      Set of methods which might be called
      Throws:
      ClassNotFoundException
    • resolveMethodCallTargets

      public static Set<XMethod> resolveMethodCallTargets(org.apache.bcel.generic.ReferenceType receiverType, org.apache.bcel.generic.InvokeInstruction invokeInstruction, org.apache.bcel.generic.ConstantPoolGen cpg, boolean receiverTypeIsExact) throws ClassNotFoundException
      Resolve possible instance method call targets.
      Parameters:
      receiverType - type of the receiver object
      invokeInstruction - the InvokeInstruction
      cpg - the ConstantPoolGen
      receiverTypeIsExact - if true, the receiver type is known exactly, which should allow a precise result
      Returns:
      Set of methods which might be called
      Throws:
      ClassNotFoundException
    • resolveVirtualMethodCallTargets

      public static Set<XMethod> resolveVirtualMethodCallTargets(String receiverClassName, String methodName, String methodSig, boolean receiverTypeIsExact, boolean invokeSpecial) throws ClassNotFoundException
      Throws:
      ClassNotFoundException
    • resolveVirtualMethodCallTargets

      public static Set<XMethod> resolveVirtualMethodCallTargets(XMethod target, boolean receiverTypeIsExact, boolean invokeSpecial) throws ClassNotFoundException
      Throws:
      ClassNotFoundException
    • resolveVirtualMethodCallTargets

      public static Set<XMethod> resolveVirtualMethodCallTargets(ClassDescriptor receiverDesc, String methodName, String methodSig, boolean receiverTypeIsExact, boolean invokeSpecial) throws ClassNotFoundException
      Throws:
      ClassNotFoundException
    • findDeclaredExceptions

      @CheckForNull public static org.apache.bcel.generic.ObjectType[] findDeclaredExceptions(org.apache.bcel.generic.InvokeInstruction inv, org.apache.bcel.generic.ConstantPoolGen cpg)
      Find the declared exceptions for the method called by given instruction.
      Parameters:
      inv - the InvokeInstruction
      cpg - the ConstantPoolGen used by the class the InvokeInstruction belongs to
      Returns:
      array of ObjectTypes of thrown exceptions, or null if we can't find the method implementation