Vampire
09/03/2025, 5:09 PMfun <T : Any> foo(block: () -> T?) {}
fun <T : Any> foo(block: () -> List<T>?) {}
fun <K : Any, V : Any> foo(block: () -> Map<K, V>?) {}
fun <T : Any> foo(block: () -> Set<T>?) {}
foo { "foo" }
foo { listOf("foo") }
foo { mapOf("foo" to "bar") }
foo { setOf("foo") }
(And without casting the arguments, I mean that the right method is used automatically)Ruckus
09/03/2025, 5:19 PM@OverloadResolutionByLambdaReturnType
annotation that might help. What do you expect foo { null }
to resolve to?Ruckus
09/03/2025, 5:23 PMRuckus
09/03/2025, 5:27 PMVampire
09/03/2025, 5:41 PMnull
case is fine to cast.
This works:
@OptIn(ExperimentalTypeInference::class)
@OverloadResolutionByLambdaReturnType
fun <T : Any> foo(block: () -> T?) {}
@JvmName("bar")
fun <T : Any> foo(block: () -> List<T>?) {}
@JvmName("baz")
fun <K : Any, V : Any> foo(block: () -> Map<K, V>?) {}
@JvmName("bam")
fun <T : Any> foo(block: () -> Set<T>?) {}
foo { null as String? }
foo { "foo" }
foo { listOf("foo") }
foo { mapOf("foo" to "bar") }
foo { setOf("foo") }
Vampire
09/03/2025, 5:58 PMNEW_INFERENCE_IS_LAMBDA_FOR_OVERLOAD_RESOLUTION_INLINE called with null value
😞