类 Call

  • 直接已知子类:
    ConcreteCall, SymbolicCall

    public abstract class Call
    extends java.lang.Object
    Represents a method call. If the call target is a Method that is present in the class pool, a ConcreteCall is instantiated. If the call target is not a known method, a SymbolicCall is the appropriate subclass.
    • 字段详细资料

      • caller

        public final CodeLocation caller
        The location where the call was invoked.
      • throwsNullptr

        public final int throwsNullptr
        Describes whether this call will throw a NullPointerException at runtime. Either Value.NEVER, Value.MAYBE or Value.ALWAYS.
      • controlFlowDependent

        public final boolean controlFlowDependent
        If false, control flow in the calling method will always reach this call. Otherwise, whether the call will be invoked at runtime might depend on e.g. specific branches being taken.
      • runtimeTypeDependent

        public final boolean runtimeTypeDependent
        If true, this call might only be one of several alternative targets, depending on the actual type of the called object during runtime. Otherwise, this call is the only possible target.
    • 构造器详细资料

      • Call

        protected Call​(CodeLocation caller,
                       Value instance,
                       java.util.List<Value> arguments,
                       Value returnValue,
                       int throwsNullptr,
                       Instruction instruction,
                       boolean controlFlowDependent,
                       boolean runtimeTypeDependent)
    • 方法详细资料

      • isStatic

        public boolean isStatic()
        Check if this call is static (no implicit instance set) or not.
      • hasIncompleteTarget

        public abstract boolean hasIncompleteTarget()
        Check if this call's target is fully known or only parts of it (e.g. only the descriptor).
      • getArgumentCount

        public int getArgumentCount()
        Returns the number of arguments.
      • getJvmArgumentSize

        public int getJvmArgumentSize()
        Returns the number of elements that need to be popped from the JVM stack for this call.
      • getArgument

        public Value getArgument​(int index)
        Get the value for a specific argument index.

        Note: This is only to be used in implementations of CallHandler.handleCall(Call, TracedStack, TracedVariables). Afterwards, the values will have been cleared to reduce unnecessary memory usage, as argument values are not needed for the full call graph reconstruction.

      • setArguments

        public void setArguments​(java.util.List<Value> arguments)
      • getInstance

        public Value getInstance()
        If this is a virtual call, this describes the this pointer of the object whose method is called, usually an IdentifiedReferenceValue. For static calls this is null.

        Note: This is only to be used in implementations of CallHandler.handleCall(Call, TracedStack, TracedVariables). Afterwards, the value will have been cleared to reduce unnecessary memory usage, as the instance value is not needed for the full call graph reconstruction.

      • setInstance

        public void setInstance​(Value instance)
      • getReturnValue

        public Value getReturnValue()
        Get the return value of this call.

        Note: This is only to be used in implementations of CallHandler.handleCall(Call, TracedStack, TracedVariables). Afterwards, the value will have been cleared to reduce unnecessary memory usage, as the return value is not needed for the full call graph reconstruction.

      • setReturnValue

        public void setReturnValue​(Value returnValue)
      • clearValues

        public void clearValues()
        Clear all Value object references from this call.
      • isCertainlyCalled

        public boolean isCertainlyCalled()
        Returns true if this call is always executed, no matter which branch in the methods are taken and which type the called object has during runtime.
      • toString

        public java.lang.String toString()
        覆盖:
        toString 在类中 java.lang.Object
      • toSimpleString

        public java.lang.String toSimpleString()
        Prints a shorter version of the regular `toString()` without the caller or null pointer information.
      • targetMethodAccept

        public void targetMethodAccept​(MemberVisitor memberVisitor)
      • equals

        public boolean equals​(java.lang.Object o)
        覆盖:
        equals 在类中 java.lang.Object
      • hashCode

        public int hashCode()
        覆盖:
        hashCode 在类中 java.lang.Object