public void visitAndExpr(OpAnd and) { if (predicates > 0) { Expression parent = and.getParent(); if (!(parent instanceof PathExpr)) { LOG.warn("Parent expression of boolean operator is not a PathExpr: " + parent); return; } PathExpr path; Predicate predicate; if (parent instanceof Predicate) { predicate = (Predicate) parent; path = predicate; } else { path = (PathExpr) parent; parent = path.getParent(); if (!(parent instanceof Predicate) || path.getLength() > 1) { LOG.warn( "Boolean operator is not a top-level expression in the predicate: " + parent.getClass().getName()); return; } predicate = (Predicate) parent; } if (LOG.isTraceEnabled()) LOG.trace("Rewriting boolean expression: " + ExpressionDumper.dump(and)); hasOptimized = true; LocationStep step = (LocationStep) predicate.getParent(); Predicate newPred = new Predicate(context); newPred.add(and.getRight()); step.insertPredicate(predicate, newPred); path.replaceExpression(and, and.getLeft()); } }