@Override
 public void visitLabel(Label label) {
   int eventId = getEventId();
   touchPointListener.beforeLabel(eventId, label, currentLine, mv);
   super.visitLabel(label);
   touchPointListener.afterLabel(eventId, label, currentLine, mv);
 }
  /**
   * Processing information about new line.
   *
   * <p>Upgrades {@link #replyEventIdList} and {@link #saveEventIdList} and calls {@link
   * TouchPointListener#afterLineNumber(int, Label, int, MethodVisitor, String, String)}
   */
  public void visitLineNumber(int line, Label label) {
    super.visitLineNumber(line, label);
    currentLine = line;

    if (!isDuplicatedLine(line, lastLineId)) {
      /*
       * It is a new line (first time seen, so we will save all found
       * events)
       */
      replyEventIdList = null;
      saveEventIdList = new LinkedList<Integer>();
      Map<Integer, LinkedList<Integer>> eventsMap = line2eventIds.get(line);
      if (eventsMap == null) {
        eventsMap = new HashMap<Integer, LinkedList<Integer>>();
        line2eventIds.put(line, eventsMap);
      }
      eventsMap.put(lastLineId, saveEventIdList);
    } else {
      Integer orgin = getOriginForLine(line, lastLineId);
      Map<Integer, LinkedList<Integer>> m = line2eventIds.get(currentLine);
      LinkedList<Integer> eventIds = m.get(orgin);

      /* copy of  current list */
      replyEventIdList = new LinkedList<Integer>(eventIds);
      saveEventIdList = null;
    }

    touchPointListener.afterLineNumber(
        getEventId(), label, currentLine, mv, methodName, methodSignature);
  }
 @Override
 public void visitMethodInsn(int opcode, String owner, String method, String descr) {
   super.visitMethodInsn(opcode, owner, method, descr);
   // We skip lines that contains call to methods that are specified inside ignoreRegexp
   if (RegexUtil.matches(ignoreRegexp, owner)) {
     touchPointListener.ignoreLine(getEventId(), currentLine);
   }
 }
 @Override
 public void visitJumpInsn(int opcode, Label label) {
   /* Ignore any jump instructions in the "class init" method.
   When initializing static variables, the JVM first checks
   that the variable is null before attempting to set it.
   This check contains an IFNONNULL jump instruction which
   would confuse people if it showed up in the reports.*/
   if ((opcode != Opcodes.GOTO)
       && (opcode != Opcodes.JSR)
       && (currentLine != 0)
       && (!methodName.equals("<clinit>"))) {
     int eventId = getEventId();
     touchPointListener.beforeJump(eventId, label, currentLine, mv);
     super.visitJumpInsn(opcode, label);
     touchPointListener.afterJump(eventId, label, currentLine, mv);
   } else {
     super.visitJumpInsn(opcode, label);
   }
 }
 @Override
 public void visitTableSwitchInsn(int min, int max, Label def, Label[] labels) {
   touchPointListener.beforeSwitch(
       getEventId(), def, labels, currentLine, mv, tryToFindSignatureOfConditionEnum());
   super.visitTableSwitchInsn(min, max, def, labels);
 }
 @Override
 public void visitLookupSwitchInsn(Label def, int[] values, Label[] labels) {
   touchPointListener.beforeSwitch(
       getEventId(), def, labels, currentLine, mv, tryToFindSignatureOfConditionEnum());
   super.visitLookupSwitchInsn(def, values, labels);
 }
 @Override
 public void visitCode() {
   super.visitCode();
   touchPointListener.afterMethodStart(mv);
 }