docs: public static List<AbstractExpression> uncombinePredicate(AbstractExpression expr)
      {
          if (expr == null) {
              return new ArrayList<AbstractExpression>();
          }
          if (expr instanceof ConjunctionExpression) {
              ConjunctionExpression conj = (ConjunctionExpression)expr;
              if (conj.getExpressionType() == ExpressionType.CONJUNCTION_AND) {
                  // Calculate the list for the tree or leaf on the left.
                  List<AbstractExpression> branch = uncombinePredicate(conj.getLeft());
                  // Insert the leaf on the right at the head of that list
                  branch.add(0, conj.getRight());
                  return branch;
              }
              // Any other kind of conjunction must have been a leaf. Fall through.
          }
          // At the left-most leaf, start a new list.
          List<AbstractExpression> leaf = new ArrayList<AbstractExpression>();
          leaf.add(expr);
          return leaf;
      }