Package proguard.evaluation
Class ReferenceTracingInvocationUnit
- java.lang.Object
-
- proguard.evaluation.SimplifiedInvocationUnit
-
- proguard.evaluation.ReferenceTracingInvocationUnit
-
- All Implemented Interfaces:
ConstantVisitor
,ParameterVisitor
,InvocationUnit
public class ReferenceTracingInvocationUnit extends SimplifiedInvocationUnit
ThisInvocationUnit
tags reference values of retrieved fields, passed method parameters, method return values, and caught exceptions, so they can be traced throughout the execution of a method. The tags are instruction offsets or parameter indices (not parameter offsets).- See Also:
TracedReferenceValue
,InstructionOffsetValue
-
-
Constructor Summary
Constructors Constructor Description ReferenceTracingInvocationUnit(SimplifiedInvocationUnit invocationUnit)
Creates a new ReferenceTracingInvocationUnit.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
enterExceptionHandler(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, int catchType, Stack stack)
Sets up the given stack for entering the given exception handler.Value
getExceptionValue(Clazz clazz, ClassConstant catchClassConstant)
Returns the value of the specified exception.Value
getFieldClassValue(Clazz clazz, FieldrefConstant fieldrefConstant, java.lang.String type)
Returns the class though which the specified field is accessed.Value
getFieldValue(Clazz clazz, FieldrefConstant fieldrefConstant, java.lang.String type)
Returns the value of the specified field.Value
getMethodParameterValue(Clazz clazz, Method method, int parameterIndex, java.lang.String type, Clazz referencedClass)
Returns the value of the specified method parameter.Value
getMethodReturnValue(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, java.lang.String type)
Returns the return value of the specified method.Value
getMethodReturnValue(Clazz clazz, InvokeDynamicConstant invokeDynamicConstant, java.lang.String type)
Returns the return value of the specified method.void
invokeMember(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction, Stack stack, Variables variables)
Updates the given stack corresponding to the execution of the given field or method reference instruction.void
setFieldClassValue(Clazz clazz, FieldrefConstant fieldrefConstant, ReferenceValue value)
Sets the class through which the specified field is accessed.void
setFieldValue(Clazz clazz, FieldrefConstant fieldrefConstant, Value value)
Sets the value of the specified field.void
setMethodParameterValue(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, int parameterIndex, Value value)
Sets the value of the specified method parameter.void
setMethodReturnValue(Clazz clazz, Method method, Value value)
Sets the return value of the specified method.protected Value
trace(Value value, int trace)
Sets or replaces the trace value on a given value, if it's a reference value, returning the result.protected Value
trace(Value value, InstructionOffsetValue traceValue)
Sets or replaces the trace value on a given value, returning the result.-
Methods inherited from class proguard.evaluation.SimplifiedInvocationUnit
enterMethod, exitMethod, methodMayHaveSideEffects, visitAnyMethodrefConstant, visitFieldrefConstant, visitInvokeDynamicConstant, visitParameter
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface proguard.classfile.constant.visitor.ConstantVisitor
visitAnyConstant, visitAnyRefConstant, visitClassConstant, visitDoubleConstant, visitDynamicConstant, visitFloatConstant, visitIntegerConstant, visitInterfaceMethodrefConstant, visitLongConstant, visitMethodHandleConstant, visitMethodrefConstant, visitMethodTypeConstant, visitModuleConstant, visitNameAndTypeConstant, visitPackageConstant, visitPrimitiveArrayConstant, visitStringConstant, visitUtf8Constant
-
-
-
-
Constructor Detail
-
ReferenceTracingInvocationUnit
public ReferenceTracingInvocationUnit(SimplifiedInvocationUnit invocationUnit)
Creates a new ReferenceTracingInvocationUnit.- Parameters:
invocationUnit
- the invocation unit to which invocations will be delegated.
-
-
Method Detail
-
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 interfaceInvocationUnit
- Overrides:
enterExceptionHandler
in classSimplifiedInvocationUnit
-
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 interfaceInvocationUnit
- Overrides:
invokeMember
in classSimplifiedInvocationUnit
-
getExceptionValue
public Value getExceptionValue(Clazz clazz, ClassConstant catchClassConstant)
Description copied from class:SimplifiedInvocationUnit
Returns the value of the specified exception.- Specified by:
getExceptionValue
in classSimplifiedInvocationUnit
-
setFieldClassValue
public void setFieldClassValue(Clazz clazz, FieldrefConstant fieldrefConstant, ReferenceValue value)
Description copied from class:SimplifiedInvocationUnit
Sets the class through which the specified field is accessed.- Specified by:
setFieldClassValue
in classSimplifiedInvocationUnit
-
getFieldClassValue
public Value getFieldClassValue(Clazz clazz, FieldrefConstant fieldrefConstant, java.lang.String type)
Description copied from class:SimplifiedInvocationUnit
Returns the class though which the specified field is accessed.- Specified by:
getFieldClassValue
in classSimplifiedInvocationUnit
-
setFieldValue
public void setFieldValue(Clazz clazz, FieldrefConstant fieldrefConstant, Value value)
Description copied from class:SimplifiedInvocationUnit
Sets the value of the specified field.- Specified by:
setFieldValue
in classSimplifiedInvocationUnit
-
getFieldValue
public Value getFieldValue(Clazz clazz, FieldrefConstant fieldrefConstant, java.lang.String type)
Description copied from class:SimplifiedInvocationUnit
Returns the value of the specified field.- Specified by:
getFieldValue
in classSimplifiedInvocationUnit
-
setMethodParameterValue
public void setMethodParameterValue(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, int parameterIndex, Value value)
Description copied from class:SimplifiedInvocationUnit
Sets the value of the specified method parameter.- Specified by:
setMethodParameterValue
in classSimplifiedInvocationUnit
-
getMethodParameterValue
public Value getMethodParameterValue(Clazz clazz, Method method, int parameterIndex, java.lang.String type, Clazz referencedClass)
Description copied from class:SimplifiedInvocationUnit
Returns the value of the specified method parameter.- Specified by:
getMethodParameterValue
in classSimplifiedInvocationUnit
-
setMethodReturnValue
public void setMethodReturnValue(Clazz clazz, Method method, Value value)
Description copied from class:SimplifiedInvocationUnit
Sets the return value of the specified method.- Specified by:
setMethodReturnValue
in classSimplifiedInvocationUnit
-
getMethodReturnValue
public Value getMethodReturnValue(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, java.lang.String type)
Description copied from class:SimplifiedInvocationUnit
Returns the return value of the specified method.- Specified by:
getMethodReturnValue
in classSimplifiedInvocationUnit
-
getMethodReturnValue
public Value getMethodReturnValue(Clazz clazz, InvokeDynamicConstant invokeDynamicConstant, java.lang.String type)
Description copied from class:SimplifiedInvocationUnit
Returns the return value of the specified method.- Specified by:
getMethodReturnValue
in classSimplifiedInvocationUnit
-
trace
protected Value trace(Value value, int trace)
Sets or replaces the trace value on a given value, if it's a reference value, returning the result.
-
trace
protected Value trace(Value value, InstructionOffsetValue traceValue)
Sets or replaces the trace value on a given value, returning the result.
-
-