code: protected void separateAndConstraints( Constraint constraint,
                                             List<Constraint> andableConstraints ) {
          if (constraint == null) return;
          assert andableConstraints != null;
          if (constraint instanceof And) {
              And and = (And)constraint;
              separateAndConstraints(and.left(), andableConstraints);
              separateAndConstraints(and.right(), andableConstraints);
          } else {
              andableConstraints.add(constraint);
          }
      }
docs: Walk the supplied constraint to extract a list of the constraints that can be AND-ed together. For example, given the
  constraint tree ((C1 AND C2) AND (C3 OR C4)), this method would result in a list of three separate criteria: [C1,C2,(C3 OR
  C4)]. The resulting <code>andConstraints</code> list will contain Constraint objects that all must be true.
  
  @param constraint the input constraint
  @param andableConstraints the collection into which all non-{@link And AND} constraints should be placed