Refactor MPSTreeNode to avoid subclassing unless necessary. In most cases MPSTreeNode may be used as is.
MPSTreeNode.isLeaf moved to MPSTreeNodeEx as subclasses of the latter do expect isLeaf to lie about its children (real children are populated on demand, when node is expanded)
Refactor GenerationTracer view: (a) use intermediate TraceNodeUI to keep ui-related aspects (and structure, pending) of the trace information; (b) there's no value in dedicated GenerationTracerTreeNode when MPSTreeNode is sufficient.
New approach to generation trace: lightweight (doesn't keep each and every change); clever (knows how to walk up and down to find rule/macro's input); in-place aware.
NPE in create root/IF-ELSE consequence with new trace (tolerate no input node)
Backtrace added (spans one phase only, grouped by input); forward trace got grouping by output node. Both old and new trace sequences are shown under a common root
Refactor tree/view to let view control actions for the tree
Traceback for all steps. Do not show copy operations. Refactor to minimize code duplication.