package dgm.trees; /** * Created with IntelliJ IDEA. * User: wires * Date: 3/20/13 * Time: 12:50 AM * To change this template use File | Settings | File Templates. */ public class CycleKiller<A> implements TreeVisitor<A> { final TreeVisitor<A> adaptee; final OccurrenceTracker<A> occurrenceTracker; public CycleKiller(TreeVisitor<A> adaptee, OccurrenceTracker<A> occurrenceTracker) { this.adaptee = adaptee; this.occurrenceTracker = occurrenceTracker; } @Override public boolean visitNode(A node, TreeViewer<A> viewer) { // stop the recursion when maximum level is reached final boolean shouldStop = occurrenceTracker.hasOccurred(node); return shouldStop || adaptee.visitNode(node, viewer); } @Override public void beginChildren(A node, TreeViewer<A> viewer) { adaptee.beginChildren(node, viewer); } @Override public void endChildren(A node, TreeViewer<A> viewer) { adaptee.endChildren(node, viewer); } }