Buggy code:
public class ASMDriver implements ORMDriver { String originalClassName ; String targetClassName ; ClassVisitor preVisitor ; ClassVisitor postVisitor ; Map < String , MethodNode > before = new HashMap < String , MethodNode > ( ) ; Map < String , MethodNode > after = new HashMap < String , MethodNode > ( ) ; Map < String , MethodNode > replace = new HashMap < String , MethodNode > ( ) ; Map < String , Map . Entry < Integer , MethodNode > > line = new HashMap < String , Map . Entry < Integer , MethodNode > > ( ) ; @ Override public void setup ( String className , ClassVisitor preVisitor , ClassVisitor postVisitor ) { } @ Override public byte [ ] process ( InputStream in , String className ) { try { <START_BUG> this . targetClassName = className ; <END_BUG> ClassReader cr = new ClassReader ( in ) ; ClassNode cn = new ClassNode ( Opcodes . ASM5 ) ; cr . accept ( cn , 0 ) ; for ( MethodNode mn : cn . methods ) { if ( before . containsKey ( ( ( mn . name ) + ( mn . desc ) ) ) ) { MethodNode inject = before . get ( ( ( mn . name ) + ( mn . desc ) ) ) ; MethodNode newInject = new MethodNode ( ) ; inject . accept ( new ASMMethodRemapper ( newInject , this . originalClassName , this . targetClassName ) ) ; inject = newInject ; for ( int i = 0 ; i < ( mn . instructions . toArray ( ) . length ) ; i ++ ) { AbstractInsnNode insnNode = mn . instructions . get ( i ) ; if ( insnNode instanceof LabelNode ) { mn . instructions . insertBefore ( mn . instructions . get ( i ) , inject . instructions ) ; break ; } } mn . instructions . resetLabels ( ) ; if ( ( inject . tryCatchBlocks ) != null ) { mn . tryCatchBlocks . addAll ( inject . tryCatchBlocks ) ; } if ( ( inject . exceptions ) != null ) { mn . exceptions . addAll ( inject . exceptions ) ; } } else if ( after . containsKey ( ( ( mn . name ) + ( mn . desc ) ) ) ) { MethodNode inject = after . get ( ( ( mn . name ) + ( mn . desc ) ) ) ; MethodNode newInject = new MethodNode ( ) ; inject . accept ( new ASMMethodRemapper ( newInject , this . originalClassName , this . targetClassName ) ) ; inject = newInject ; for ( int i = ( mn . instructions . toArray ( ) . length ) - 1 ; i > ( - 1 ) ; i -- ) { AbstractInsnNode insnNode = mn . instructions . get ( i ) ; if ( ClassUtils . getOpcode ( insnNode . getOpcode ( ) ) . contains ( "RETURN" ) ) { mn . instructions . insertBefore ( mn . instructions . get ( i ) , inject . instructions ) ; break ; } } mn . instructions . resetLabels ( ) ; if ( ( inject . tryCatchBlocks ) != null ) { mn . tryCatchBlocks . addAll ( inject . tryCatchBlocks ) ; } if ( ( inject . exceptions ) != null ) { mn . exceptions . addAll ( inject . exceptions ) ; } } else if ( replace . containsKey ( ( ( mn . name ) + ( mn . desc ) ) ) ) { MethodNode inject = replace . get ( ( ( mn . name ) + ( mn . desc ) ) ) ; MethodNode newInject = new MethodNode ( ) ; inject . accept ( new ASMMethodRemapper ( newInject , this . originalClassName , this . targetClassName ) ) ; inject = newInject ; mn . instructions . clear ( ) ; if ( ( inject . tryCatchBlocks ) != null ) { mn . tryCatchBlocks . clear ( ) ; } if ( ( inject . exceptions ) != null ) { mn . exceptions . clear ( ) ; } mn . instructions . add ( inject . instructions ) ; if ( ( inject . tryCatchBlocks ) != null ) { mn . tryCatchBlocks . addAll ( inject . tryCatchBlocks ) ; } if ( ( inject . exceptions ) != null ) { mn . exceptions . addAll ( inject . exceptions ) ; } } else if ( line . containsKey ( ( ( mn . name ) + ( mn . desc ) ) ) ) { Map . Entry < Integer , MethodNode > entry = line . get ( ( ( mn . name ) + ( mn . desc ) ) ) ; int lineNum = entry . getKey ( ) ; boolean after = lineNum > 0 ; MethodNode inject = entry . getValue ( ) ; boolean injected = false ; MethodNode newInject = new MethodNode ( ) ; inject . accept ( new ASMMethodRemapper ( newInject , this . originalClassName , this . targetClassName ) ) ; inject = newInject ; if ( lineNum < 0 ) { lineNum *= - 1 ; } for ( AbstractInsnNode insn : mn . instructions . toArray ( ) ) { if ( ( insn instanceof LineNumberNode ) && ( ( ( ( LineNumberNode ) ( insn ) ) . line ) >= lineNum ) ) { if ( after ) { mn . instructions . insert ( insn , inject . instructions ) ; } else { mn . instructions . insertBefore ( insn , inject . instructions ) ; } injected = true ; break ; } }

Fix:
this . targetClassName = className . replace ( "." , "//" ) ;