@@ -92,26 +92,16 @@ fun interface ValueProvider<T, R, D : Description<T>> {
92
92
}
93
93
94
94
/* *
95
- * Removes `anotherValueProviders<T, R` from current one.
95
+ * Removes providers matching [filter] from the current one.
96
96
*/
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 }
104
99
105
100
/* *
106
101
* Applies [transform] for current provider
107
102
*/
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 )
115
105
116
106
/* *
117
107
* 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>> {
167
157
}
168
158
}
169
159
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)))
170
162
}
171
163
172
164
/* *
@@ -200,6 +192,9 @@ fun interface ValueProvider<T, R, D : Description<T>> {
200
192
}
201
193
}
202
194
}
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) }))
203
198
}
204
199
205
200
companion object {
0 commit comments