@Override
  protected @Nullable Object getTagAt(final @NotNull MouseEvent e) {
    JTree tree = (JTree)e.getSource();
    Object tag = null;
    HaveTooltip haveTooltip = null;
    final TreePath path = tree.getPathForLocation(e.getX(), e.getY());
    if (path != null) {
      int dx = getRendererRelativeX(e, tree, path);
      final Object node = path.getLastPathComponent();

      boolean isLeaf;
      if (node instanceof TreeNode treeNode) {
        isLeaf = treeNode.isLeaf();
      } else {
        isLeaf = tree.getModel().isLeaf(node);
      }
      AppUIUtil.targetToDevice(myRenderer, tree);
      if (myLastHitNode == null || myLastHitNode.get() != node || e.getButton() != MouseEvent.NOBUTTON) {
        if (doCacheLastNode()) {
          myLastHitNode = new WeakReference<>(node);
        }
        myRenderer.getTreeCellRendererComponent(tree, node, false, false, isLeaf, tree.getRowForPath(path), false);
      }
      tag = myRenderer.getFragmentTagAt(dx);
      if (tag != null && node instanceof HaveTooltip) {
        haveTooltip = (HaveTooltip)node;
      }
    }
    showTooltip(tree, e, haveTooltip);
    return tag;
  }
@Override
  protected @Nullable Object getTagAt(final @NotNull MouseEvent e)