| // TARGET_BACKEND: JVM |
| // WITH_STDLIB |
| |
| // FILE: safeCallWithElvisAndEnhancedNullability.kt |
| |
| import kotlin.test.assertEquals |
| |
| fun check(a : A?) : Int { |
| return a?.y?.x ?: (a?.x ?: 3) |
| } |
| |
| fun checkLeftAssoc(a : A?) : Int { |
| return (a?.y?.x ?: a?.x) ?: 3 |
| } |
| |
| fun box() : String { |
| val a1 = A(2, A(1, null)) |
| val a2 = A(2, null) |
| val a3 = null |
| |
| assertEquals(1, check(a1)) |
| assertEquals(2, check(a2)) |
| assertEquals(3, check(a3)) |
| |
| assertEquals(1, checkLeftAssoc(a1)) |
| assertEquals(2, checkLeftAssoc(a2)) |
| assertEquals(3, checkLeftAssoc(a3)) |
| |
| return "OK" |
| } |
| |
| // FILE: A.java |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| public class A { |
| private Integer x; |
| private A y; |
| |
| public A(Integer x, A y) { |
| this.x = x; |
| this.y = y; |
| } |
| |
| @NotNull |
| public Integer getX() { return x; } |
| |
| @Nullable |
| public A getY() { return y; } |
| } |