void (final XDebuggerTree tree, final NodeInfo nodeInfo, final XDebuggerTreeNode treeNode) { if (tree.isExpanded(treeNode.getPath())) { List<? extends XDebuggerTreeNode> children = treeNode.getLoadedChildren(); nodeInfo.myExpanded = true; for (XDebuggerTreeNode child : children) { TreePath path = child.getPath(); Rectangle bounds = tree.getPathBounds(path); if (bounds != null) { Rectangle treeVisibleRect = tree.getParent() instanceof JViewport ? ((JViewport)tree.getParent()).getViewRect() : tree.getVisibleRect(); if (treeVisibleRect.contains(bounds)) { myLastVisibleNodeRect = bounds; } } NodeInfo childInfo = createNode(child, tree.isPathSelected(path)); if (childInfo != null) { nodeInfo.addChild(childInfo); addChildren(tree, childInfo, child); } } } }