| // 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; } | |
| } |