import org.junit.Test; import edu.ksu.cis.santos.mdcf.dml.ast.*; import static edu.ksu.cis.santos.mdcf.dml.ast.Ast.Weak.*; public class ExModelVisitor { @Test public void visit() { Model m = model(list(basicType("foo", list()))); System.out.println(m); // output: model(list(basicType("foo", list()))) new AbstractVisitor() { @Override public boolean visitBasicType(BasicType node) { System.out.println("Reached " + node.name); // output: Reached foo return true; } }.visit(m); new AbstractVisitor() { @Override public boolean visitModel(Model node) { return false; } @Override public boolean visitBasicType(BasicType node) { throw new RuntimeException("Reached " + node.name); // unreachable } }.visit(m); new AbstractVisitor() { @Override public boolean defaultCase(AstNode node) { System.out.println(node); // output: model(list(basicType("foo", list()))) // basicType("foo", list()) return true; } }.visit(m); } }