Package com.ibm.wala.classLoader
Class CallSiteReference
- java.lang.Object
-
- com.ibm.wala.classLoader.ProgramCounter
-
- com.ibm.wala.classLoader.CallSiteReference
-
- All Implemented Interfaces:
ContextItem,BytecodeConstants
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() fromProgramCounter, 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.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 protectedCallSiteReference(int programCounter, MethodReference declaredTarget)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description booleanequals(Object obj)A Program Counter value is enough to uniquely identify a call site reference within a method.MethodReferencegetDeclaredTarget()Return the Method that this call site calls.abstract IInvokeInstruction.IDispatchgetInvocationCode()Return one of INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, or INVOKEINTERFACEStringgetInvocationString()protected StringgetInvocationString(IInvokeInstruction.IDispatch invocationCode)inthashCode()booleanisDispatch()booleanisFixed()booleanisInterface()Is this an invokeinterface call site?booleanisSpecial()Is this an invokespecial call site?booleanisStatic()Is this an invokestatic call site?booleanisVirtual()Is this an invokevirtual call site?static CallSiteReferencemake(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.StringtoString()-
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:
hashCodein classProgramCounter
-
equals
public boolean equals(Object obj)
Description copied from class:ProgramCounterA 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:
equalsin classProgramCounter- 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 String toString()
- Overrides:
toStringin classProgramCounter
-
getInvocationString
protected String getInvocationString(IInvokeInstruction.IDispatch invocationCode)
-
getInvocationString
public 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()
-
-