Files
kotlin-fork/compiler/testData/codegen/box/inference/builderInference/nullability.kt
T
2021-09-10 16:29:13 +03:00

69 lines
1.5 KiB
Kotlin
Vendored

// !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME
// DONT_TARGET_EXACT_BACKEND: WASM
// FILE: main.kt
import kotlin.experimental.ExperimentalTypeInference
interface TestInterface<R> {
fun emit(r: R)
fun get(): R
}
@UseExperimental(ExperimentalTypeInference::class)
fun <R1> build(@BuilderInference block: TestInterface<R1>.() -> Unit) {}
@UseExperimental(ExperimentalTypeInference::class)
fun <R1 : Any> build2(@BuilderInference block: TestInterface<R1>.() -> Unit) {}
@UseExperimental(ExperimentalTypeInference::class)
fun <R1 : R2, R2 : Any> build3(@BuilderInference block: TestInterface<R1>.() -> Unit) {}
@UseExperimental(ExperimentalTypeInference::class)
fun <R1 : R2, R2> build4(x: R2, @BuilderInference block: TestInterface<R1>.() -> Unit) {}
fun test(a: String?) {
val ret1 = build {
emit("1")
// get()?.equals("")
val x = get()
// x?.equals("")
x ?: "1"
// x!!
""
}
// val ret2 = build2 {
// emit(1)
// get()?.equals("")
// val x = get()
// x?.equals("")
// x ?: 1
// x!!
// ""
// }
// val ret3 = build3 {
// emit(1)
// get()?.equals("")
// val x = get()
// x?.equals("")
// x ?: 1
// x!!
// ""
// }
// val ret4 = build4(1) {
// emit(1)
// get()?.equals("")
// val x = get()
// x?.equals("")
// x ?: 1
// x!!
// ""
// }
}
fun box(): String {
test("")
return "OK"
}