@Override
  public void show(final @NotNull JComponent parentComponent,
                   final int x,
                   final int y,
                   final JComponent focusBackComponent,
                   final @NotNull HintHint hintHint) {
    myParentComponent = parentComponent;
    myHintHint = hintHint;

    LOG.assertTrue(myParentComponent.isShowing());
    myEscListener = new MyEscListener();
    myComponent.registerKeyboardAction(myEscListener, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
    myComponent.registerKeyboardAction(myEscListener, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_FOCUSED);
    final JLayeredPane layeredPane = parentComponent.getRootPane().getLayeredPane();

    Point point = new Point(x, y);
    myComponent.validate();

    HintMode mode;
    if (myForceShowAsPopup || hintHint.isPopupForced()) {
      mode = HintMode.REAL_POPUP;
    }
    else if (hintHint.isAwtTooltip()) {
      mode = HintMode.AWT_TOOLTIP;
    }
    else if (myForceLightweightPopup) {
      mode = HintMode.LAYERED_PANE;
    }
    else {
      boolean fitsLayeredPane = fitsLayeredPane(layeredPane, myComponent, new RelativePoint(parentComponent, point), hintHint);
      mode = fitsLayeredPane ? HintMode.LAYERED_PANE : HintMode.REAL_POPUP;
    }

    switch (mode) {
      case AWT_TOOLTIP -> showAwtTooltip(hintHint);
      case LAYERED_PANE -> showLayeredPaneTooltip(parentComponent, point, layeredPane);
      case REAL_POPUP -> showRealPopup(point, hintHint);
    }
  }
@Override
  public void show(final @NotNull JComponent parentComponent,
                   final int x,
                   final int y,
                   final JComponent focusBackComponent,
                   final @NotNull HintHint hintHint)