Class CallSiteReference
java.lang.Object
com.ibm.wala.classLoader.ProgramCounter
com.ibm.wala.classLoader.CallSiteReference
- All Implemented Interfaces:
ContextItem
,BytecodeConstants
- Direct Known Subclasses:
DynamicCallSiteReference
public abstract class CallSiteReference
extends ProgramCounter
implements BytecodeConstants, ContextItem
Simple object that represents a static call site (ie., an invoke instruction in the bytecode)
Note that the identity of a call site reference depends on two things: the program counter,
and the containing IR. Thus, it suffices to define equals() and hashCode() from ProgramCounter
, since this class does not maintain a pointer to the containing IR
(or
CGNode
) anyway. If using a hashtable of CallSiteReference from different IRs, you
probably want to use a wrapper which also holds a pointer to the governing CGNode.
-
Nested Class Summary
Nested classes/interfaces inherited from interface com.ibm.wala.ipa.callgraph.ContextItem
ContextItem.Value<T>
-
Field Summary
Fields inherited from class com.ibm.wala.classLoader.ProgramCounter
NO_SOURCE_LINE_NUMBER
Fields inherited from interface com.ibm.wala.shrike.shrikeBT.BytecodeConstants
JBC_aaload, JBC_aastore, JBC_aconst_null, JBC_aload, JBC_aload_0, JBC_aload_1, JBC_aload_2, JBC_aload_3, JBC_anewarray, JBC_areturn, JBC_arraylength, JBC_astore, JBC_astore_0, JBC_astore_1, JBC_astore_2, JBC_astore_3, JBC_athrow, JBC_baload, JBC_bastore, JBC_bipush, JBC_caload, JBC_castore, JBC_checkcast, JBC_d2f, JBC_d2i, JBC_d2l, JBC_dadd, JBC_daload, JBC_dastore, JBC_dcmpg, JBC_dcmpl, JBC_dconst_0, JBC_dconst_1, JBC_ddiv, JBC_dload, JBC_dload_0, JBC_dload_1, JBC_dload_2, JBC_dload_3, JBC_dmul, JBC_dneg, JBC_drem, JBC_dreturn, JBC_dstore, JBC_dstore_0, JBC_dstore_1, JBC_dstore_2, JBC_dstore_3, JBC_dsub, JBC_dup, JBC_dup_x1, JBC_dup_x2, JBC_dup2, JBC_dup2_x1, JBC_dup2_x2, JBC_f2d, JBC_f2i, JBC_f2l, JBC_fadd, JBC_faload, JBC_fastore, JBC_fcmpg, JBC_fcmpl, JBC_fconst_0, JBC_fconst_1, JBC_fconst_2, JBC_fdiv, JBC_fload, JBC_fload_0, JBC_fload_1, JBC_fload_2, JBC_fload_3, JBC_fmul, JBC_fneg, JBC_frem, JBC_freturn, JBC_fstore, JBC_fstore_0, JBC_fstore_1, JBC_fstore_2, JBC_fstore_3, JBC_fsub, JBC_getfield, JBC_getstatic, JBC_goto, JBC_goto_w, JBC_i2d, JBC_i2f, JBC_i2l, JBC_iadd, JBC_iaload, JBC_iand, JBC_iastore, JBC_iconst_0, JBC_iconst_1, JBC_iconst_2, JBC_iconst_3, JBC_iconst_4, JBC_iconst_5, JBC_iconst_m1, JBC_idiv, JBC_if_acmpeq, JBC_if_acmpne, JBC_if_icmpeq, JBC_if_icmpge, JBC_if_icmpgt, JBC_if_icmple, JBC_if_icmplt, JBC_if_icmpne, JBC_ifeq, JBC_ifge, JBC_ifgt, JBC_ifle, JBC_iflt, JBC_ifne, JBC_ifnonnull, JBC_ifnull, JBC_iinc, JBC_iload, JBC_iload_0, JBC_iload_1, JBC_iload_2, JBC_iload_3, JBC_impdep1, JBC_impdep2, JBC_imul, JBC_ineg, JBC_instanceof, JBC_int2byte, JBC_int2char, JBC_int2short, JBC_invokeinterface, JBC_invokespecial, JBC_invokestatic, JBC_invokevirtual, JBC_ior, JBC_irem, JBC_ireturn, JBC_ishl, JBC_ishr, JBC_istore, JBC_istore_0, JBC_istore_1, JBC_istore_2, JBC_istore_3, JBC_isub, JBC_iushr, JBC_ixor, JBC_jsr, JBC_jsr_w, JBC_l2d, JBC_l2f, JBC_l2i, JBC_ladd, JBC_laload, JBC_land, JBC_lastore, JBC_lcmp, JBC_lconst_0, JBC_lconst_1, JBC_ldc, JBC_ldc_w, JBC_ldc2_w, JBC_ldiv, JBC_length, JBC_lload, JBC_lload_0, JBC_lload_1, JBC_lload_2, JBC_lload_3, JBC_lmul, JBC_lneg, JBC_lookupswitch, JBC_lor, JBC_lrem, JBC_lreturn, JBC_lshl, JBC_lshr, JBC_lstore, JBC_lstore_0, JBC_lstore_1, JBC_lstore_2, JBC_lstore_3, JBC_lsub, JBC_lushr, JBC_lxor, JBC_monitorenter, JBC_monitorexit, JBC_multianewarray, JBC_name, JBC_new, JBC_newarray, JBC_nop, JBC_pop, JBC_pop2, JBC_putfield, JBC_putstatic, JBC_ret, JBC_return, JBC_saload, JBC_sastore, JBC_sipush, JBC_swap, JBC_tableswitch, JBC_wide, JBC_xxxunusedxxx
-
Constructor Summary
ModifierConstructorDescriptionprotected
CallSiteReference
(int programCounter, MethodReference declaredTarget) -
Method Summary
Modifier and TypeMethodDescriptionboolean
A Program Counter value is enough to uniquely identify a call site reference within a method.Return the Method that this call site calls.abstract IInvokeInstruction.IDispatch
Return one of INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, or INVOKEINTERFACEprotected String
getInvocationString
(IInvokeInstruction.IDispatch invocationCode) int
hashCode()
boolean
boolean
isFixed()
final boolean
Is this an invokeinterface call site?final boolean
Is this an invokespecial call site?boolean
isStatic()
Is this an invokestatic call site?final boolean
Is this an invokevirtual call site?static CallSiteReference
make
(int programCounter, MethodReference declaredTarget, IInvokeInstruction.IDispatch invocationCode) This factory method plays a little game to avoid storing the invocation code in the object; this saves a byte (probably actually a whole word) in each created object.toString()
Methods inherited from class com.ibm.wala.classLoader.ProgramCounter
getProgramCounter
-
Constructor Details
-
CallSiteReference
- Parameters:
programCounter
- Index into bytecode describing this instructiondeclaredTarget
- The method target as declared at the call site
-
-
Method Details
-
hashCode
public int hashCode()- Overrides:
hashCode
in classProgramCounter
-
equals
Description copied from class:ProgramCounter
A Program Counter value is enough to uniquely identify a call site reference within a method.Note: must use these objects with extreme care; this only works if you never mix ProgramLocations from different methods in the same collection.
- Overrides:
equals
in classProgramCounter
-
make
public static CallSiteReference make(int programCounter, MethodReference declaredTarget, IInvokeInstruction.IDispatch invocationCode) This factory method plays a little game to avoid storing the invocation code in the object; this saves a byte (probably actually a whole word) in each created object.TODO: Consider canonicalization?
-
getDeclaredTarget
Return the Method that this call site calls. This represents the method declared in the invoke instruction only. -
getInvocationCode
Return one of INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, or INVOKEINTERFACE -
toString
- Overrides:
toString
in classProgramCounter
-
getInvocationString
-
getInvocationString
-
isInterface
public final boolean isInterface()Is this an invokeinterface call site? -
isVirtual
public final boolean isVirtual()Is this an invokevirtual call site? -
isSpecial
public final boolean isSpecial()Is this an invokespecial call site? -
isStatic
public boolean isStatic()Is this an invokestatic call site? -
isFixed
public boolean isFixed() -
isDispatch
public boolean isDispatch()
-