Package serp.bytecode

Class MethodInstruction

All Implemented Interfaces:
BCEntity, VisitAcceptor

public class MethodInstruction extends Instruction
An instruction that invokes a method.
  • Field Details

    • _index

      private int _index
  • Constructor Details

    • MethodInstruction

      MethodInstruction(Code owner, int opcode)
  • Method Details

    • getLength

      int getLength()
      Description copied from class: Instruction
      Return the length in bytes of this opcode, including all arguments. For many opcodes this method relies on an up-to-date byte index.
      Overrides:
      getLength in class Instruction
    • getLogicalStackChange

      public int getLogicalStackChange()
      Description copied from class: Instruction
      Return the logical number of stack positions changed by this instruction. In other words, ignore weirdness with longs and doubles taking two stack positions.
      Overrides:
      getLogicalStackChange in class Instruction
    • getStackChange

      public int getStackChange()
      Description copied from class: Instruction
      Return the number of stack positions this instruction pushes or pops during its execution.
      Overrides:
      getStackChange in class Instruction
      Returns:
      0 if the stack is not affected by this instruction, a positive number if it pushes onto the stack, and a negative number if it pops from the stack
    • getMethodIndex

      public int getMethodIndex()
      Return the index in the class ConstantPool of the ComplexEntry describing the method to operate on.
    • setMethodIndex

      public MethodInstruction setMethodIndex(int index)
      Set the index in the class ConstantPool of the ComplexEntry describing the method to operate on.
      Returns:
      this instruction, for method chaining
    • getMethod

      public BCMethod getMethod()
      Return the method this instruction operates on, or null if not set.
    • setMethod

      public MethodInstruction setMethod(BCMethod method)
      Set the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • setMethod

      public MethodInstruction setMethod(Method method)
      Set the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • setMethod

      public MethodInstruction setMethod(Constructor method)
      Set the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • setMethod

      public MethodInstruction setMethod(String dec, String name, String returnType, String[] params)
      Set the method this instruction operates on.
      Parameters:
      dec - the full class name of the method's declaring class
      name - the method name
      returnType - the full class name of the method return type
      param - the full class names of the method param types
      Returns:
      this instruction, for method chaining
    • setMethod

      private MethodInstruction setMethod(String dec, String name, String returnType, String[] params, boolean copy)
      Set the method this instruction operates on.
      Parameters:
      dec - the full class name of the method's declaring class, or the bootstrap index for InvokeDynamic
      name - the method name
      returnType - the full class name of the method return type
      copy - whether to copy the the parameter array
      param - the full class names of the method param types
      Returns:
      this instruction, for method chaining
    • setMethod

      public MethodInstruction setMethod(String name, String returnType, String[] params)
      Set the method this instruction operates on, for methods that are declared by the current class.
      Parameters:
      name - the method name
      returnType - the full class name of the method return type
      param - the full class names of the method param types
      Returns:
      this instruction, for method chaining
    • setMethod

      public MethodInstruction setMethod(Class dec, String name, Class returnType, Class[] params)
      Set the method this instruction operates on.
      Parameters:
      dec - the method's declaring class
      name - the method name
      returnType - the class of the method return type
      param - the class of the method param types
      Returns:
      this instruction, for method chaining
    • setMethod

      public MethodInstruction setMethod(String name, Class returnType, Class[] params)
      Set the method this instruction operates on, for methods that are declared by the current class.
      Parameters:
      name - the method name
      returnType - the class of the method return type
      param - the class of the method param types
      Returns:
      this instruction, for method chaining
    • setMethod

      public MethodInstruction setMethod(BCClass dec, String name, BCClass returnType, BCClass[] params)
      Set the method this instruction operates on.
      Parameters:
      dec - the method's declaring class
      name - the method name
      returnType - the class of the method return type
      param - the class of the method param types
      Returns:
      this instruction, for method chaining
    • setMethod

      public MethodInstruction setMethod(String name, BCClass returnType, BCClass[] params)
      Set the method this instruction operates on, for methods that are declared by the current class.
      Parameters:
      name - the method name
      returnType - the class of the method return type
      param - the class of the method param types
      Returns:
      this instruction, for method chaining
    • getMethodName

      public String getMethodName()
      Return the name of the method this instruction operates on, or null if not set.
    • setMethodName

      public MethodInstruction setMethodName(String name)
      Set the name of the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • getMethodReturnName

      public String getMethodReturnName()
      Return the return type of the method this instruction operates on, or null if not set.
    • getMethodReturnType

      public Class getMethodReturnType()
      Return the return type of the method this instruction operates on, or null if not set.
    • getMethodReturnBC

      public BCClass getMethodReturnBC()
      Return the return type of the method this instruction operates on, or null if not set.
    • setMethodReturn

      public MethodInstruction setMethodReturn(String type)
      Set the return type of the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • setMethodReturn

      public MethodInstruction setMethodReturn(Class type)
      Set the return type of the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • setMethodReturn

      public MethodInstruction setMethodReturn(BCClass type)
      Set the return type of the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • getMethodParamNames

      public String[] getMethodParamNames()
      Return the param types of the method this instruction operates on, or empty array if none.
    • getMethodParamTypes

      public Class[] getMethodParamTypes()
      Return the param types of the method this instruction operates on, or empty array if none.
    • getMethodParamBCs

      public BCClass[] getMethodParamBCs()
      Return the param types of the method this instruction operates on, or empty array if none.
    • setMethodParams

      public MethodInstruction setMethodParams(String[] types)
      Set the param types of the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • setMethodParams

      public void setMethodParams(Class[] types)
      Set the param types of the method this instruction operates on.
    • setMethodParams

      public void setMethodParams(BCClass[] types)
      Set the param types of the method this instruction operates on.
    • getMethodDeclarerName

      public String getMethodDeclarerName()
      Return the declaring type of the method this instruction operates on, or null if not set.
    • getMethodDeclarerType

      public Class getMethodDeclarerType()
      Return the declaring type of the method this instruction operates on, or null if not set.
    • getMethodDeclarerBC

      public BCClass getMethodDeclarerBC()
      Return the declaring type of the method this instruction operates on, or null if not set.
    • setMethodDeclarer

      public MethodInstruction setMethodDeclarer(String type)
      Set the declaring type of the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • setMethodDeclarer

      public MethodInstruction setMethodDeclarer(Class type)
      Set the declaring type of the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • setMethodDeclarer

      public MethodInstruction setMethodDeclarer(BCClass type)
      Set the declaring type of the method this instruction operates on.
      Returns:
      this instruction, for method chaining
    • equalsInstruction

      public boolean equalsInstruction(Instruction other)
      MethodInstructions are equal if the method they reference is the same, or if the method of either is unset.
      Overrides:
      equalsInstruction in class Instruction
    • acceptVisit

      public void acceptVisit(BCVisitor visit)
      Description copied from interface: VisitAcceptor
      Accept a visit from a BCVisitor, calling the appropriate methods to notify the visitor that it has entered this entity, and to provide it with the proper callbacks for each sub-entity owned by this one.
      Specified by:
      acceptVisit in interface VisitAcceptor
      Overrides:
      acceptVisit in class Instruction
    • read

      void read(Instruction orig)
      Description copied from class: Instruction
      Copy the given instruction data.
      Overrides:
      read in class Instruction
    • read

      void read(DataInput in) throws IOException
      Description copied from class: Instruction
      Read the arguments for this opcode from the given stream. This method should be overridden by opcodes that take arguments.
      Overrides:
      read in class Instruction
      Throws:
      IOException
    • write

      void write(DataOutput out) throws IOException
      Description copied from class: Instruction
      Write the arguments for this opcode to the given stream. This method should be overridden by opcodes that take arguments.
      Overrides:
      write in class Instruction
      Throws:
      IOException