proguard.optimize.evaluation
Class PartialEvaluator

java.lang.Object
  extended by proguard.classfile.util.SimplifiedVisitor
      extended by proguard.optimize.evaluation.PartialEvaluator
All Implemented Interfaces:
AttributeVisitor, ExceptionInfoVisitor

public class PartialEvaluator
extends SimplifiedVisitor
implements AttributeVisitor, ExceptionInfoVisitor

This AttributeVisitor performs partial evaluation on the code attributes that it visits.


Field Summary
static int AT_CATCH_ENTRY
           
static int AT_METHOD_ENTRY
           
static int NONE
           
 
Constructor Summary
PartialEvaluator()
          Creates a simple PartialEvaluator.
PartialEvaluator(ValueFactory valueFactory, InvocationUnit invocationUnit, boolean evaluateAllCode)
          Creates a new PartialEvaluator.
 
Method Summary
 InstructionOffsetValue branchOrigins(int instructionOffset)
          Returns the instruction offsets that branch to the given instruction offset.
 InstructionOffsetValue branchTargets(int instructionOffset)
          Returns the instruction offsets to which the given instruction offset branches.
 int creationOffset(int offset)
          Returns the offset of the 'new' instruction that corresponds to the invocation of the instance initializer at the given offset, or AT_METHOD_ENTRY if the invocation is calling the "super" or "this" initializer method, , or NONE if it is not a 'new' instruction.
 TracedStack getStackAfter(int instructionOffset)
          Returns the stack after execution of the instruction at the given offset.
 TracedStack getStackBefore(int instructionOffset)
          Returns the stack before execution of the instruction at the given offset.
 TracedVariables getVariablesAfter(int instructionOffset)
          Returns the variables after execution of the instruction at the given offset.
 TracedVariables getVariablesBefore(int instructionOffset)
          Returns the variables before execution of the instruction at the given offset.
 int initializationOffset(int instructionOffset)
          Returns the instruction offset at which the object instance that is created at the given 'new' instruction offset is initialized, or NONE if it is not being created.
 int initializedVariable(int instructionOffset)
          Returns the variable that is initialized at the given instruction offset, or NONE if no variable was initialized.
 boolean isBranchOrExceptionTarget(int instructionOffset)
          Returns whether the instruction at the given offset is the target of a branch instruction or an exception.
 boolean isInitializer()
          Returns whether the method is an instance initializer.
 boolean isInstruction(int instructionOffset)
          Returns whether there is an instruction at the given offset.
 boolean isSubroutine(int instructionOffset)
          Returns whether the instruction at the given offset is part of a subroutine.
 boolean isSubroutineInvocation(int instructionOffset)
          Returns whether the instruction at the given offset is a subroutine invocation.
 boolean isSubroutineReturning(int instructionOffset)
          Returns whether the subroutine at the given offset is ever returning by means of a regular 'ret' instruction.
 boolean isSubroutineStart(int instructionOffset)
          Returns whether the instruction at the given offset is the start of a subroutine.
 boolean isTraced(int instructionOffset)
          Returns whether the instruction at the given offset has ever been executed during the partial evaluation.
 boolean isTraced(int startOffset, int endOffset)
          Returns whether a block of instructions is ever used.
 int subroutineEnd(int instructionOffset)
          Returns the offset after the subroutine that starts at the given offset.
 int superInitializationOffset()
          Returns the instruction offset at which this initializer is calling the "super" or "this" initializer method, or NONE if it is not an initializer.
 void visitAnyAttribute(Clazz clazz, Attribute attribute)
          Visit any type of attribute.
 void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
           
 void visitCodeAttribute0(Clazz clazz, Method method, CodeAttribute codeAttribute)
           
 void visitExceptionInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, ExceptionInfo exceptionInfo)
           
 
Methods inherited from class proguard.classfile.util.SimplifiedVisitor
visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotationDefaultAttribute, visitAnnotationElementValue, visitAnyAnnotationsAttribute, visitAnyClass, visitAnyConstant, visitAnyElementValue, visitAnyInstruction, visitAnyMember, visitAnyMethodrefConstant, visitAnyParameterAnnotationsAttribute, visitAnyRefConstant, visitAnyStackMapFrame, visitAnySwitchInstruction, visitAnyVerificationType, visitArrayElementValue, visitBranchInstruction, visitClassConstant, visitClassElementValue, visitConstantElementValue, visitConstantInstruction, visitConstantValueAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDoubleConstant, visitDoubleType, visitEnclosingMethodAttribute, visitEnumConstantElementValue, visitExceptionsAttribute, visitFieldrefConstant, visitFloatConstant, visitFloatType, visitFullFrame, visitInnerClassesAttribute, visitIntegerConstant, visitIntegerType, visitInterfaceMethodrefConstant, visitLessZeroFrame, visitLibraryClass, visitLibraryField, visitLibraryMember, visitLibraryMethod, visitLineNumberTableAttribute, visitLocalVariableTableAttribute, visitLocalVariableTypeTableAttribute, visitLongConstant, visitLongType, visitLookUpSwitchInstruction, visitMethodrefConstant, visitMoreZeroFrame, visitNameAndTypeConstant, visitNullType, visitObjectType, visitProgramClass, visitProgramField, visitProgramMember, visitProgramMethod, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleParameterAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleParameterAnnotationsAttribute, visitSameOneFrame, visitSameZeroFrame, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSimpleInstruction, visitSourceDirAttribute, visitSourceFileAttribute, visitStackDoubleType, visitStackFloatType, visitStackIntegerType, visitStackLongType, visitStackMapAttribute, visitStackMapTableAttribute, visitStackNullType, visitStackObjectType, visitStackTopType, visitStackUninitializedThisType, visitStackUninitializedType, visitStringConstant, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitTableSwitchInstruction, visitTopType, visitUninitializedThisType, visitUninitializedType, visitUnknownAttribute, visitUtf8Constant, visitVariableInstruction, visitVariablesDoubleType, visitVariablesFloatType, visitVariablesIntegerType, visitVariablesLongType, visitVariablesNullType, visitVariablesObjectType, visitVariablesTopType, visitVariablesUninitializedThisType, visitVariablesUninitializedType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface proguard.classfile.attribute.visitor.AttributeVisitor
visitAnnotationDefaultAttribute, visitConstantValueAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitEnclosingMethodAttribute, visitExceptionsAttribute, visitInnerClassesAttribute, visitLineNumberTableAttribute, visitLocalVariableTableAttribute, visitLocalVariableTypeTableAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleParameterAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleParameterAnnotationsAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSourceDirAttribute, visitSourceFileAttribute, visitStackMapAttribute, visitStackMapTableAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitUnknownAttribute
 

Field Detail

NONE

public static final int NONE
See Also:
Constant Field Values

AT_METHOD_ENTRY

public static final int AT_METHOD_ENTRY
See Also:
Constant Field Values

AT_CATCH_ENTRY

public static final int AT_CATCH_ENTRY
See Also:
Constant Field Values
Constructor Detail

PartialEvaluator

public PartialEvaluator()
Creates a simple PartialEvaluator.


PartialEvaluator

public PartialEvaluator(ValueFactory valueFactory,
                        InvocationUnit invocationUnit,
                        boolean evaluateAllCode)
Creates a new PartialEvaluator.

Parameters:
valueFactory - the value factory that will create all values during evaluation.
invocationUnit - the invocation unit that will handle all communication with other fields and methods.
evaluateAllCode - a flag that specifies whether all branch targets and exception handlers should be evaluated, even if they are unreachable.
Method Detail

visitAnyAttribute

public void visitAnyAttribute(Clazz clazz,
                              Attribute attribute)
Description copied from class: SimplifiedVisitor
Visit any type of attribute.

Overrides:
visitAnyAttribute in class SimplifiedVisitor

visitCodeAttribute

public void visitCodeAttribute(Clazz clazz,
                               Method method,
                               CodeAttribute codeAttribute)
Specified by:
visitCodeAttribute in interface AttributeVisitor
Overrides:
visitCodeAttribute in class SimplifiedVisitor

visitCodeAttribute0

public void visitCodeAttribute0(Clazz clazz,
                                Method method,
                                CodeAttribute codeAttribute)

isTraced

public boolean isTraced(int startOffset,
                        int endOffset)
Returns whether a block of instructions is ever used.


isTraced

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


isInstruction

public boolean isInstruction(int instructionOffset)
Returns whether there is an instruction at the given offset.


isBranchOrExceptionTarget

public boolean isBranchOrExceptionTarget(int instructionOffset)
Returns whether the instruction at the given offset is the target of a branch instruction or an exception.


isSubroutineStart

public boolean isSubroutineStart(int instructionOffset)
Returns whether the instruction at the given offset is the start of a subroutine.


isSubroutineInvocation

public boolean isSubroutineInvocation(int instructionOffset)
Returns whether the instruction at the given offset is a subroutine invocation.


isSubroutine

public boolean isSubroutine(int instructionOffset)
Returns whether the instruction at the given offset is part of a subroutine.


isSubroutineReturning

public boolean isSubroutineReturning(int instructionOffset)
Returns whether the subroutine at the given offset is ever returning by means of a regular 'ret' instruction.


subroutineEnd

public int subroutineEnd(int instructionOffset)
Returns the offset after the subroutine that starts at the given offset.


initializationOffset

public int initializationOffset(int instructionOffset)
Returns the instruction offset at which the object instance that is created at the given 'new' instruction offset is initialized, or NONE if it is not being created.


isInitializer

public boolean isInitializer()
Returns whether the method is an instance initializer.


superInitializationOffset

public int superInitializationOffset()
Returns the instruction offset at which this initializer is calling the "super" or "this" initializer method, or NONE if it is not an initializer.


creationOffset

public int creationOffset(int offset)
Returns the offset of the 'new' instruction that corresponds to the invocation of the instance initializer at the given offset, or AT_METHOD_ENTRY if the invocation is calling the "super" or "this" initializer method, , or NONE if it is not a 'new' instruction.


getVariablesBefore

public TracedVariables getVariablesBefore(int instructionOffset)
Returns the variables before execution of the instruction at the given offset.


getVariablesAfter

public TracedVariables getVariablesAfter(int instructionOffset)
Returns the variables after execution of the instruction at the given offset.


getStackBefore

public TracedStack getStackBefore(int instructionOffset)
Returns the stack before execution of the instruction at the given offset.


getStackAfter

public TracedStack getStackAfter(int instructionOffset)
Returns the stack after execution of the instruction at the given offset.


branchOrigins

public InstructionOffsetValue branchOrigins(int instructionOffset)
Returns the instruction offsets that branch to the given instruction offset.


branchTargets

public InstructionOffsetValue branchTargets(int instructionOffset)
Returns the instruction offsets to which the given instruction offset branches.


initializedVariable

public int initializedVariable(int instructionOffset)
Returns the variable that is initialized at the given instruction offset, or NONE if no variable was initialized.


visitExceptionInfo

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