RelativePoint (@NotNull DataContext dataContext) { Component component = PlatformCoreDataKeys.CONTEXT_COMPONENT.getData(dataContext); JComponent focusOwner = component instanceof JComponent ? (JComponent)component : null; if (focusOwner == null || !UIUtil.isShowing(focusOwner)) { Project project = CommonDataKeys.PROJECT.getData(dataContext); JFrame frame = project == null ? WindowManager.getInstance().findVisibleFrame() : WindowManager.getInstance().getFrame(project); focusOwner = frame == null ? null : frame.getRootPane(); if (focusOwner == null) { throw new IllegalArgumentException("focusOwner cannot be null:\n" + " contextComponent: " + component + "\n" + " project: " + project + "\n" + " frame: " + frame); } } final Point point = PlatformDataKeys.CONTEXT_MENU_POINT.getData(dataContext); if (point != null) { return new RelativePoint(focusOwner, point); } Editor editor = CommonDataKeys.EDITOR.getData(dataContext); if (editor != null && focusOwner == editor.getContentComponent()) { return guessBestPopupLocation(editor); } return guessBestPopupLocation(focusOwner); }