default R between(V lowerInclusive, V upperInclusive) {
    Objects.requireNonNull(lowerInclusive, "lowerInclusive");
    Objects.requireNonNull(upperInclusive, "upperInclusive");
    final UnaryOperator<Expression> unary = expr -> {
      final Call lower = Expressions.binaryCall(ComparableOperators.GREATER_THAN_OR_EQUAL, expr, Expressions.constant(lowerInclusive));
      final Call upper = Expressions.binaryCall(ComparableOperators.LESS_THAN_OR_EQUAL, expr, Expressions.constant(upperInclusive));
      return Expressions.and(lower, upper);
    };

    return Matchers.extract(this).applyAndCreateRoot(unary);
  }
Checks that attribute is in {@code [lower, upper]} range (lower included, upper included).
(equivalent to {@code lowerInclusive <= $this <= upperInclusive})
@param lowerInclusive lower value (inclusive)
@param upperInclusive upper value (inclusive)
criteria/common/src/org/immutables/criteria/matcher/ComparableMatcher.java