// DemoWalkTree1.java import org.jmlspecs.openjml.*; import com.sun.tools.javac.tree.JCTree; public class DemoWalkTree1 { static class Walker extends JmlTreeScanner { int nodes = 0; int jmlopcount = 0; int allopcount = 0; @Override public void scan(JCTree node) { if (node != null) System.out.println("Node: " + node.getClass()); if (node != null) nodes++; super.scan(node); } @Override public void visitJmlBinary(JmlTree.JmlBinary that) { jmlopcount++; allopcount++; super.visitJmlBinary(that); } @Override public void visitBinary(JCTree.JCBinary that) { allopcount++; super.visitBinary(that); } } public static void main(String[] argv) { try { IAPI m = Factory.makeAPI(); Walker visitor = new Walker(); JCTree.JCExpression expr = m.parseExpression("(a+b)*c", false); visitor.scan(expr); System.out.println("Counts: " + visitor.nodes + " " + visitor.allopcount + " " + visitor.jmlopcount); expr = m.parseExpression("a <==> \\result", true); visitor.scan(expr); System.out.println("Counts: " + visitor.nodes + " " + visitor.allopcount + " " + visitor.jmlopcount); } catch (Exception e) { System.out.println(e); } } }