View Javadoc
1   package org.wikimedia.search.extra.regex.expression;
2   
3   import com.google.common.collect.ImmutableSet;
4   
5   /**
6    * Conjunction.
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  }