| 1 | package com.github.valid8j.pcond.core.fluent; | |
| 2 | ||
| 3 | import com.github.valid8j.pcond.fluent.Statement; | |
| 4 | import com.github.valid8j.pcond.forms.Functions; | |
| 5 | import com.github.valid8j.pcond.internals.InternalChecks; | |
| 6 | ||
| 7 | import java.util.Objects; | |
| 8 | import java.util.function.BiFunction; | |
| 9 | import java.util.function.Function; | |
| 10 | import java.util.function.Predicate; | |
| 11 | import java.util.function.Supplier; | |
| 12 | ||
| 13 | import static java.lang.String.format; | |
| 14 | import static java.util.Objects.requireNonNull; | |
| 15 | ||
| 16 | /** | |
| 17 | * A transformer can be chained through `transformValueWith(,)` method. | |
| 18 | * | |
| 19 | * @param <TX> The "current" transformer type | |
| 20 | * @param <V> The checker type returned directory by `then()` method. | |
| 21 | * @param <T> The type of original value given. | |
| 22 | * @param <R> The type of the target value of the "current" transformer type. | |
| 23 | */ | |
| 24 | public interface Transformer< | |
| 25 | TX extends Transformer<TX, V, T, R>, // SELF | |
| 26 | V extends Checker<V, T, R>, | |
| 27 | T, | |
| 28 | R> extends | |
| 29 | Matcher<TX, T, R>, | |
| 30 | Statement<T> { | |
| 31 | ||
| 32 | TX addTransformAndCheckClause(Function<Transformer<?, ?, R, R>, Predicate<R>> clause); | |
| 33 | ||
| 34 | /** | |
| 35 | * Returns a checker object for this object. | |
| 36 | * @return A checker object for this object. | |
| 37 | */ | |
| 38 | V then(); | |
| 39 | ||
| 40 | @SuppressWarnings("unchecked") | |
| 41 | default TX satisfies(Function<TX, Statement<T>> clause) { | |
| 42 | requireNonNull(clause); | |
| 43 |
2
1. lambda$satisfies$0 : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer::lambda$satisfies$0 → KILLED 2. satisfies : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer::satisfies → KILLED |
return this.addTransformAndCheckClause(tx -> (Predicate<R>) clause.apply((TX) tx).statementPredicate()); |
| 44 | } | |
| 45 | ||
| 46 | /** | |
| 47 | * A synonym of {@link Transformer#then()} method. | |
| 48 | * @return A checker object for this object. | |
| 49 | */ | |
| 50 | default V satisfies() { | |
| 51 |
1
1. satisfies : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer::satisfies → KILLED |
return then(); |
| 52 | } | |
| 53 | ||
| 54 | /** | |
| 55 | * A synonym of {@link Transformer#then()} method. | |
| 56 | * @return A checker object for this object. | |
| 57 | */ | |
| 58 | default V toBe() { | |
| 59 |
1
1. toBe : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer::toBe → KILLED |
return then(); |
| 60 | } | |
| 61 | | |
| 62 | /** | |
| 63 | * | |
| 64 | * @param func A function to transform the target value of `TX` to `TY`. | |
| 65 | * @param transformerFactory A factory function to create a transformer to be returned. | |
| 66 | * @return A transformer `TY`. | |
| 67 | * @param <TY> The type of transformer returned by this method. | |
| 68 | * @param <W> The type of checker returned by the transformer `TY` 's `then()` method. | |
| 69 | * @param <RR> The type of target value of the transformer `TY` | |
| 70 | */ | |
| 71 | <TY extends Transformer<TY, W, T, RR>, | |
| 72 | W extends Checker<W, T, RR>, | |
| 73 | RR> | |
| 74 | TY transformValueWith(Function<? super R, RR> func, BiFunction<Supplier<T>, Function<T, RR>, TY> transformerFactory); | |
| 75 | ||
| 76 | abstract class Base< | |
| 77 | TX extends Transformer<TX, V, T, R>, // SELF | |
| 78 | V extends Checker<V, T, R>, | |
| 79 | T, | |
| 80 | R> extends | |
| 81 | Matcher.Base< | |
| 82 | TX, | |
| 83 | T, | |
| 84 | R> implements | |
| 85 | Transformer< | |
| 86 | TX, | |
| 87 | V, | |
| 88 | T, | |
| 89 | R> { | |
| 90 | ||
| 91 | protected Base(Supplier<T> baseValue, Function<T, R> transformFunction) { | |
| 92 | super(baseValue, transformFunction); | |
| 93 | } | |
| 94 | ||
| 95 | public V then() { | |
| 96 |
1
1. lambda$then$0 : replaced return value with "" for com/github/valid8j/pcond/core/fluent/Transformer$Base::lambda$then$0 → NO_COVERAGE |
InternalChecks.requireState(this, Matcher.Base::hasNoChild, v -> format("Predicate is already added. %s", v.childPredicates())); |
| 97 |
1
1. then : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer$Base::then → KILLED |
return toChecker(this.transformFunction()); |
| 98 | } | |
| 99 | ||
| 100 | public < | |
| 101 | TY extends Transformer<TY, W, T, RR>, | |
| 102 | W extends Checker<W, T, RR>, | |
| 103 | RR> | |
| 104 | TY transformValueWith(Function<? super R, RR> func, BiFunction<Supplier<T>, Function<T, RR>, TY> transformerFactory) { | |
| 105 | Function<T, R> tf = transformFunction(); | |
| 106 |
1
1. transformValueWith : negated conditional → KILLED |
@SuppressWarnings("unchecked") Function<T, RR> transformFunction = Objects.equals(tf, Functions.identity()) ? |
| 107 | (Function<T, RR>) func : | |
| 108 | tf.andThen(func); | |
| 109 |
1
1. transformValueWith : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer$Base::transformValueWith → KILLED |
return transformerFactory.apply(this::baseValue, transformFunction); |
| 110 | } | |
| 111 | ||
| 112 | @SuppressWarnings("unchecked") | |
| 113 | @Override | |
| 114 | public TX addTransformAndCheckClause(Function<Transformer<?, ?, R, R>, Predicate<R>> clause) { | |
| 115 |
2
1. addTransformAndCheckClause : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer$Base::addTransformAndCheckClause → KILLED 2. lambda$addTransformAndCheckClause$1 : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer$Base::lambda$addTransformAndCheckClause$1 → KILLED |
return this.addPredicate(tx -> clause.apply((Transformer<?, ?, R, R>) tx)); |
| 116 | } | |
| 117 | ||
| 118 | @Override | |
| 119 | public T statementValue() { | |
| 120 |
1
1. statementValue : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer$Base::statementValue → KILLED |
return baseValue(); |
| 121 | } | |
| 122 | ||
| 123 | @Override | |
| 124 | public Predicate<T> statementPredicate() { | |
| 125 |
1
1. statementPredicate : replaced return value with null for com/github/valid8j/pcond/core/fluent/Transformer$Base::statementPredicate → KILLED |
return toPredicate(); |
| 126 | } | |
| 127 | ||
| 128 | protected abstract V toChecker(Function<T, R> transformFunction); | |
| 129 | } | |
| 130 | } | |
Mutations | ||
| 43 |
1.1 2.2 |
|
| 51 |
1.1 |
|
| 59 |
1.1 |
|
| 96 |
1.1 |
|
| 97 |
1.1 |
|
| 106 |
1.1 |
|
| 109 |
1.1 |
|
| 115 |
1.1 2.2 |
|
| 120 |
1.1 |
|
| 125 |
1.1 |