Top Description Fields Constructors Methods
org.objectweb.asm.tree.analysis

public Class SourceInterpreter

extends Interpreter<SourceValue>
implements Opcodes
Class Inheritance
All Implemented Interfaces
org.objectweb.asm.Opcodes
Imports
java.util.HashSet, .List, .Set, org.objectweb.asm.Opcodes, .Type, org.objectweb.asm.tree.AbstractInsnNode, .FieldInsnNode, .InvokeDynamicInsnNode, .LdcInsnNode, .MethodInsnNode

An Interpreter for SourceValue values.
Author
Eric Bruneton

Field Summary

Inherited from org.objectweb.asm.tree.analysis.Interpreter:
api

Constructor Summary

AccessConstructor and Description
public
SourceInterpreter()

Constructs a new SourceInterpreter for the latest ASM API version.

protected
SourceInterpreter(final int
the ASM API version supported by this interpreter. Must be one of the ASMx values in Opcodes.
api
)

Constructs a new SourceInterpreter.

Method Summary

Modifier and TypeMethod and Description
public SourceValue
binaryOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final SourceValue
the first argument of the instruction to be interpreted.
value1
,
final SourceValue
the second argument of the instruction to be interpreted.
value2
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.binaryOperation.

Interprets a bytecode instruction with two arguments.
private static <E> boolean
containsAll(final Set<E> self, final Set<E> other)

public SourceValue
copyOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final SourceValue
the value that must be moved by the instruction.
value
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.copyOperation.

Interprets a bytecode instruction that moves a value on the stack or to or from local variables.
public SourceValue
merge(final SourceValue
a value.
value1
,
final SourceValue
another value.
value2
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.merge.

Merges two values.
public SourceValue
naryOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final List<? extends SourceValue>
the arguments of the instruction to be interpreted.
values
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.naryOperation.

Interprets a bytecode instruction with a variable number of arguments.
public SourceValue
newOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.newOperation.

Interprets a bytecode instruction without arguments.
public SourceValue
newValue(final Type
a primitive or reference type, or null to represent an uninitialized value.
type
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.newValue.

Creates a new value that represents the given type.
public void
returnOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final SourceValue
the argument of the instruction to be interpreted.
value
,
final SourceValue
the expected return type of the analyzed method.
expected
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.returnOperation.

Interprets a bytecode return instruction.
public SourceValue
ternaryOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final SourceValue
the first argument of the instruction to be interpreted.
value1
,
final SourceValue
the second argument of the instruction to be interpreted.
value2
,
final SourceValue
the third argument of the instruction to be interpreted.
value3
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.ternaryOperation.

Interprets a bytecode instruction with three arguments.
public SourceValue
unaryOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final SourceValue
the argument of the instruction to be interpreted.
value
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.unaryOperation.

Interprets a bytecode instruction with a single argument.
Inherited from org.objectweb.asm.tree.analysis.Interpreter:
newEmptyValuenewExceptionValuenewParameterValuenewReturnTypeValue

Constructor Detail

SourceInterpreterback to summary
public SourceInterpreter()

Constructs a new SourceInterpreter for the latest ASM API version. Subclasses must not use this constructor. Instead, they must use the SourceInterpreter(int) version.

SourceInterpreterback to summary
protected SourceInterpreter(final int api)

Constructs a new SourceInterpreter.

Parameters
api:int

the ASM API version supported by this interpreter. Must be one of the ASMx values in Opcodes.

Method Detail

binaryOperationback to summary
public SourceValue binaryOperation(final AbstractInsnNode insn, final SourceValue value1, final SourceValue value2)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.binaryOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.binaryOperation.

Interprets a bytecode instruction with two arguments. This method is called for the following opcodes:

IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, PUTFIELD

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

value1:SourceValue

the first argument of the instruction to be interpreted.

value2:SourceValue

the second argument of the instruction to be interpreted.

Returns:SourceValue

the result of the interpretation of the given instruction.

Annotations
@Override
containsAllback to summary
private static <E> boolean containsAll(final Set<E> self, final Set<E> other)
copyOperationback to summary
public SourceValue copyOperation(final AbstractInsnNode insn, final SourceValue value)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.copyOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.copyOperation.

Interprets a bytecode instruction that moves a value on the stack or to or from local variables. This method is called for the following opcodes:

ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

value:SourceValue

the value that must be moved by the instruction.

Returns:SourceValue

the result of the interpretation of the given instruction. The returned value must be equal to the given value.

Annotations
@Override
mergeback to summary
public SourceValue merge(final SourceValue value1, final SourceValue value2)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.merge.

Doc from org.objectweb.asm.tree.analysis.Interpreter.merge.

Merges two values. The merge operation must return a value that represents both values (for instance, if the two values are two types, the merged value must be a common super type of the two types. If the two values are integer intervals, the merged value must be an interval that contains the previous ones. Likewise for other types of values).

Parameters
value1:SourceValue

a value.

value2:SourceValue

another value.

Returns:SourceValue

the merged value. If the merged value is equal to value1, this method must return value1.

Annotations
@Override
naryOperationback to summary
public SourceValue naryOperation(final AbstractInsnNode insn, final List<? extends SourceValue> values)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.naryOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.naryOperation.

Interprets a bytecode instruction with a variable number of arguments. This method is called for the following opcodes:

INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE, MULTIANEWARRAY and INVOKEDYNAMIC

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

values:List<? extends SourceValue>

the arguments of the instruction to be interpreted.

Returns:SourceValue

the result of the interpretation of the given instruction.

Annotations
@Override
newOperationback to summary
public SourceValue newOperation(final AbstractInsnNode insn)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.newOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.newOperation.

Interprets a bytecode instruction without arguments. This method is called for the following opcodes:

ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1, FCONST_0, FCONST_1, FCONST_2, DCONST_0, DCONST_1, BIPUSH, SIPUSH, LDC, JSR, GETSTATIC, NEW

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

Returns:SourceValue

the result of the interpretation of the given instruction.

Annotations
@Override
newValueback to summary
public SourceValue newValue(final Type type)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.newValue.

Doc from org.objectweb.asm.tree.analysis.Interpreter.newValue.

Creates a new value that represents the given type.

Called for method parameters (including this), exception handler variable and with null type for variables reserved by long and double types.

An interpreter may choose to implement one or more of Interpreter#newReturnTypeValue(Type), Interpreter#newParameterValue(boolean, int, Type), Interpreter#newEmptyValue(int), Interpreter#newExceptionValue(TryCatchBlockNode, Frame, Type) to distinguish different types of new value.

Parameters
type:Type

a primitive or reference type, or null to represent an uninitialized value.

Returns:SourceValue

a value that represents the given type. The size of the returned value must be equal to the size of the given type.

Annotations
@Override
returnOperationback to summary
public void returnOperation(final AbstractInsnNode insn, final SourceValue value, final SourceValue expected)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.returnOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.returnOperation.

Interprets a bytecode return instruction. This method is called for the following opcodes:

IRETURN, LRETURN, FRETURN, DRETURN, ARETURN

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

value:SourceValue

the argument of the instruction to be interpreted.

expected:SourceValue

the expected return type of the analyzed method.

Annotations
@Override
ternaryOperationback to summary
public SourceValue ternaryOperation(final AbstractInsnNode insn, final SourceValue value1, final SourceValue value2, final SourceValue value3)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.ternaryOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.ternaryOperation.

Interprets a bytecode instruction with three arguments. This method is called for the following opcodes:

IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

value1:SourceValue

the first argument of the instruction to be interpreted.

value2:SourceValue

the second argument of the instruction to be interpreted.

value3:SourceValue

the third argument of the instruction to be interpreted.

Returns:SourceValue

the result of the interpretation of the given instruction.

Annotations
@Override
unaryOperationback to summary
public SourceValue unaryOperation(final AbstractInsnNode insn, final SourceValue value)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.unaryOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.unaryOperation.

Interprets a bytecode instruction with a single argument. This method is called for the following opcodes:

INEG, LNEG, FNEG, DNEG, IINC, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S, IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, TABLESWITCH, LOOKUPSWITCH, IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, PUTSTATIC, GETFIELD, NEWARRAY, ANEWARRAY, ARRAYLENGTH, ATHROW, CHECKCAST, INSTANCEOF, MONITORENTER, MONITOREXIT, IFNULL, IFNONNULL

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

value:SourceValue

the argument of the instruction to be interpreted.

Returns:SourceValue

the result of the interpretation of the given instruction.

Annotations
@Override