private static Pair<List<PropertyBean>, @NotNull Component> getClickInfo(MouseEvent me, Component component) {
      if (me.getComponent() == null) return null;
      me = SwingUtilities.convertMouseEvent(me.getComponent(), me, component);
      List<PropertyBean> clickInfo = new ArrayList<>();
      //clickInfo.add(new PropertyBean("Click point", me.getPoint()));
      if (component instanceof JList) {
        @SuppressWarnings("unchecked")
        JList<Object> list = (JList<Object>)component;
        int row = list.getUI().locationToIndex(list, me.getPoint());
        if (row != -1) {
          Object value = list.getModel().getElementAt(row);
          ListCellRenderer<? super Object> renderer = ExpandedItemListCellRendererWrapper.unwrap(list.getCellRenderer());

          if (renderer instanceof UiInspectorListRendererContextProvider contextProvider) {
            clickInfo.addAll(contextProvider.getUiInspectorContext(list, value, row));
          }
          if (value instanceof UiInspectorContextProvider contextProvider) {
            clickInfo.addAll(contextProvider.getUiInspectorContext());
          }
          clickInfo.addAll(findActionsFor(value));

          clickInfo.add(new PropertyBean("List Value", value));
          clickInfo.add(new PropertyBean("List Value Class", UiInspectorUtil.getClassPresentation(value)));

          Component rendererComponent = renderer
            .getListCellRendererComponent(list, value, row, list.getSelectionModel().isSelectedIndex(row),
                                          list.hasFocus());
          rendererComponent.setBounds(list.getCellBounds(row, row));
          clickInfo.add(new PropertyBean(RENDERER_BOUNDS, list.getUI().getCellBounds(list, row, row)));
          clickInfo.addAll(ComponentPropertiesCollector.collect(rendererComponent));
          return Pair.create(clickInfo, rendererComponent);
        }
      }
      if (component instanceof JTable table) {
        int row = table.rowAtPoint(me.getPoint());
        int column = table.columnAtPoint(me.getPoint());
        if (row != -1 && column != -1) {
          Object value = table.getValueAt(row, column);
          TableCellRenderer renderer = table.getCellRenderer(row, column);

          if (renderer instanceof UiInspectorTableRendererContextProvider contextProvider) {
            clickInfo.addAll(contextProvider.getUiInspectorContext(table, value, row, column));
          }
          if (value instanceof UiInspectorContextProvider contextProvider) {
            clickInfo.addAll(contextProvider.getUiInspectorContext());
          }

          if (component instanceof TreeTable treeTable) {
            TreeTableTree tree = treeTable.getTree();
            TreeCellRenderer treeRenderer = tree.getOriginalCellRenderer();

            int treeRow = treeTable.convertRowIndexToModel(row);
            Object treeValue = tree.getPathForRow(treeRow).getLastPathComponent();
            if (treeRenderer instanceof UiInspectorTreeRendererContextProvider contextProvider) {
              clickInfo.addAll(contextProvider.getUiInspectorContext(tree, treeValue, treeRow));
            }
            if (treeValue instanceof UiInspectorContextProvider contextProvider) {
              clickInfo.addAll(contextProvider.getUiInspectorContext());
            }
            if (treeValue instanceof DefaultMutableTreeNode mutableTreeNode &&
                mutableTreeNode.getUserObject() instanceof UiInspectorContextProvider contextProvider) {
              clickInfo.addAll(contextProvider.getUiInspectorContext());
            }
          }

          clickInfo.add(new PropertyBean("Cell Value", value));
          clickInfo.add(new PropertyBean("Cell Value Class", UiInspectorUtil.getClassPresentation(value)));

          Component rendererComponent = renderer
            .getTableCellRendererComponent(table, value, table.getSelectionModel().isSelectedIndex(row),
                                           table.hasFocus(), row, column);
          rendererComponent.setBounds(table.getCellRect(row, column, false));
          clickInfo.add(new PropertyBean(RENDERER_BOUNDS, table.getCellRect(row, column, true)));
          clickInfo.addAll(ComponentPropertiesCollector.collect(rendererComponent));
          return Pair.create(clickInfo, rendererComponent);
        }
      }
      if (component instanceof JTree tree) {
        TreePath path = tree.getClosestPathForLocation(me.getX(), me.getY());
        if (path != null) {
          int row = tree.getRowForPath(path);
          Object value = path.getLastPathComponent();
          TreeCellRenderer renderer = tree.getCellRenderer();

          if (renderer instanceof UiInspectorTreeRendererContextProvider contextProvider) {
            clickInfo.addAll(contextProvider.getUiInspectorContext(tree, value, row));
          }
          if (value instanceof UiInspectorContextProvider contextProvider) {
            clickInfo.addAll(contextProvider.getUiInspectorContext());
          }
          if (value instanceof DefaultMutableTreeNode mutableTreeNode &&
              mutableTreeNode.getUserObject() instanceof UiInspectorContextProvider contextProvider) {
            clickInfo.addAll(contextProvider.getUiInspectorContext());
          }

          clickInfo.add(new PropertyBean("Tree Node", value));
          clickInfo.add(new PropertyBean("Tree Node Class", UiInspectorUtil.getClassPresentation(value)));

          Component rendererComponent = renderer.getTreeCellRendererComponent(
            tree, value, tree.getSelectionModel().isPathSelected(path),
            tree.isExpanded(path),
            tree.getModel().isLeaf(value),
            row, tree.hasFocus());
          rendererComponent.setBounds(tree.getPathBounds(path));
          clickInfo.add(new PropertyBean(RENDERER_BOUNDS, tree.getPathBounds(path)));
          clickInfo.addAll(ComponentPropertiesCollector.collect(rendererComponent));
          return Pair.create(clickInfo, rendererComponent);
        }
      }
      return null;
    }
private static Pair<List<PropertyBean>, @NotNull Component> getClickInfo(MouseEvent me, Component component)