Skip to content

Commit 4caec50

Browse files
Refactor: Extract Class
1 parent 607ecea commit 4caec50

File tree

2 files changed

+45
-49
lines changed

2 files changed

+45
-49
lines changed

core/src/main/java/dev/failsafe/FailurePolicyBuilder.java

Lines changed: 3 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
import java.util.List;
2424
import java.util.Objects;
2525

26+
import static dev.failsafe.FailurePredicates.resultPredicateFor;
27+
import static dev.failsafe.FailurePredicates.*;
28+
2629
/**
2730
* A Policy that allows configurable conditions to determine whether an execution is a failure.
2831
* <ul>
@@ -135,53 +138,4 @@ public S handleResultIf(CheckedPredicate<R> resultPredicate) {
135138
config.failureConditions.add(resultPredicateFor(resultPredicate));
136139
return (S) this;
137140
}
138-
139-
/**
140-
* Returns a predicate that evaluates whether the {@code result} equals an execution result.
141-
*/
142-
static <R> CheckedBiPredicate<R, Throwable> resultPredicateFor(R result) {
143-
return (t, u) -> result == null ? t == null && u == null : Objects.equals(result, t);
144-
}
145-
146-
/**
147-
* Returns a predicate that evaluates the {@code failurePredicate} against a failure.
148-
*/
149-
@SuppressWarnings("unchecked")
150-
static <R> CheckedBiPredicate<R, Throwable> failurePredicateFor(
151-
CheckedPredicate<? extends Throwable> failurePredicate) {
152-
return (t, u) -> u != null && ((CheckedPredicate<Throwable>) failurePredicate).test(u);
153-
}
154-
155-
/**
156-
* Returns a predicate that evaluates the {@code resultPredicate} against a result, when present.
157-
* <p>
158-
* Short-circuits to false without invoking {@code resultPredicate}, when result is not present (i.e.
159-
* BiPredicate.test(null, Throwable)).
160-
*/
161-
static <R> CheckedBiPredicate<R, Throwable> resultPredicateFor(CheckedPredicate<R> resultPredicate) {
162-
return (t, u) -> {
163-
if (u == null) {
164-
return resultPredicate.test(t);
165-
} else {
166-
// resultPredicate is only defined over the success type.
167-
// It doesn't know how to handle a failure of type Throwable,
168-
// so we return false here.
169-
return false;
170-
}
171-
};
172-
}
173-
174-
/**
175-
* Returns a predicate that returns whether any of the {@code failures} are assignable from an execution failure.
176-
*/
177-
static <R> CheckedBiPredicate<R, Throwable> failurePredicateFor(List<Class<? extends Throwable>> failures) {
178-
return (t, u) -> {
179-
if (u == null)
180-
return false;
181-
for (Class<? extends Throwable> failureType : failures)
182-
if (failureType.isAssignableFrom(u.getClass()))
183-
return true;
184-
return false;
185-
};
186-
}
187141
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package dev.failsafe;
2+
3+
import dev.failsafe.function.CheckedBiPredicate;
4+
import dev.failsafe.function.CheckedPredicate;
5+
6+
import java.util.List;
7+
import java.util.Objects;
8+
9+
public final class FailurePredicates {
10+
private FailurePredicates() {}
11+
12+
public static <R> CheckedBiPredicate<R, Throwable> resultPredicateFor(R result) {
13+
return (t, u) -> result == null ? t == null && u == null : Objects.equals(result, t);
14+
}
15+
16+
@SuppressWarnings("unchecked")
17+
public static <R> CheckedBiPredicate<R, Throwable> failurePredicateFor(
18+
CheckedPredicate<? extends Throwable> failurePredicate) {
19+
return (t, u) -> u != null && ((CheckedPredicate<Throwable>) failurePredicate).test(u);
20+
}
21+
22+
public static <R> CheckedBiPredicate<R, Throwable> resultPredicateFor(CheckedPredicate<R> resultPredicate) {
23+
return (t, u) -> {
24+
if (u == null) {
25+
return resultPredicate.test(t);
26+
} else {
27+
return false;
28+
}
29+
};
30+
}
31+
32+
public static <R> CheckedBiPredicate<R, Throwable> failurePredicateFor(List<Class<? extends Throwable>> failures) {
33+
return (t, u) -> {
34+
if (u == null)
35+
return false;
36+
for (Class<? extends Throwable> failureType : failures)
37+
if (failureType.isAssignableFrom(u.getClass()))
38+
return true;
39+
return false;
40+
};
41+
}
42+
}

0 commit comments

Comments
 (0)