this version brings only minor changes compared to 4.0 RC2 (in particular there is no API change). But its brings many changes compared to the previous stable release, ASM 3.3.1 (see http://asm.ow2.org/jdiff33to40/changes.html):
- full support of Java 7. ASM 3.3.1 does not work with Java 7 classes because of many changes to the class file format, including new constant pool types.
- support of the Java 7 invokedynamic encoding and bootstrap method arguments. Practically, this means that invokedynamic no longer triggers a call to visitMethodInsn but uses a specific new visitInvokeDynamicInsn method.
- use of generics and varargs in the ASM API. To use the 1.5 compatible API you have to compile using all/asm-debug-all-*.jar which is 1.5 compatible and also contains the debug information. When running you can use all/asm-all-*.jar or several asm-*jar depending on your usage.
- use of abstract classes instead of interfaces for ClassVisitor, FieldVisitor, etc. The goal is to be able to ensure backward binary compatibility in future ASM versions. Look at the new chapters 5 and 10 in the ASM User Guide to learn how to write visitors that will remain valid in future versions.
- as a consequence, ClassAdapter and MethodAdapter have been merged into ClassVisitor and MethodVisitor, classes using multiple interface inheritance have been removed (e.g. MemberNode, EmptyVisitor) or adapted (e.g. trace and asmifier classes in asm.util).
- many bug fixes and other improvements.