Package proguard.evaluation
Class ReferenceTracingValueFactory
- java.lang.Object
-
- proguard.evaluation.ReferenceTracingValueFactory
-
- All Implemented Interfaces:
InstructionVisitor
,ValueFactory
public class ReferenceTracingValueFactory extends java.lang.Object implements InstructionVisitor, ValueFactory
ThisValueFactory
tags newly created reference values so they can be traced throughout the execution of a method.- See Also:
TracedReferenceValue
,InstructionOffsetValue
-
-
Constructor Summary
Constructors Constructor Description ReferenceTracingValueFactory(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
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description TracedReferenceValue
cast(TracedReferenceValue referenceValue, java.lang.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.ReferenceValue
createArrayReferenceValue(java.lang.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.ReferenceValue
createArrayReferenceValue(java.lang.String type, Clazz referencedClass, IntegerValue arrayLength, java.lang.Object elementValues)
Creates a new ReferenceValue that represents an array with elements of the given type, with the given length and initial element values.DoubleValue
createDoubleValue()
Creates a new DoubleValue with an undefined value.DoubleValue
createDoubleValue(double value)
Creates a new DoubleValue with a given particular value.FloatValue
createFloatValue()
Creates a new FloatValue with an undefined value.FloatValue
createFloatValue(float value)
Creates a new FloatValue with a given particular value.IntegerValue
createIntegerValue()
Creates a new IntegerValue with an undefined value.IntegerValue
createIntegerValue(int value)
Creates a new IntegerValue with a given particular value.IntegerValue
createIntegerValue(int min, int max)
Creates a new IntegerValue with a given possible range.LongValue
createLongValue()
Creates a new LongValue with an undefined value.LongValue
createLongValue(long value)
Creates a new LongValue with a given particular value.ReferenceValue
createReferenceValue()
Creates a new ReferenceValue of an undefined type.ReferenceValue
createReferenceValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull)
Creates a new ReferenceValue that represents the given type.ReferenceValue
createReferenceValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, java.lang.Object value)
Deprecated.ReferenceValue
createReferenceValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Clazz creationClass, Method creationMethod, int creationOffset)
Creates a new ReferenceValue that represents the given type, created at the specified code location.ReferenceValue
createReferenceValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Clazz creationClass, Method creationMethod, int creationOffset, java.lang.Object value)
Deprecated.ReferenceValue
createReferenceValue(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, @NotNull AnalyzedObject value)
Creates a new ReferenceValue that represents the given type.ReferenceValue
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.ReferenceValue
createReferenceValueForId(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, java.lang.Object id)
Creates a new ReferenceValue that represents the given type with a specified ID.ReferenceValue
createReferenceValueForId(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, java.lang.Object id, java.lang.Object value)
Deprecated.ReferenceValue
createReferenceValueForId(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, java.lang.Object id, @NotNull AnalyzedObject value)
Creates a new ReferenceValue that represents the given type with a specified ID.ReferenceValue
createReferenceValueNull()
Creates a new ReferenceValue that representsnull
.Value
createValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull)
Creates a new Value of the given type.void
setTraceValue(Value traceValue)
ReferenceValue
trace(ReferenceValue referenceValue)
Attaches the current trace value to given reference value.Value
trace(Value value)
Attaches the current trace value to given value, if it is a reference value.void
visitAnyInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, Instruction instruction)
Visits any Instruction instance.void
visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction)
void
visitSimpleInstruction(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, wait
-
Methods inherited from interface proguard.classfile.instruction.visitor.InstructionVisitor
visitAnySwitchInstruction, visitBranchInstruction, visitLookUpSwitchInstruction, visitTableSwitchInstruction, visitVariableInstruction
-
Methods inherited from interface proguard.evaluation.value.ValueFactory
createReferenceValue, createReferenceValue, createReferenceValue
-
-
-
-
Constructor Detail
-
ReferenceTracingValueFactory
public ReferenceTracingValueFactory(ValueFactory valueFactory)
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
public ReferenceTracingValueFactory(ValueFactory valueFactory, boolean preserveTraceValueOnCasts)
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 Detail
-
setTraceValue
public void setTraceValue(Value traceValue)
-
cast
public TracedReferenceValue cast(TracedReferenceValue referenceValue, java.lang.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:InstructionVisitor
Visits any Instruction instance. The more specific default implementations of this interface delegate to this method.- Specified by:
visitAnyInstruction
in interfaceInstructionVisitor
-
visitSimpleInstruction
public void visitSimpleInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SimpleInstruction simpleInstruction)
- Specified by:
visitSimpleInstruction
in interfaceInstructionVisitor
-
visitConstantInstruction
public void visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction)
- Specified by:
visitConstantInstruction
in interfaceInstructionVisitor
-
createValue
public Value createValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull)
Description copied from interface:ValueFactory
Creates a new Value of the given type. The type must be a fully specified internal type for primitives, classes, or arrays.- Specified by:
createValue
in interfaceValueFactory
-
createIntegerValue
public IntegerValue createIntegerValue()
Description copied from interface:ValueFactory
Creates a new IntegerValue with an undefined value.- Specified by:
createIntegerValue
in interfaceValueFactory
-
createIntegerValue
public IntegerValue createIntegerValue(int value)
Description copied from interface:ValueFactory
Creates a new IntegerValue with a given particular value.- Specified by:
createIntegerValue
in interfaceValueFactory
-
createIntegerValue
public IntegerValue createIntegerValue(int min, int max)
Description copied from interface:ValueFactory
Creates a new IntegerValue with a given possible range.- Specified by:
createIntegerValue
in interfaceValueFactory
-
createLongValue
public LongValue createLongValue()
Description copied from interface:ValueFactory
Creates a new LongValue with an undefined value.- Specified by:
createLongValue
in interfaceValueFactory
-
createLongValue
public LongValue createLongValue(long value)
Description copied from interface:ValueFactory
Creates a new LongValue with a given particular value.- Specified by:
createLongValue
in interfaceValueFactory
-
createFloatValue
public FloatValue createFloatValue()
Description copied from interface:ValueFactory
Creates a new FloatValue with an undefined value.- Specified by:
createFloatValue
in interfaceValueFactory
-
createFloatValue
public FloatValue createFloatValue(float value)
Description copied from interface:ValueFactory
Creates a new FloatValue with a given particular value.- Specified by:
createFloatValue
in interfaceValueFactory
-
createDoubleValue
public DoubleValue createDoubleValue()
Description copied from interface:ValueFactory
Creates a new DoubleValue with an undefined value.- Specified by:
createDoubleValue
in interfaceValueFactory
-
createDoubleValue
public DoubleValue createDoubleValue(double value)
Description copied from interface:ValueFactory
Creates a new DoubleValue with a given particular value.- Specified by:
createDoubleValue
in interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue()
Description copied from interface:ValueFactory
Creates a new ReferenceValue of an undefined type.- Specified by:
createReferenceValue
in interfaceValueFactory
-
createReferenceValueNull
public ReferenceValue createReferenceValueNull()
Description copied from interface:ValueFactory
Creates a new ReferenceValue that representsnull
.- Specified by:
createReferenceValueNull
in interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull)
Description copied from interface:ValueFactory
Creates 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:
createReferenceValue
in interfaceValueFactory
-
createReferenceValue
@Deprecated public ReferenceValue createReferenceValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, java.lang.Object value)
Deprecated.Deprecated, usecreateReferenceValue(Clazz, boolean, boolean, AnalyzedObject)
.- Specified by:
createReferenceValue
in interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, @NotNull @NotNull AnalyzedObject value)
Description copied from interface:ValueFactory
Creates 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
AnalyzedObject
is either the value of the reference during execution or aModel
of it.- Specified by:
createReferenceValue
in interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Clazz creationClass, Method creationMethod, int creationOffset)
Description copied from interface:ValueFactory
Creates 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:
createReferenceValue
in interfaceValueFactory
-
createReferenceValue
@Deprecated public ReferenceValue createReferenceValue(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, Clazz creationClass, Method creationMethod, int creationOffset, java.lang.Object value)
Deprecated.- Specified by:
createReferenceValue
in interfaceValueFactory
-
createReferenceValue
public ReferenceValue createReferenceValue(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, CodeLocation creationLocation, @NotNull @NotNull AnalyzedObject value)
Description copied from interface:ValueFactory
Creates 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
AnalyzedObject
is either the value of the reference during execution or aModel
of it.- Specified by:
createReferenceValue
in interfaceValueFactory
-
createReferenceValueForId
public ReferenceValue createReferenceValueForId(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, java.lang.Object id)
Description copied from interface:ValueFactory
Creates 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:
createReferenceValueForId
in interfaceValueFactory
-
createReferenceValueForId
@Deprecated public ReferenceValue createReferenceValueForId(java.lang.String type, Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, java.lang.Object id, java.lang.Object value)
Deprecated.- Specified by:
createReferenceValueForId
in interfaceValueFactory
-
createReferenceValueForId
public ReferenceValue createReferenceValueForId(Clazz referencedClass, boolean mayBeExtension, boolean mayBeNull, java.lang.Object id, @NotNull @NotNull AnalyzedObject value)
Description copied from interface:ValueFactory
Creates 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
AnalyzedObject
is either the value of the reference during execution or aModel
of it.- Specified by:
createReferenceValueForId
in interfaceValueFactory
-
createArrayReferenceValue
public ReferenceValue createArrayReferenceValue(java.lang.String type, Clazz referencedClass, IntegerValue arrayLength)
Description copied from interface:ValueFactory
Creates a new ReferenceValue that represents a non-null array with elements of the given type, with the given length.- Specified by:
createArrayReferenceValue
in interfaceValueFactory
-
createArrayReferenceValue
public ReferenceValue createArrayReferenceValue(java.lang.String type, Clazz referencedClass, IntegerValue arrayLength, java.lang.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:
createArrayReferenceValue
in interfaceValueFactory
-
trace
public Value trace(Value value)
Attaches the current trace value to given value, if it is a reference value.
-
trace
public ReferenceValue trace(ReferenceValue referenceValue)
Attaches the current trace value to given reference value.
-
-