Provides a framework for static code analysis based on the asm.tree package.
Basic usage:
ClassReader classReader = new ClassReader(bytecode);
ClassNode classNode = new ClassNode();
classReader.accept(classNode, ClassReader.SKIP_DEBUG);
for (MethodNode method : classNode.methods) {
if (method.instructions.size() > 0) {
Analyzer analyzer = new Analyzer(new BasicInterpreter());
analyzer.analyze(classNode.name, method);
Frame[] frames = analyzer.getFrames();
// Elements of the frames array now contains info for each instruction
// from the analyzed method. BasicInterpreter creates BasicValue, that
// is using simplified type system that distinguishes the UNINITIALZED,
// INT, FLOAT, LONG, DOUBLE, REFERENCE and RETURNADDRESS types.
...
}
}
| Modifier and Type | Interface and Description |
|---|---|
| public interface | Value
An immutable symbolic value for the semantic interpretation of bytecode. |
| Modifier and Type | Class and Description |
|---|---|
| public class | |
| public class | AnalyzerException
An exception thrown if a problem occurs during the analysis of a method. |
| public class | BasicInterpreter
An |
| public class | BasicValue
A |
| public class | BasicVerifier
An extended |
| public class | |
| public abstract class | Interpreter<
type of the Value used for the analysis. V extends Value>A semantic bytecode interpreter. |
| public class | SimpleVerifier
An extended |
| pack-priv class | SmallSet<T>
An immutable set of at most two elements, optimized for speed compared to a generic set implementation. |
| public class | SourceInterpreter
An |
| public class | SourceValue
A |
| pack-priv class | Subroutine
A method subroutine (corresponds to a JSR instruction). |