Package proguard.evaluation
Class SimplifiedInvocationUnit
- java.lang.Object
-
- proguard.evaluation.SimplifiedInvocationUnit
-
- All Implemented Interfaces:
ConstantVisitor
,ParameterVisitor
,InvocationUnit
- Direct Known Subclasses:
BasicInvocationUnit
,ReferenceTracingInvocationUnit
public abstract class SimplifiedInvocationUnit extends java.lang.Object implements InvocationUnit, ParameterVisitor, ConstantVisitor
ThisInvocationUnit
sets up the variables for entering a method, and it updates the stack for the invocation of a class member, using simple values.
-
-
Constructor Summary
Constructors Constructor Description SimplifiedInvocationUnit()
-
Method Summary
All Methods Instance Methods Abstract 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.void
enterMethod(Clazz clazz, Method method, Variables variables)
Sets up the given variables for entering the given method.void
exitMethod(Clazz clazz, Method method, Value returnValue)
Exits the given method with the given return value.abstract Value
getExceptionValue(Clazz clazz, ClassConstant catchClassConstant)
Returns the value of the specified exception.abstract Value
getFieldClassValue(Clazz clazz, FieldrefConstant fieldrefConstant, java.lang.String type)
Returns the class though which the specified field is accessed.abstract Value
getFieldValue(Clazz clazz, FieldrefConstant fieldrefConstant, java.lang.String type)
Returns the value of the specified field.abstract Value
getMethodParameterValue(Clazz clazz, Method method, int parameterIndex, java.lang.String type, Clazz referencedClass)
Returns the value of the specified method parameter.abstract Value
getMethodReturnValue(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, java.lang.String type)
Returns the return value of the specified method.abstract 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.protected boolean
methodMayHaveSideEffects(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, java.lang.String returnType)
Returns true if the method itself can modify the stack/variables and therefore needs to be executed even if it returns void.abstract void
setFieldClassValue(Clazz clazz, FieldrefConstant fieldrefConstant, ReferenceValue value)
Sets the class through which the specified field is accessed.abstract void
setFieldValue(Clazz clazz, FieldrefConstant fieldrefConstant, Value value)
Sets the value of the specified field.abstract void
setMethodParameterValue(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, int parameterIndex, Value value)
Sets the value of the specified method parameter.abstract void
setMethodReturnValue(Clazz clazz, Method method, Value value)
Sets the return value of the specified method.void
visitAnyMethodrefConstant(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant)
Visits any RefConstant instance.void
visitFieldrefConstant(Clazz clazz, FieldrefConstant fieldrefConstant)
void
visitInvokeDynamicConstant(Clazz clazz, InvokeDynamicConstant invokeDynamicConstant)
void
visitParameter(Clazz clazz, Member member, int parameterIndex, int parameterCount, int parameterOffset, int parameterSize, java.lang.String parameterType, Clazz referencedClass)
Visits the given parameter.-
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
-
-
-
-
Method Detail
-
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 interfaceInvocationUnit
-
visitParameter
public void visitParameter(Clazz clazz, Member member, int parameterIndex, int parameterCount, int parameterOffset, int parameterSize, java.lang.String parameterType, Clazz referencedClass)
Description copied from interface:ParameterVisitor
Visits the given parameter.- Specified by:
visitParameter
in interfaceParameterVisitor
- 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 interfaceInvocationUnit
-
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
-
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
-
visitFieldrefConstant
public void visitFieldrefConstant(Clazz clazz, FieldrefConstant fieldrefConstant)
- Specified by:
visitFieldrefConstant
in interfaceConstantVisitor
-
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 interfaceConstantVisitor
-
visitInvokeDynamicConstant
public void visitInvokeDynamicConstant(Clazz clazz, InvokeDynamicConstant invokeDynamicConstant)
- Specified by:
visitInvokeDynamicConstant
in interfaceConstantVisitor
-
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, java.lang.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, java.lang.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, java.lang.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, java.lang.String type)
Returns the return value of the specified method.
-
getMethodReturnValue
public abstract Value getMethodReturnValue(Clazz clazz, InvokeDynamicConstant invokeDynamicConstant, java.lang.String type)
Returns the return value of the specified method.
-
methodMayHaveSideEffects
protected boolean methodMayHaveSideEffects(Clazz clazz, AnyMethodrefConstant anyMethodrefConstant, java.lang.String returnType)
Returns true if the method itself can modify the stack/variables and therefore needs to be executed even if it returns void.
-
-