void (DebuggerTreeNodeImpl node) { if (node.getDescriptor() != null) { TreePath path = new TreePath(node.getPath()); node.getDescriptor().myIsExpanded = isExpanded(path); node.getDescriptor().myIsSelected = getSelectionModel().isPathSelected(path); Rectangle rowBounds = getRowBounds(getRowForPath(path)); if (rowBounds != null && getVisibleRect().contains(rowBounds)) { node.getDescriptor().putUserData(VISIBLE_RECT, getVisibleRect()); node.getDescriptor().myIsVisible = true; } else { node.getDescriptor().putUserData(VISIBLE_RECT, null); node.getDescriptor().myIsVisible = false; } } for (Enumeration e = node.rawChildren(); e.hasMoreElements(); ) { DebuggerTreeNodeImpl child = (DebuggerTreeNodeImpl)e.nextElement(); saveState(child); } }