Package com.ibm.wala.classLoader
Class CallSiteReference
- java.lang.Object
-
- com.ibm.wala.classLoader.ProgramCounter
-
- com.ibm.wala.classLoader.CallSiteReference
-
- All Implemented Interfaces:
ContextItem
,com.ibm.wala.shrike.shrikeBT.BytecodeConstants
public abstract class CallSiteReference extends ProgramCounter implements com.ibm.wala.shrike.shrikeBT.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 containingIR
(orCGNode
) 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
Constructors Modifier Constructor Description protected
CallSiteReference(int programCounter, MethodReference declaredTarget)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description boolean
equals(java.lang.Object obj)
A Program Counter value is enough to uniquely identify a call site reference within a method.MethodReference
getDeclaredTarget()
Return the Method that this call site calls.abstract com.ibm.wala.shrike.shrikeBT.IInvokeInstruction.IDispatch
getInvocationCode()
Return one of INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, or INVOKEINTERFACEjava.lang.String
getInvocationString()
protected java.lang.String
getInvocationString(com.ibm.wala.shrike.shrikeBT.IInvokeInstruction.IDispatch invocationCode)
int
hashCode()
boolean
isDispatch()
boolean
isFixed()
boolean
isInterface()
Is this an invokeinterface call site?boolean
isSpecial()
Is this an invokespecial call site?boolean
isStatic()
Is this an invokestatic call site?boolean
isVirtual()
Is this an invokevirtual call site?static CallSiteReference
make(int programCounter, MethodReference declaredTarget, com.ibm.wala.shrike.shrikeBT.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.java.lang.String
toString()
-
Methods inherited from class com.ibm.wala.classLoader.ProgramCounter
getProgramCounter
-
-
-
-
Constructor Detail
-
CallSiteReference
protected CallSiteReference(int programCounter, MethodReference declaredTarget)
- Parameters:
programCounter
- Index into bytecode describing this instructiondeclaredTarget
- The method target as declared at the call site
-
-
Method Detail
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classProgramCounter
-
equals
public boolean equals(java.lang.Object obj)
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, com.ibm.wala.shrike.shrikeBT.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
public MethodReference getDeclaredTarget()
Return the Method that this call site calls. This represents the method declared in the invoke instruction only.
-
getInvocationCode
public abstract com.ibm.wala.shrike.shrikeBT.IInvokeInstruction.IDispatch getInvocationCode()
Return one of INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, or INVOKEINTERFACE
-
toString
public java.lang.String toString()
- Overrides:
toString
in classProgramCounter
-
getInvocationString
protected java.lang.String getInvocationString(com.ibm.wala.shrike.shrikeBT.IInvokeInstruction.IDispatch invocationCode)
-
getInvocationString
public java.lang.String 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()
-
-