Package edu.umd.cs.findbugs.ba
Class Hierarchy2
- java.lang.Object
-
- edu.umd.cs.findbugs.ba.Hierarchy2
-
public class Hierarchy2 extends java.lang.Object
Facade for class hierarchy queries. These typically access the class hierarchy using theRepository
class. Callers should generally expect to handle ClassNotFoundException for when referenced classes can't be found.- Author:
- William Pugh
-
-
Constructor Summary
Constructors Constructor Description Hierarchy2()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description 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.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.static XMethod
findFirstSuperMethod(XMethod m)
static XMethod
findInvocationLeastUpperBound(XClass jClass, java.lang.String methodName, java.lang.String methodSig, boolean invokeStatic, boolean invokeInterface)
static XMethod
findInvocationLeastUpperBound(ClassDescriptor classDesc, java.lang.String methodName, java.lang.String methodSig, boolean invokeStatic, boolean invokeInterface)
static XMethod
findInvocationLeastUpperBound(org.apache.bcel.generic.InvokeInstruction inv, org.apache.bcel.generic.ConstantPoolGen cpg, JavaClassAndMethodChooser methodChooser)
static XMethod
findInvocationLeastUpperBound0(XClass jClass, java.lang.String methodName, java.lang.String methodSig, boolean invokeStatic, boolean invokeInterface)
static XMethod
findMethod(ClassDescriptor classDescriptor, java.lang.String methodName, java.lang.String methodSig, boolean isStatic)
static java.util.Set<XMethod>
findSuperMethods(XMethod m)
static java.util.Set<XMethod>
resolveMethodCallTargets(org.apache.bcel.generic.InvokeInstruction invokeInstruction, TypeFrame typeFrame, org.apache.bcel.generic.ConstantPoolGen cpg)
Resolve possible method call targets.static java.util.Set<XMethod>
resolveMethodCallTargets(org.apache.bcel.generic.ReferenceType receiverType, org.apache.bcel.generic.InvokeInstruction invokeInstruction, org.apache.bcel.generic.ConstantPoolGen cpg)
Resolve possible instance method call targets.static java.util.Set<XMethod>
resolveMethodCallTargets(org.apache.bcel.generic.ReferenceType receiverType, org.apache.bcel.generic.InvokeInstruction invokeInstruction, org.apache.bcel.generic.ConstantPoolGen cpg, boolean receiverTypeIsExact)
Resolve possible instance method call targets.static java.util.Set<XMethod>
resolveVirtualMethodCallTargets(XMethod target, boolean receiverTypeIsExact, boolean invokeSpecial)
static java.util.Set<XMethod>
resolveVirtualMethodCallTargets(ClassDescriptor receiverDesc, java.lang.String methodName, java.lang.String methodSig, boolean receiverTypeIsExact, boolean invokeSpecial)
static java.util.Set<XMethod>
resolveVirtualMethodCallTargets(java.lang.String receiverClassName, java.lang.String methodName, java.lang.String methodSig, boolean receiverTypeIsExact, boolean invokeSpecial)
-
-
-
Method Detail
-
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 InvokeInstructioncpg
- the ConstantPoolGen used by the class the InvokeInstruction belongs tochooser
- 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, java.lang.String methodName, java.lang.String methodSig, boolean invokeStatic, boolean invokeInterface)
-
findInvocationLeastUpperBound
@CheckForNull public static XMethod findInvocationLeastUpperBound(XClass jClass, java.lang.String methodName, java.lang.String methodSig, boolean invokeStatic, boolean invokeInterface)
-
findInvocationLeastUpperBound0
@CheckForNull public static XMethod findInvocationLeastUpperBound0(XClass jClass, java.lang.String methodName, java.lang.String methodSig, boolean invokeStatic, boolean invokeInterface)
-
findMethod
@CheckForNull public static XMethod findMethod(ClassDescriptor classDescriptor, java.lang.String methodName, java.lang.String methodSig, boolean isStatic)
-
resolveMethodCallTargets
@Nonnull public static java.util.Set<XMethod> resolveMethodCallTargets(org.apache.bcel.generic.InvokeInstruction invokeInstruction, TypeFrame typeFrame, org.apache.bcel.generic.ConstantPoolGen cpg) throws DataflowAnalysisException, java.lang.ClassNotFoundException
Resolve possible method call targets. This works for both static and instance method calls.- Parameters:
invokeInstruction
- the InvokeInstructiontypeFrame
- the TypeFrame containing the types of stack valuescpg
- the ConstantPoolGen- Returns:
- Set of methods which might be called
- Throws:
DataflowAnalysisException
java.lang.ClassNotFoundException
-
resolveMethodCallTargets
public static java.util.Set<XMethod> resolveMethodCallTargets(org.apache.bcel.generic.ReferenceType receiverType, org.apache.bcel.generic.InvokeInstruction invokeInstruction, org.apache.bcel.generic.ConstantPoolGen cpg) throws java.lang.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 objectinvokeInstruction
- the InvokeInstructioncpg
- the ConstantPoolGen- Returns:
- Set of methods which might be called
- Throws:
java.lang.ClassNotFoundException
-
resolveMethodCallTargets
public static java.util.Set<XMethod> resolveMethodCallTargets(org.apache.bcel.generic.ReferenceType receiverType, org.apache.bcel.generic.InvokeInstruction invokeInstruction, org.apache.bcel.generic.ConstantPoolGen cpg, boolean receiverTypeIsExact) throws java.lang.ClassNotFoundException
Resolve possible instance method call targets.- Parameters:
receiverType
- type of the receiver objectinvokeInstruction
- the InvokeInstructioncpg
- the ConstantPoolGenreceiverTypeIsExact
- if true, the receiver type is known exactly, which should allow a precise result- Returns:
- Set of methods which might be called
- Throws:
java.lang.ClassNotFoundException
-
resolveVirtualMethodCallTargets
public static java.util.Set<XMethod> resolveVirtualMethodCallTargets(java.lang.String receiverClassName, java.lang.String methodName, java.lang.String methodSig, boolean receiverTypeIsExact, boolean invokeSpecial) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
resolveVirtualMethodCallTargets
public static java.util.Set<XMethod> resolveVirtualMethodCallTargets(XMethod target, boolean receiverTypeIsExact, boolean invokeSpecial) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
resolveVirtualMethodCallTargets
public static java.util.Set<XMethod> resolveVirtualMethodCallTargets(ClassDescriptor receiverDesc, java.lang.String methodName, java.lang.String methodSig, boolean receiverTypeIsExact, boolean invokeSpecial) throws java.lang.ClassNotFoundException
- Throws:
java.lang.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 InvokeInstructioncpg
- 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
-
-