### Question:
RuleDsl { @SafeVarargs public static <T> CollectionOperand<T> values(Class<T> type, Operand<T>... values) { return (name, builder) -> { List<com.sabre.oss.yare.core.model.Expression> expressions = Stream.of(values) .map(v -> v.getExpression(null, builder)) .collect(Collectors.toList()); return ExpressionFactory.valuesOf(name, extractParametrizedType(type), expressions); }; } private  RuleDsl(); static RuleBuilder ruleBuilder(); @Deprecated static Operand<T> field(String ref, String path, Class<T> type); static CollectionOperand<T> castToCollection(Operand<?> operand, Class<T> itemType); @SuppressWarnings("unchecked") static Class<Collection<T>> collectionTypeOf(Class<T> type); @Deprecated static Operand<T> field(String field, Class<T> type); @Deprecated static Operand<Object> field(String ref, String path); @Deprecated static Operand<Object> field(String field); @Deprecated static Operand<T> reference(String reference, Class<T> type); @Deprecated static Operand<Object> reference(String reference); static ExpressionOperand<T> function(String name, Class<T> returnType, Parameter... args); static ExpressionOperand<T> function(String name, Parameter... args); static Parameter param(String name, Operand<T> operand); static ExpressionOperand<T> value(String value, String type); static ExpressionOperand<T> value(T value, Type type); static ExpressionOperand<T> value(String value, Type type); static ExpressionOperand<T> value(T value); static ExpressionOperand<T> value(String value); @SafeVarargs static CollectionOperand<T> values(Class<T> type, Operand<T>... values); @SafeVarargs static CollectionOperand<T> values(Class<T> type, T... values); static CollectionOperand<T> values(Class<T> type, Collection<T> values); @SafeVarargs static Expression<Boolean> and(Expression<Boolean>... booleanExpressions); @SafeVarargs static Expression<Boolean> or(Expression<Boolean>... booleanExpressions); static Expression<Boolean> not(Expression<Boolean> booleanExpression); static Expression<Boolean> operator(String type, Operand<?>... operands); static Expression<Boolean> equal(Operand<T> left, Operand<T> right); static Expression<Boolean> less(Operand<T> left, Operand<T> right); static Expression<Boolean> lessOrEqual(Operand<T> left, Operand<T> right); static Expression<Boolean> greater(Operand<T> left, Operand<T> right); static Expression<Boolean> greaterOrEqual(Operand<T> left, Operand<T> right); static Expression<Boolean> match(Operand<T> left, Operand<T> right); static Expression<Boolean> contains(CollectionOperand<T> left, CollectionOperand<T> right); static Expression<Boolean> contains(CollectionOperand<T> left, Operand<T> right); static Expression<Boolean> containsAny(CollectionOperand<T> left, CollectionOperand<T> right); static Expression<Boolean> isNull(Operand<?> operand); static Expression<Boolean> isTrue(Operand<Boolean> operand); static Expression<Boolean> isFalse(Operand<Boolean> operand);  }### Answer:
@Test void shouldEscapePlaceholdersInValuesMethodWithConstants() { CollectionOperand<String> values = values(String.class, "${placeholder}", "\\${placeholder}" ); Expression expression = values.getExpression(null, null); assertThat(expression).isInstanceOfSatisfying(Expression.Values.class, v -> assertThat(v.getValues()).containsExactly( ExpressionFactory.valueOf(null, "\\${placeholder}"), ExpressionFactory.valueOf(null, "\\\\${placeholder}") )); }