@Override
  public void show(final @NotNull Component owner, final int aScreenX, final int aScreenY, final boolean considerForcedXY) {
    if (UiInterceptors.tryIntercept(this)) return;

    LOG.assertTrue (!isDisposed());
    Dimension size = getContent().getPreferredSize();
    Dimension minimumSize = getMinimumSize();
    size.width = Math.max(size.width, minimumSize.width);
    size.height = Math.max(size.height, minimumSize.height);
    Rectangle targetBounds = new Rectangle(new Point(aScreenX, aScreenY), size);

    if (getParent() != null && alignByParentBounds) {
      final Rectangle parentBounds = getParent().getBounds();
      parentBounds.x += STEP_X_PADDING;
      parentBounds.width -= STEP_X_PADDING * 2;
      ScreenUtil.moveToFit(targetBounds, ScreenUtil.getScreenRectangle(
        parentBounds.x + parentBounds.width / 2,
        parentBounds.y + parentBounds.height / 2), null);
      if (parentBounds.intersects(targetBounds)) {
        targetBounds.x = getParent().getBounds().x - targetBounds.width - STEP_X_PADDING;
      }
    } else {
      ScreenUtil.moveToFit(targetBounds, ScreenUtil.getScreenRectangle(aScreenX + 1, aScreenY + 1), null);
    }

    if (getParent() == null && myIsActiveRoot) {
      PopupDispatcher.setActiveRoot(this);
    }
    else {
      PopupDispatcher.setShowing(this);
    }

    LOG.assertTrue (!isDisposed(), "Disposed popup, parent="+getParent());
    super.show(owner, targetBounds.x, targetBounds.y, true);
  }
@Override
  public void show(final @NotNull Component owner, final int aScreenX, final int aScreenY, final boolean considerForcedXY)