1 package org.wikimedia.search.extra.regex.expression;
2
3 import static com.google.common.base.Preconditions.checkNotNull;
4
5 import com.google.common.collect.ImmutableSet;
6
7 import lombok.EqualsAndHashCode;
8
9
10
11
12 @EqualsAndHashCode
13 public final class Leaf<T> implements Expression<T> {
14 @SafeVarargs
15 public static <T> ImmutableSet<Expression<T>> leaves(T... ts) {
16 ImmutableSet.Builder<Expression<T>> builder = ImmutableSet.builder();
17 for (T t : ts) {
18 builder.add(new Leaf<>(t));
19 }
20 return builder.build();
21 }
22
23 private final T t;
24
25 public Leaf(T t) {
26 this.t = checkNotNull(t);
27 }
28
29 public String toString() {
30 return t.toString();
31 }
32
33 @Override
34 public Expression<T> simplify() {
35 return this;
36 }
37
38 @Override
39 public boolean alwaysTrue() {
40 return false;
41 }
42
43 @Override
44 public boolean alwaysFalse() {
45 return false;
46 }
47
48 @Override
49 public boolean isComposite() {
50 return false;
51 }
52
53 @Override
54 public <J> J transform(Expression.Transformer<T, J> transformer) {
55 return transformer.leaf(t);
56 }
57
58 @Override
59 public int countClauses() {
60 return 0;
61 }
62 }