/**
   * 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);
  }