CheckedFunction.java

1
/*-
2
 * #%L
3
 * io.earcam.unexceptional
4
 * %%
5
 * Copyright (C) 2016 - 2017 earcam
6
 * %%
7
 * SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
8
 * 
9
 * You <b>must</b> choose to accept, in full - any individual or combination of 
10
 * the following licenses:
11
 * <ul>
12
 * 	<li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
13
 * 	<li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
14
 * 	<li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
15
 * 	<li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
16
 * </ul>
17
 * #L%
18
 */
19
package io.earcam.unexceptional;
20
21
import java.util.Objects;
22
23
/**
24
 * A checked parallel of {@link java.util.function.Function}
25
 * 
26
 * @param <T> argument type
27
 * @param <R> return type
28
 * @param <E> the type of Throwable declared
29
 * 
30
 * @see java.util.function.Function
31
 */
32
@FunctionalInterface
33
public interface CheckedFunction<T, R, E extends Throwable> {
34
35
	/**
36
	 * See {@link java.util.function.Function#apply(Object)}
37
	 * 
38
	 * @param t the function argument
39
	 * @return the function result
40
	 * @throws Throwable any throwable
41
	 * 
42
	 * @since 0.2.0
43
	 */
44
	public abstract R apply(T t) throws E;
45
46
47
	/**
48
	 * See {@link java.util.function.Function#compose(java.util.function.Function)}
49
	 * 
50
	 * @param <V> the type of input to the {@code before} function, and to the
51
	 * composed function
52
	 * @param before the function to apply before this function is applied
53
	 * @return a composed function that first applies the {@code before}
54
	 * function and then applies this function
55
	 * @throws NullPointerException if {@code before} is {@code null}
56
	 * 
57
	 * @since 0.2.0
58
	 *
59
	 * @see java.util.function.Function#compose(java.util.function.Function)
60
	 */
61
	public default <V> CheckedFunction<V, R, E> compose(CheckedFunction<? super V, ? extends T, ? extends E> before)
62
	{
63
		Objects.requireNonNull(before);
64 2 1. compose : mutated return of Object value for io/earcam/unexceptional/CheckedFunction::compose to ( if (x != null) null else throw new RuntimeException ) → KILLED
2. lambda$compose$0 : mutated return of Object value for io/earcam/unexceptional/CheckedFunction::lambda$compose$0 to ( if (x != null) null else throw new RuntimeException ) → KILLED
		return (V v) -> apply(before.apply(v));
65
	}
66
67
68
	/**
69
	 * See {@link java.util.function.Function#andThen(java.util.function.Function)}
70
	 * 
71
	 * @param <V> the type of output of the {@code after} function, and of the
72
	 * composed function
73
	 * @param after the function to apply after this function is applied
74
	 * @return a composed function that first applies this function and then
75
	 * applies the {@code after} function
76
	 * @throws NullPointerException if {@code after} is {@code null}
77
	 * 
78
	 * @since 0.2.0
79
	 */
80
	public default <V> CheckedFunction<T, V, E> andThen(CheckedFunction<? super R, ? extends V, ? extends E> after)
81
	{
82
		Objects.requireNonNull(after);
83 2 1. andThen : mutated return of Object value for io/earcam/unexceptional/CheckedFunction::andThen to ( if (x != null) null else throw new RuntimeException ) → KILLED
2. lambda$andThen$1 : mutated return of Object value for io/earcam/unexceptional/CheckedFunction::lambda$andThen$1 to ( if (x != null) null else throw new RuntimeException ) → KILLED
		return (T t) -> after.apply(apply(t));
84
	}
85
86
87
	/**
88
	 * See {@link java.util.function.Function#identity()}
89
	 *
90
	 * @param <T> argument and return type
91
	 * @return the argument as given
92
	 * 
93
	 * @since 0.3.0
94
	 */
95
	public static <T, E extends Throwable> CheckedFunction<T, T, E> identity()
96
	{
97 2 1. identity : mutated return of Object value for io/earcam/unexceptional/CheckedFunction::identity to ( if (x != null) null else throw new RuntimeException ) → KILLED
2. lambda$identity$2 : mutated return of Object value for io/earcam/unexceptional/CheckedFunction::lambda$identity$2 to ( if (x != null) null else throw new RuntimeException ) → KILLED
		return t -> t;
98
	}
99
}

Mutations

64

1.1
Location : compose
Killed by : io.earcam.unexceptional.CheckedFunctionTest.composeAppliesBefore()
mutated return of Object value for io/earcam/unexceptional/CheckedFunction::compose to ( if (x != null) null else throw new RuntimeException ) → KILLED

2.2
Location : lambda$compose$0
Killed by : io.earcam.unexceptional.CheckedFunctionTest.composeAppliesBefore()
mutated return of Object value for io/earcam/unexceptional/CheckedFunction::lambda$compose$0 to ( if (x != null) null else throw new RuntimeException ) → KILLED

83

1.1
Location : andThen
Killed by : io.earcam.unexceptional.CheckedFunctionTest.andThenAppliesAfter()
mutated return of Object value for io/earcam/unexceptional/CheckedFunction::andThen to ( if (x != null) null else throw new RuntimeException ) → KILLED

2.2
Location : lambda$andThen$1
Killed by : io.earcam.unexceptional.CheckedFunctionTest.andThenAppliesAfter()
mutated return of Object value for io/earcam/unexceptional/CheckedFunction::lambda$andThen$1 to ( if (x != null) null else throw new RuntimeException ) → KILLED

97

1.1
Location : identity
Killed by : io.earcam.unexceptional.ClosingTest.closesAfterApplyingNull()
mutated return of Object value for io/earcam/unexceptional/CheckedFunction::identity to ( if (x != null) null else throw new RuntimeException ) → KILLED

2.2
Location : lambda$identity$2
Killed by : io.earcam.unexceptional.ClosingTest.closesAfterApplyingNull()
mutated return of Object value for io/earcam/unexceptional/CheckedFunction::lambda$identity$2 to ( if (x != null) null else throw new RuntimeException ) → KILLED

Active mutators

Tests examined


Report generated by PIT 1.4.0