@Nullable
  Cursor handleGraphAnswer(@Nullable GraphAnswer<Integer> answer, boolean dataCouldChange,
                           @Nullable SelectionSnapshot previousSelection, @Nullable MouseEvent e) {
    if (dataCouldChange) {
      myTable.getModel().fireTableDataChanged();

      // since fireTableDataChanged clears selection we restore it here
      if (previousSelection != null) {
        previousSelection.restore(myTable.getVisibleGraph(),
                                  answer == null || (answer.getCommitToJump() != null && answer.doJump()),
                                  false);
      }
    }

    if (answer == null) {
      return null;
    }

    if (answer.isRepaintRequired()) myTable.repaint();
    if (answer.getCommitToJump() != null) {
      Integer row = myTable.getModel().getVisiblePack().getVisibleGraph().getVisibleRowIndex(answer.getCommitToJump());
      if (row != null && row >= 0 && answer.doJump()) {
        myTable.jumpToRow(row, true);
      }
      else if (e != null) {
        VcsLogUiUtil.showTooltip(myTable, new Point(e.getX() + 5, e.getY()), Balloon.Position.atRight,
                                 getArrowTooltipText(answer.getCommitToJump(), row));
      }
    }

    return answer.getCursorToSet();
  }
@Nullable
  Cursor handleGraphAnswer(@Nullable GraphAnswer<Integer> answer, boolean dataCouldChange,
                           @Nullable SelectionSnapshot previousSelection, @Nullable MouseEvent e)