ObjectWeb's ASM ( is a bytecode manipulation library. The key interfaces are a set of visitors (such as org.objectweb.asm.ClassVisitor) whose methods are invoked in a sequence representing a single pass over a class or method definition.

DrJava uses ASM to extract information from class files. This is especially important for Language Levels, which, as a compiler, must create symbol tables based on class file data (DynamicJava, on the other hand, creates symbol tables via reflection). DynamicJava also uses ASM to generate classes on-the-fly when users interpret class declarations.

BCEL is an alternative to ASM, and was used by DrJava previously. ASM was preferred because it is under active development (providing a number of Java 5-specific features), has a much smaller disk footprint, and is more efficient.