org.objectweb.asm.tree.analysis

Class Analyzer

public class Analyzer extends Object implements Opcodes

A semantic bytecode analyzer.

Author: Eric Bruneton

Constructor Summary
Analyzer(Interpreter interpreter)
Constructs a new {@link Analyzer}.
Method Summary
Frame[]analyze(String owner, MethodNode m)
Analyzes the given method.
Frame[]getFrames()
Returns the symbolic stack frame for each instruction of the last recently analyzed method.
ListgetHandlers(int insn)
Returns the exception handlers for the given instruction.
intgetIndex(Object insn)
Returns the index of the given instruction.
protected voidnewControlFlowEdge(Frame frame, Frame successor)
Creates a control flow graph edge.
protected FramenewFrame(int nLocals, int nStack)
Constructs a new frame with the given size.
protected FramenewFrame(Frame src)
Constructs a new frame that is identical to the given frame.

Constructor Detail

Analyzer

public Analyzer(Interpreter interpreter)
Constructs a new {@link Analyzer}.

Parameters: interpreter the interpreter to be used to symbolically interpret the bytecode instructions.

Method Detail

analyze

public Frame[] analyze(String owner, MethodNode m)
Analyzes the given method.

Parameters: owner the internal name of the class to which the method belongs. m the method to be analyzed.

Returns: the symbolic state of the execution stack frame at each bytecode instruction of the method. The size of the returned array is equal to the number of instructions (and labels) of the method. A given frame is null if and only if the corresponding instruction cannot be reached (dead code).

Throws: AnalyzerException if a problem occurs during the analysis.

getFrames

public Frame[] getFrames()
Returns the symbolic stack frame for each instruction of the last recently analyzed method.

Returns: the symbolic state of the execution stack frame at each bytecode instruction of the method. The size of the returned array is equal to the number of instructions (and labels) of the method. A given frame is null if the corresponding instruction cannot be reached, or if an error occured during the analysis of the method.

getHandlers

public List getHandlers(int insn)
Returns the exception handlers for the given instruction.

Parameters: insn the index of an instruction of the last recently analyzed method.

Returns: a list of {@link TryCatchBlockNode} objects.

getIndex

public int getIndex(Object insn)
Returns the index of the given instruction.

Parameters: insn a {@link Label} or {@link AbstractInsnNode} of the last recently analyzed method.

Returns: the index of the given instruction of the last recently analyzed method.

newControlFlowEdge

protected void newControlFlowEdge(Frame frame, Frame successor)
Creates a control flow graph edge. The default implementation of this method does nothing. It can be overriden in order to construct the control flow graph of a method (this method is called by the {@link #analyze analyze} method during its visit of the method's code).

Parameters: frame the frame corresponding to an instruction. successor the frame corresponding to a successor instruction.

newFrame

protected Frame newFrame(int nLocals, int nStack)
Constructs a new frame with the given size.

Parameters: nLocals the maximum number of local variables of the frame. nStack the maximum stack size of the frame.

Returns: the created frame.

newFrame

protected Frame newFrame(Frame src)
Constructs a new frame that is identical to the given frame.

Parameters: src a frame.

Returns: the created frame.