Class 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 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 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
    • 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 INVOKEINTERFACE
      java.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 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

      • 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
      • 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
      • 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()