in src/main/java/com/intellij/rt/debugger/agent/CollectionBreakpointInstrumentor.java [1116:1148]
public int addCaptureModificationCode(MethodVisitor mv, int shouldCaptureVar) {
mv.visitInsn(Opcodes.DUP);
mv.visitInsn(Opcodes.DUP);
Label label = new Label();
Label end = new Label();
mv.visitJumpInsn(Opcodes.IFNONNULL, label);
mv.visitLdcInsn(false);
mv.visitJumpInsn(Opcodes.GOTO, end);
mv.visitLabel(label);
mv.visitLdcInsn(true);
mv.visitLabel(end);
mv.visitVarInsn(Opcodes.ILOAD, shouldCaptureVar);
mv.visitInsn(Opcodes.DUP_X2);
mv.visitInsn(Opcodes.POP);
mv.visitInsn(Opcodes.DUP_X1);
mv.visitInsn(Opcodes.POP);
mv.visitVarInsn(Opcodes.ALOAD, 1);
mv.visitInsn(Opcodes.SWAP);
mv.visitMethodInsn(Opcodes.INVOKESTATIC,
getInstrumentorClassName(),
CREATE_PAIR_METHOD_NAME,
CREATE_PAIR_METHOD_DESC,
false);
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitInsn(Opcodes.SWAP);
mv.visitLdcInsn(false);
mv.visitMethodInsn(Opcodes.INVOKESTATIC,
getInstrumentorClassName(),
CAPTURE_COLLECTION_MODIFICATION_METHOD_NAME,
CAPTURE_COLLECTION_MODIFICATION_METHOD_DESC,
false);
return 7;
}