Package proguard.evaluation
Class ReferenceTracingValueFactory
java.lang.Object
proguard.evaluation.ReferenceTracingValueFactory
- All Implemented Interfaces:
InstructionVisitor,ValueFactory
public class ReferenceTracingValueFactory
extends Object
implements InstructionVisitor, ValueFactory
This
ValueFactory tags newly created reference values so they can be traced throughout
the execution of a method.- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionReferenceTracingValueFactory(ValueFactory valueFactory) Creates a new ReferenceTracingValueFactory that attaches instruction offset values based on being used as an instruction visitor.ReferenceTracingValueFactory(ValueFactory valueFactory, boolean preserveTraceValueOnCasts) Creates a new ReferenceTracingValueFactory that attaches instruction offset values based on being used as an instruction visitor. -
Method Summary
Modifier and TypeMethodDescriptioncast(TracedReferenceValue referenceValue, String type, Clazz referencedClass, boolean alwaysCast) Casts a given traced reference value to the given type, either keeping its trace value or setting a new one.createArrayReferenceValue(String type, Clazz referencedClass, IntegerValue arrayLength) Creates a new ReferenceValue that represents a non-null array with elements of the given type, with the given length.createArrayReferenceValue(String type, Clazz referencedClass, IntegerValue arrayLength, Object elementValues) Creates a new ReferenceValue that represents an array with elements of the given type, with the given length and initial element values.Creates a new DoubleValue with an undefined value.createDoubleValue(double value) Creates a new DoubleValue with a given particular value.Creates a new FloatValue with an undefined value.createFloatValue(float value) Creates a new FloatValue with a given particular value.Creates a new IntegerValue with an undefined value.createIntegerValue(int value) Creates a new IntegerValue with a given particular value.createIntegerValue(int min, int max) Creates a new IntegerValue with a given possible range.Creates a new LongValue with an undefined value.createLongValue(long value) Creates a new LongValue with a given particular value.Creates a new ReferenceValue of an undefined type.createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull) Creates a new ReferenceValue that represents the given type.createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Object value) Deprecated.createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, CodeLocation creationLocation) Creates a new ReferenceValue that represents the given type, created at the specified code location.createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Clazz creationClass, Method creationMethod, int creationOffset) Deprecated.createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Clazz creationClass, Method creationMethod, int creationOffset, Object value) Deprecated.createReferenceValue(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, @NotNull AnalyzedObject value) Creates a new ReferenceValue that represents the given type.createReferenceValue(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, CodeLocation creationLocation, @NotNull AnalyzedObject value) Creates a new ReferenceValue that represents the given type, created at the specified code location.createReferenceValueForId(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Object id) Creates a new ReferenceValue that represents the given type with a specified ID.createReferenceValueForId(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Object id, Object value) Deprecated.createReferenceValueForId(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Object id, @NotNull AnalyzedObject value) Creates a new ReferenceValue that represents the given type with a specified ID.Creates a new ReferenceValue that representsnull.createValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull) Creates a new Value of the given type.voidsetTraceValue(Value traceValue) trace(ReferenceValue referenceValue) Attaches the current trace value to given reference value.Attaches the current trace value to given value, if it is a reference value.voidvisitAnyInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, Instruction instruction) Visits any Instruction instance.voidvisitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction) voidvisitSimpleInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SimpleInstruction simpleInstruction) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface proguard.classfile.instruction.visitor.InstructionVisitor
visitAnySwitchInstruction, visitBranchInstruction, visitLookUpSwitchInstruction, visitTableSwitchInstruction, visitVariableInstructionMethods inherited from interface proguard.evaluation.value.ValueFactory
createReferenceValue, createReferenceValue, createReferenceValue
-
Constructor Details
-
ReferenceTracingValueFactory
Creates a new ReferenceTracingValueFactory that attaches instruction offset values based on being used as an instruction visitor. This instance preserves trace values in thecast(proguard.evaluation.value.TracedReferenceValue, java.lang.String, proguard.classfile.Clazz, boolean)method.- Parameters:
valueFactory- the value factory that creates the actual values.
-
ReferenceTracingValueFactory
Creates a new ReferenceTracingValueFactory that attaches instruction offset values based on being used as an instruction visitor.- Parameters:
valueFactory- the value factory that creates the actual values.preserveTraceValueOnCasts- specifies whether to preserve the trace value for reference values that are passed to thecast(proguard.evaluation.value.TracedReferenceValue, java.lang.String, proguard.classfile.Clazz, boolean)method.
-
-
Method Details
-
setTraceValue
-
cast
public TracedReferenceValue cast(TracedReferenceValue referenceValue, String type, Clazz referencedClass, boolean alwaysCast) Casts a given traced reference value to the given type, either keeping its trace value or setting a new one. -
visitAnyInstruction
public void visitAnyInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, Instruction instruction) Description copied from interface:InstructionVisitorVisits any Instruction instance. The more specific default implementations of this interface delegate to this method.- Specified by:
visitAnyInstructionin interfaceInstructionVisitor
-
visitSimpleInstruction
public void visitSimpleInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SimpleInstruction simpleInstruction) - Specified by:
visitSimpleInstructionin interfaceInstructionVisitor
-
visitConstantInstruction
public void visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction) - Specified by:
visitConstantInstructionin interfaceInstructionVisitor
-
createValue
public Value createValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull) Description copied from interface:ValueFactoryCreates a new Value of the given type. The type must be a fully specified internal type for primitives, classes, or arrays.- Specified by:
createValuein interfaceValueFactory
-
createIntegerValue
Description copied from interface:ValueFactoryCreates a new IntegerValue with an undefined value.- Specified by:
createIntegerValuein interfaceValueFactory
-
createIntegerValue
Description copied from interface:ValueFactoryCreates a new IntegerValue with a given particular value.- Specified by:
createIntegerValuein interfaceValueFactory
-
createIntegerValue
Description copied from interface:ValueFactoryCreates a new IntegerValue with a given possible range.- Specified by:
createIntegerValuein interfaceValueFactory
-
createLongValue
Description copied from interface:ValueFactoryCreates a new LongValue with an undefined value.- Specified by:
createLongValuein interfaceValueFactory
-
createLongValue
Description copied from interface:ValueFactoryCreates a new LongValue with a given particular value.- Specified by:
createLongValuein interfaceValueFactory
-
createFloatValue
Description copied from interface:ValueFactoryCreates a new FloatValue with an undefined value.- Specified by:
createFloatValuein interfaceValueFactory
-
createFloatValue
Description copied from interface:ValueFactoryCreates a new FloatValue with a given particular value.- Specified by:
createFloatValuein interfaceValueFactory
-
createDoubleValue
Description copied from interface:ValueFactoryCreates a new DoubleValue with an undefined value.- Specified by:
createDoubleValuein interfaceValueFactory
-
createDoubleValue
Description copied from interface:ValueFactoryCreates a new DoubleValue with a given particular value.- Specified by:
createDoubleValuein interfaceValueFactory
-
createReferenceValue
Description copied from interface:ValueFactoryCreates a new ReferenceValue of an undefined type.- Specified by:
createReferenceValuein interfaceValueFactory
-
createReferenceValueNull
Description copied from interface:ValueFactoryCreates a new ReferenceValue that representsnull.- Specified by:
createReferenceValueNullin interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull) Description copied from interface:ValueFactoryCreates a new ReferenceValue that represents the given type. The type must be an internal class name or an array type. If the type isnull, the ReferenceValue representsnull.- Specified by:
createReferenceValuein interfaceValueFactory
-
createReferenceValue
@Deprecated public ReferenceValue createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Object value) Deprecated.Deprecated, usecreateReferenceValue(Clazz, boolean, boolean, AnalyzedObject).- Specified by:
createReferenceValuein interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, @NotNull @NotNull AnalyzedObject value) Description copied from interface:ValueFactoryCreates a new ReferenceValue that represents the given type. The type must be an internal class name or an array type. If the type isnull, the ReferenceValue representsnull.The object wrapped by
AnalyzedObjectis either the value of the reference during execution or aModelof it.- Specified by:
createReferenceValuein interfaceValueFactory
-
createReferenceValue
@Deprecated public ReferenceValue createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Clazz creationClass, Method creationMethod, int creationOffset) Deprecated.- Specified by:
createReferenceValuein interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, CodeLocation creationLocation) Description copied from interface:ValueFactoryCreates a new ReferenceValue that represents the given type, created at the specified code location. The type must be an internal class name or an array type. If the type isnull, the ReferenceValue representsnull.- Specified by:
createReferenceValuein interfaceValueFactory
-
createReferenceValue
@Deprecated public ReferenceValue createReferenceValue(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Clazz creationClass, Method creationMethod, int creationOffset, Object value) Deprecated.- Specified by:
createReferenceValuein interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, CodeLocation creationLocation, @NotNull @NotNull AnalyzedObject value) Description copied from interface:ValueFactoryCreates a new ReferenceValue that represents the given type, created at the specified code location. The type must be an internal class name or an array type. If the type isnull, the ReferenceValue representsnull.The object wrapped by
AnalyzedObjectis either the value of the reference during execution or aModelof it.- Specified by:
createReferenceValuein interfaceValueFactory
-
createReferenceValueForId
public ReferenceValue createReferenceValueForId(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Object id) Description copied from interface:ValueFactoryCreates a new ReferenceValue that represents the given type with a specified ID. The type must be an internal class name or an array type. If the type isnull, the ReferenceValue representsnull.- Specified by:
createReferenceValueForIdin interfaceValueFactory
-
createReferenceValueForId
@Deprecated public ReferenceValue createReferenceValueForId(String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Object id, Object value) Deprecated.- Specified by:
createReferenceValueForIdin interfaceValueFactory
-
createReferenceValueForId
public ReferenceValue createReferenceValueForId(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Object id, @NotNull @NotNull AnalyzedObject value) Description copied from interface:ValueFactoryCreates a new ReferenceValue that represents the given type with a specified ID. The type must be an internal class name or an array type. If the type isnull, the ReferenceValue representsnull.The object wrapped by
AnalyzedObjectis either the value of the reference during execution or aModelof it.- Specified by:
createReferenceValueForIdin interfaceValueFactory
-
createArrayReferenceValue
public ReferenceValue createArrayReferenceValue(String type, Clazz referencedClass, IntegerValue arrayLength) Description copied from interface:ValueFactoryCreates a new ReferenceValue that represents a non-null array with elements of the given type, with the given length.- Specified by:
createArrayReferenceValuein interfaceValueFactory
-
createArrayReferenceValue
public ReferenceValue createArrayReferenceValue(String type, Clazz referencedClass, IntegerValue arrayLength, Object elementValues) Creates a new ReferenceValue that represents an array with elements of the given type, with the given length and initial element values.- Specified by:
createArrayReferenceValuein interfaceValueFactory
-
trace
Attaches the current trace value to given value, if it is a reference value. -
trace
Attaches the current trace value to given reference value.
-