com.ibm.wala.classLoader
Class CallSiteReference

java.lang.Object
  extended by com.ibm.wala.classLoader.ProgramCounter
      extended by com.ibm.wala.classLoader.CallSiteReference
All Implemented Interfaces:
ContextItem, BytecodeConstants
Direct Known Subclasses:
JSCallSiteReference

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.


Field Summary
 
Fields inherited from class com.ibm.wala.classLoader.ProgramCounter
NO_SOURCE_LINE_NUMBER
 
Fields inherited from interface com.ibm.wala.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
protected CallSiteReference(int programCounter, MethodReference declaredTarget)
           
 
Method Summary
 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  IInvokeInstruction.IDispatch getInvocationCode()
          Return one of INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, or INVOKEINTERFACE
 java.lang.String getInvocationString()
           
protected  java.lang.String getInvocationString(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, 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
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CallSiteReference

protected CallSiteReference(int programCounter,
                            MethodReference declaredTarget)
Parameters:
programCounter - Index into bytecode describing this instruction
declaredTarget - The method target as declared at the call site
Method Detail

hashCode

public int hashCode()
Overrides:
hashCode in class ProgramCounter

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 class ProgramCounter
See Also:
Object.equals(Object)

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

public MethodReference getDeclaredTarget()
Return the Method that this call site calls. This represents the method declared in the invoke instruction only.


getInvocationCode

public abstract IInvokeInstruction.IDispatch getInvocationCode()
Return one of INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, or INVOKEINTERFACE


toString

public java.lang.String toString()
Overrides:
toString in class ProgramCounter

getInvocationString

protected java.lang.String getInvocationString(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()