Hi, I have an issue with the new sumOf methods in Kotlin 1.5 (language and api version are both set to 1.5).
Take this fairly simple example:
val iter = listOf<String>()
val total = iter.sumBy { if (it.isEmpty()) 5 else 0 }
The Kotlin plugin suggests changing sumBy to sumOf, but then it does this:
val iter = listOf<String>()
val total = iter.sumOf<T>({ if (it.isEmpty()) 5 else 0 })
which obviously doesn’t compile because of <T>. If I clean it up, it still doesn’t work:
val iter = listOf<String>()
val total = iter.sumOf { if (it.isEmpty()) 5 else 0 }
because of
Overload resolution ambiguity. All these functions match.
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) → Int): Int defined in kotlin.collections
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) → Long): Long defined in kotlin.collections
How are you supposed to use sumOf?
(I know you could rewrite the example code in a completely different way, but the point is that the code works with sumBy but doesn’t with sumOf, which seems like a pretty big issue if the plugin wants to automatically migrate all sumBy to sumOf.)