ActionCallback (@NotNull String viewId, @Nullable String subId) { AbstractProjectViewPane pane = getProjectViewPaneById(viewId); LOG.assertTrue(pane != null, "Project view pane not found: " + viewId + "; subId:" + subId + "; project: " + project); boolean hasSubViews = pane.getSubIds().length > 0; if (hasSubViews) { if (subId == null) { // we try not to change subview // get currently selected subId from the pane subId = pane.getSubId(); } } else if (subId != null) { LOG.error("View doesn't have subviews: " + viewId + "; subId:" + subId + "; project: " + project); } if (viewId.equals(currentViewId) && Objects.equals(subId, currentViewSubId)) { return ActionCallback.REJECTED; } // at this point null subId means that view has no subviews OR subview was never selected // we then search first content with the right viewId ignoring subIds of contents for (Content content : getContentManager().getContents()) { if (viewId.equals(content.getUserData(ID_KEY)) && (subId == null || subId.equals(content.getUserData(SUB_ID_KEY)))) { return getContentManager().setSelectedContentCB(content); } } return ActionCallback.REJECTED; }