@@ -92,26 +92,16 @@ fun interface ValueProvider<T, R, D : Description<T>> {
9292 }
9393
9494 /* *
95- * Removes `anotherValueProviders<T, R` from current one.
95+ * Removes providers matching [filter] from the current one.
9696 */
97- fun except (filter : (ValueProvider <T , R , D >) -> Boolean ): ValueProvider <T , R , D > {
98- return if (this is Combined ) {
99- Combined (providers.map { it.unwrapIfFallback() }.filterNot(filter))
100- } else {
101- Combined (if (filter(unwrapIfFallback())) emptyList() else listOf (this ))
102- }
103- }
97+ fun except (filter : (ValueProvider <T , R , D >) -> Boolean ): ValueProvider <T , R , D > =
98+ map { if (filter(it)) Combined (emptyList()) else it }
10499
105100 /* *
106101 * Applies [transform] for current provider
107102 */
108- fun map (transform : (ValueProvider <T , R , D >) -> ValueProvider <T , R , D >): ValueProvider <T , R , D > {
109- return if (this is Combined ) {
110- Combined (providers.map(transform))
111- } else {
112- transform(this )
113- }
114- }
103+ fun map (transform : (ValueProvider <T , R , D >) -> ValueProvider <T , R , D >): ValueProvider <T , R , D > =
104+ transform(this )
115105
116106 /* *
117107 * Uses fallback value provider in case when 'this' one failed to generate any value.
@@ -167,6 +157,8 @@ fun interface ValueProvider<T, R, D : Description<T>> {
167157 }
168158 }
169159
160+ override fun map (transform : (ValueProvider <T , R , D >) -> ValueProvider <T , R , D >): ValueProvider <T , R , D > =
161+ transform(Fallback (provider.map(transform), fallback.map(transform)))
170162 }
171163
172164 /* *
@@ -200,6 +192,9 @@ fun interface ValueProvider<T, R, D : Description<T>> {
200192 }
201193 }
202194 }
195+
196+ override fun map (transform : (ValueProvider <T , R , D >) -> ValueProvider <T , R , D >): ValueProvider <T , R , D > =
197+ transform(Combined (providers.map { it.map(transform) }))
203198 }
204199
205200 companion object {
0 commit comments