!7 sclass ComponentTree extends DynModule { new DynModuleRef mate; transient JTree tree; JComponent visualize() { JComponent c = dm_getVisualization(mate!); if (c == null) null; ret swing(func -> JComponent { jSection(str(mate), wrap(jDynamicTree(new DefaultMutableTreeNode(c), func(DefaultMutableTreeNode node) -> bool { Component c = cast node.getUserObject(); ret replaceTreeNodeChildren(node, getComponents(c)); }))) }); } void update { if (setField(mate := DynModuleRef(dm_closestModule()))) revisualize(); } }