private void handleMouseEvent(MouseEvent e) {
    if (cellComponentProvider != null) {
      JComponent cellRenderer = cellComponentProvider.getCellRendererComponent(e);
      ValidationInfo info = cellRenderer != null ? (ValidationInfo)cellRenderer.getClientProperty(ValidatingTableCellRendererWrapper.CELL_VALIDATION_PROPERTY) : null;
      if (info==null && cellRenderer instanceof ExpandedItemRendererComponentWrapper wrapper) {
        Component unwrapped = ExpandedItemRendererComponentWrapper.unwrap(wrapper);
        if (unwrapped instanceof JComponent unwrappedCellRenderer) {
          info = (ValidationInfo)unwrappedCellRenderer.getClientProperty(ValidatingTableCellRendererWrapper.CELL_VALIDATION_PROPERTY);
        }
      }

      if (info != null) {
        if (!info.equals(validationInfo)) {
          validationInfo = info;
          closeWithDelay = hasATag(validationInfo.message);

          popupBuilder = ComponentValidator.createPopupBuilder(validationInfo, tipComponent -> {
            if (closeWithDelay) {
              tipComponent.addHyperlinkListener(hyperlinkListener);
              tipComponent.addMouseListener(new TipComponentMouseListener());
            }
            popupSize = tipComponent.getPreferredSize();
          }).setCancelOnMouseOutCallback(me -> me.getID() == MouseEvent.MOUSE_PRESSED &&
                                              !ComponentValidator.withinComponent(validationInfo, me) &&
                                              (cellRect == null || !cellRect.contains(me.getPoint())));

          hidePopup(false, () -> showPopup(e));
        }
        else if (!isShowing()) {
          showPopup(e);
        }
        else if (!isClosing) { // Move popup to new location
          Rectangle cellRect = cellComponentProvider.getCellRect(e);
          if (!cellRect.equals(this.cellRect)) {
            this.cellRect = cellRect;
            Point point = new Point(this.cellRect.x + JBUIScale.scale(40), this.cellRect.y - JBUIScale.scale(6) - popupSize.height);
            SwingUtilities.convertPointToScreen(point, cellComponentProvider.getOwner());
            cellPopup.setLocation(point);
          }
        }
      } else {
        validationInfo = null;
        hidePopup(false, null);
      }
    }
  }
private void handleMouseEvent(MouseEvent e)