1 package org.wikimedia.search.extra.regex.expression;
2
3 import com.google.common.collect.ImmutableSet;
4
5
6
7
8 public final class And<T> extends AbstractCompositeExpression<T> {
9 public And(ImmutableSet<Expression<T>> components) {
10 super(components);
11 }
12
13 @SafeVarargs
14 public And(Expression<T>... components) {
15 this(ImmutableSet.copyOf(components));
16 }
17
18 @Override
19 protected boolean doesNotAffectOutcome(Expression<T> expression) {
20 return expression.alwaysTrue();
21 }
22
23 @Override
24 protected Expression<T> componentForcesOutcome(Expression<T> expression) {
25 if (expression.alwaysFalse()) {
26 return expression;
27 }
28 return null;
29 }
30
31 @Override
32 protected AbstractCompositeExpression<T> newFrom(ImmutableSet<Expression<T>> components) {
33 return new And<>(components);
34 }
35
36 @Override
37 protected String toStringJoiner() {
38 return " AND ";
39 }
40
41 @Override
42 public <J> J transform(Expression.Transformer<T, J> transformer) {
43 return transformer.and(transformComponents(transformer));
44 }
45 }