package sugarVisitors; import java.util.function.Predicate; import ast.Expression; public class Exists extends CloneVisitor{ Predicate<Expression> pred; @SuppressWarnings("serial") private static class Found extends RuntimeException{} private Exists(Predicate<Expression> pred){this.pred=pred;} public static boolean of(Expression e,Predicate<Expression>pred){ try{new Exists(pred).lift(e);} catch(Found f){return true;} return false; } @Override protected <T extends Expression>T lift(T e){ if(pred.test(e)){throw new Found();} return super.lift(e); } }