Class SimplifiedInvocationUnit

java.lang.Object
proguard.evaluation.SimplifiedInvocationUnit
All Implemented Interfaces:
ConstantVisitor, ParameterVisitor, InvocationUnit
Direct Known Subclasses:
BasicInvocationUnit, ReferenceTracingInvocationUnit

public abstract class SimplifiedInvocationUnit extends Object implements InvocationUnit, ParameterVisitor, ConstantVisitor
This InvocationUnit sets up the variables for entering a method, and it updates the stack for the invocation of a class member, using simple values.
  • Field Details

    • variables

      protected Variables variables
    • isStatic

      protected boolean isStatic
    • isLoad

      protected boolean isLoad
    • stack

      protected Stack stack
    • method

      protected Method method
  • Constructor Details

    • SimplifiedInvocationUnit

      public SimplifiedInvocationUnit()
  • Method Details

    • enterMethod

      public void enterMethod(Clazz clazz, Method method, Variables variables)
      Description copied from interface: InvocationUnit
      Sets up the given variables for entering the given method.
      Specified by:
      enterMethod in interface InvocationUnit
    • visitParameter

      public void visitParameter(Clazz clazz, Member member, int parameterIndex, int parameterCount, int parameterOffset, int parameterSize, String parameterType, Clazz referencedClass)
      Description copied from interface: ParameterVisitor
      Visits the given parameter.
      Specified by:
      visitParameter in interface ParameterVisitor
      Parameters:
      clazz - the class of the method.
      member - the field or method of the parameter.
      parameterIndex - the index of the parameter.
      parameterCount - the total number of parameters.
      parameterOffset - the offset of the parameter, accounting for longs and doubles taking up two entries.
      parameterSize - the total size of the parameters, accounting for longs and doubles taking up two entries.
      parameterType - the parameter type.
      referencedClass - the class contained in the parameter type, if any.
    • exitMethod

      public void exitMethod(Clazz clazz, Method method, Value returnValue)
      Description copied from interface: InvocationUnit
      Exits the given method with the given return value.
      Specified by:
      exitMethod in interface InvocationUnit
    • enterExceptionHandler

      public void enterExceptionHandler(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, int catchType, Stack stack)
      Description copied from interface: InvocationUnit
      Sets up the given stack for entering the given exception handler.
      Specified by:
      enterExceptionHandler in interface InvocationUnit
    • invokeMember

      public void invokeMember(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction, Stack stack, Variables variables)
      Description copied from interface: InvocationUnit
      Updates the given stack corresponding to the execution of the given field or method reference instruction.
      Specified by:
      invokeMember in interface InvocationUnit
    • visitFieldrefConstant

      public void visitFieldrefConstant(Clazz clazz, FieldrefConstant fieldrefConstant)
      Specified by:
      visitFieldrefConstant in interface ConstantVisitor
    • visitAnyMethodrefConstant

      public void visitAnyMethodrefConstant(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant)
      Description copied from interface: ConstantVisitor
      Visits any RefConstant instance. The more specific default implementations of this interface delegate to this method.
      Specified by:
      visitAnyMethodrefConstant in interface ConstantVisitor
    • visitInvokeDynamicConstant

      public void visitInvokeDynamicConstant(Clazz clazz, InvokeDynamicConstant invokeDynamicConstant)
      Specified by:
      visitInvokeDynamicConstant in interface ConstantVisitor
    • getExceptionValue

      public abstract Value getExceptionValue(Clazz clazz, ClassConstant catchClassConstant)
      Returns the value of the specified exception.
    • setFieldClassValue

      public abstract void setFieldClassValue(Clazz clazz, FieldrefConstant fieldrefConstant, ReferenceValue value)
      Sets the class through which the specified field is accessed.
    • getFieldClassValue

      public abstract Value getFieldClassValue(Clazz clazz, FieldrefConstant fieldrefConstant, String type)
      Returns the class though which the specified field is accessed.
    • setFieldValue

      public abstract void setFieldValue(Clazz clazz, FieldrefConstant fieldrefConstant, Value value)
      Sets the value of the specified field.
    • getFieldValue

      public abstract Value getFieldValue(Clazz clazz, FieldrefConstant fieldrefConstant, String type)
      Returns the value of the specified field.
    • setMethodParameterValue

      public abstract void setMethodParameterValue(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, int parameterIndex, Value value)
      Sets the value of the specified method parameter.
    • getMethodParameterValue

      public abstract Value getMethodParameterValue(Clazz clazz, Method method, int parameterIndex, String type, Clazz referencedClass)
      Returns the value of the specified method parameter.
    • setMethodReturnValue

      public abstract void setMethodReturnValue(Clazz clazz, Method method, Value value)
      Sets the return value of the specified method.
    • getMethodReturnValue

      public abstract Value getMethodReturnValue(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, String type)
      Returns the return value of the specified method.
    • getMethodReturnValue

      public abstract Value getMethodReturnValue(Clazz clazz, InvokeDynamicConstant invokeDynamicConstant, String type)
      Returns the return value of the specified method.
    • methodMayHaveSideEffects

      protected boolean methodMayHaveSideEffects(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, String returnType)
      Returns true if the method itself can modify the stack/variables and therefore needs to be executed even if it returns void.