void (@NotNull DefaultMutableTreeNode node, boolean canSmartExpand, boolean forced) { if (!canInitiateNewActivity()) return; if (!getBuilder().isSmartExpand()) return; boolean can = canSmartExpand(node, canSmartExpand); if (!can && !forced) return; if (isNodeBeingBuilt(node) && !forced) { addNodeAction(getElementFor(node), true, node1 -> processSmartExpand(node1, canSmartExpand, true)); } else { TreeNode child = getChildForSmartExpand(node); if (child != null) { TreePath childPath = new TreePath(node.getPath()).pathByAddingChild(child); processInnerChange(new TreeRunnable("AbstractTreeUi.processSmartExpand") { @Override public void perform() { myTree.expandPath(childPath); } }); } } }