// TARGET_BACKEND: JVM // WITH_STDLIB // FILE: J.java import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class J { public static String platformStringIsNull() { return null; } @NotNull public static String notNullStringIsNull() { return null; } @Nullable public static String nullableStringIsNull() { return null; } @NotNull public static String notNullStringIsNotNull() { return "foo"; } public static String platformStringIsNotNull() { return "foo"; } @Nullable public static String nullableStringIsNotNull() { return "foo"; } } // FILE: stringFromJavaPlus.kt import kotlin.test.assertEquals fun box(): String { val n = 123 // Null check behavior in string concatenation might change depending on language design decision for KT-36625. // Cases below that could be affected by KT-36625 are marked with a comment. assertEquals("null", "${J.platformStringIsNull()}") assertEquals("nullBAR", J.platformStringIsNull() + "BAR") // KT-36625 assertEquals("nullBAR", "${J.platformStringIsNull() + "BAR"}") // KT-36625 assertEquals("nullBAR", "${J.platformStringIsNull()}BAR") assertEquals("BARnull", "BAR" + J.platformStringIsNull()) assertEquals("BARnull", "BAR${J.platformStringIsNull()}") assertEquals("123null", "$n${J.platformStringIsNull()}") assertEquals("nullBAR123", J.platformStringIsNull() + "BAR" + n) // KT-36625 assertEquals("nullBAR123", "${J.platformStringIsNull() + "BAR" + n}") // KT-36625 assertEquals("nullBAR123", "${J.platformStringIsNull()}BAR$n") assertEquals("BARnull123", "BAR" + J.platformStringIsNull() + n) assertEquals("BARnull123", "BAR${J.platformStringIsNull()}$n") assertEquals("BARnull123", "BAR" + (J.platformStringIsNull() + n)) // KT-36625 assertEquals("123nullBAR", "$n${J.platformStringIsNull() + "BAR"}") // KT-36625 assertEquals("null", "${J.notNullStringIsNull()}") assertEquals("nullBAR", J.notNullStringIsNull() + "BAR") // KT-36625 assertEquals("nullBAR", "${J.notNullStringIsNull() + "BAR"}") // KT-36625 assertEquals("nullBAR", "${J.notNullStringIsNull()}BAR") assertEquals("BARnull", "BAR" + J.notNullStringIsNull()) assertEquals("BARnull", "BAR${J.notNullStringIsNull()}") assertEquals("123null", "$n${J.notNullStringIsNull()}") assertEquals("nullBAR123", J.notNullStringIsNull() + "BAR" + n) // KT-36625 assertEquals("nullBAR123", "${J.notNullStringIsNull() + "BAR" + n}") // KT-36625 assertEquals("nullBAR123", "${J.notNullStringIsNull()}BAR$n") assertEquals("BARnull123", "BAR" + J.notNullStringIsNull() + n) assertEquals("BARnull123", "BAR${J.notNullStringIsNull()}$n") assertEquals("BARnull123", "BAR" + (J.notNullStringIsNull() + n)) // KT-36625 assertEquals("123nullBAR", "$n${J.notNullStringIsNull() + "BAR"}") // KT-36625 assertEquals("null", "${J.nullableStringIsNull()}") assertEquals("nullBAR", J.nullableStringIsNull() + "BAR") assertEquals("nullBAR", "${J.nullableStringIsNull() + "BAR"}") assertEquals("nullBAR", "${J.nullableStringIsNull()}BAR") assertEquals("BARnull", "BAR" + J.nullableStringIsNull()) assertEquals("BARnull", "BAR${J.nullableStringIsNull()}") assertEquals("123null", "$n${J.nullableStringIsNull()}") assertEquals("nullBAR123", J.nullableStringIsNull() + "BAR" + n) assertEquals("nullBAR123", "${J.nullableStringIsNull() + "BAR" + n}") assertEquals("nullBAR123", "${J.nullableStringIsNull()}BAR$n") assertEquals("BARnull123", "BAR" + J.nullableStringIsNull() + n) assertEquals("BARnull123", "BAR${J.nullableStringIsNull()}$n") assertEquals("BARnull123", "BAR" + (J.nullableStringIsNull() + n)) assertEquals("123nullBAR", "$n${J.nullableStringIsNull() + "BAR"}") assertEquals("foo", "${J.platformStringIsNotNull()}") assertEquals("fooBAR", J.platformStringIsNotNull() + "BAR") assertEquals("fooBAR", "${J.platformStringIsNotNull() + "BAR"}") assertEquals("fooBAR", "${J.platformStringIsNotNull()}BAR") assertEquals("BARfoo", "BAR" + J.platformStringIsNotNull()) assertEquals("BARfoo", "BAR${J.platformStringIsNotNull()}") assertEquals("123foo", "$n${J.platformStringIsNotNull()}") assertEquals("fooBAR123", J.platformStringIsNotNull() + "BAR" + n) assertEquals("fooBAR123", "${J.platformStringIsNotNull() + "BAR" + n}") assertEquals("fooBAR123", "${J.platformStringIsNotNull()}BAR$n") assertEquals("BARfoo123", "BAR" + J.platformStringIsNotNull() + n) assertEquals("BARfoo123", "BAR${J.platformStringIsNotNull()}$n") assertEquals("BARfoo123", "BAR" + (J.platformStringIsNotNull() + n)) assertEquals("123fooBAR", "$n${J.platformStringIsNotNull() + "BAR"}") assertEquals("foo", "${J.notNullStringIsNotNull()}") assertEquals("fooBAR", J.notNullStringIsNotNull() + "BAR") assertEquals("fooBAR", "${J.notNullStringIsNotNull() + "BAR"}") assertEquals("fooBAR", "${J.notNullStringIsNotNull()}BAR") assertEquals("BARfoo", "BAR" + J.notNullStringIsNotNull()) assertEquals("BARfoo", "BAR${J.notNullStringIsNotNull()}") assertEquals("123foo", "$n${J.notNullStringIsNotNull()}") assertEquals("fooBAR123", J.notNullStringIsNotNull() + "BAR" + n) assertEquals("fooBAR123", "${J.notNullStringIsNotNull() + "BAR" + n}") assertEquals("fooBAR123", "${J.notNullStringIsNotNull()}BAR$n") assertEquals("BARfoo123", "BAR" + J.notNullStringIsNotNull() + n) assertEquals("BARfoo123", "BAR${J.notNullStringIsNotNull()}$n") assertEquals("BARfoo123", "BAR" + (J.notNullStringIsNotNull() + n)) assertEquals("123fooBAR", "$n${J.notNullStringIsNotNull() + "BAR"}") assertEquals("foo", "${J.nullableStringIsNotNull()}") assertEquals("fooBAR", J.nullableStringIsNotNull() + "BAR") assertEquals("fooBAR", "${J.nullableStringIsNotNull() + "BAR"}") assertEquals("fooBAR", "${J.nullableStringIsNotNull()}BAR") assertEquals("BARfoo", "BAR" + J.nullableStringIsNotNull()) assertEquals("BARfoo", "BAR${J.nullableStringIsNotNull()}") assertEquals("123foo", "$n${J.nullableStringIsNotNull()}") assertEquals("fooBAR123", J.nullableStringIsNotNull() + "BAR" + n) assertEquals("fooBAR123", "${J.nullableStringIsNotNull() + "BAR" + n}") assertEquals("fooBAR123", "${J.nullableStringIsNotNull()}BAR$n") assertEquals("BARfoo123", "BAR" + J.nullableStringIsNotNull() + n) assertEquals("BARfoo123", "BAR${J.nullableStringIsNotNull()}$n") assertEquals("BARfoo123", "BAR" + (J.nullableStringIsNotNull() + n)) assertEquals("123fooBAR", "$n${J.nullableStringIsNotNull() + "BAR"}") return "OK" }