Class LivenessAnalyzer

java.lang.Object
proguard.evaluation.LivenessAnalyzer
All Implemented Interfaces:
AttributeVisitor, ExceptionInfoVisitor, InstructionVisitor

public class LivenessAnalyzer extends Object implements AttributeVisitor, InstructionVisitor, ExceptionInfoVisitor
This AttributeVisitor analyzes the liveness of the variables in the code attributes that it visits, based on partial evaluation.
  • Constructor Details

    • LivenessAnalyzer

      public LivenessAnalyzer()
      Creates a new LivenessAnalyzer.
    • LivenessAnalyzer

      public LivenessAnalyzer(PartialEvaluator partialEvaluator, boolean runPartialEvaluator, InitializationFinder initializationFinder, boolean runInitializationFinder)
      Creates a new LivenessAnalyzer that will use the given partial evaluator and initialization finder.
      Parameters:
      partialEvaluator - the evaluator to be used for the analysis.
      runPartialEvaluator - specifies whether to run this evaluator on every code attribute that is visited.
      initializationFinder - the initialization finder to be used for the analysis.
      runInitializationFinder - specifies whether to run this initialization finder on every code attribute that is visited.
  • Method Details

    • isTraced

      public boolean isTraced(int instructionOffset)
      Returns whether the instruction at the given offset has ever been executed during the partial evaluation.
    • isAliveBefore

      public boolean isAliveBefore(int instructionOffset, int variableIndex)
      Returns whether the specified variable is alive before the instruction at the given offset.
    • setAliveBefore

      public void setAliveBefore(int instructionOffset, int variableIndex, boolean alive)
      Sets whether the specified variable is alive before the instruction at the given offset.
    • isAliveAfter

      public boolean isAliveAfter(int instructionOffset, int variableIndex)
      Returns whether the specified variable is alive after the instruction at the given offset.
    • setAliveAfter

      public void setAliveAfter(int instructionOffset, int variableIndex, boolean alive)
      Sets whether the specified variable is alive after the instruction at the given offset.
    • isCategory2

      public boolean isCategory2(int instructionOffset, int variableIndex)
      Returns whether the specified variable takes up two entries after the instruction at the given offset.
    • setCategory2

      public void setCategory2(int instructionOffset, int variableIndex, boolean category2)
      Sets whether the specified variable takes up two entries after the instruction at the given offset.
    • visitAnyAttribute

      public void visitAnyAttribute(Clazz clazz, Attribute attribute)
      Description copied from interface: AttributeVisitor
      Visits any Attribute instance. The more specific default implementations of this interface delegate to this method.
      Specified by:
      visitAnyAttribute in interface AttributeVisitor
    • visitCodeAttribute

      public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
      Specified by:
      visitCodeAttribute in interface AttributeVisitor
    • visitAnyInstruction

      public void visitAnyInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, Instruction instruction)
      Description copied from interface: InstructionVisitor
      Visits any Instruction instance. The more specific default implementations of this interface delegate to this method.
      Specified by:
      visitAnyInstruction in interface InstructionVisitor
    • visitVariableInstruction

      public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
      Specified by:
      visitVariableInstruction in interface InstructionVisitor
    • visitConstantInstruction

      public void visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction)
      Specified by:
      visitConstantInstruction in interface InstructionVisitor
    • visitExceptionInfo

      public void visitExceptionInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, ExceptionInfo exceptionInfo)
      Specified by:
      visitExceptionInfo in interface ExceptionInfoVisitor