1c71e64f58
Before this commit, questionable optimization existed which unwrapped string interpolating call with single argument to this argument. However, this led to source element loss and the necessity of sub-hacks. In this commit we dropped this optimization (anyway user can remove this single-expression string template in code if needed) to keep source elements intact.
139 lines
6.6 KiB
Kotlin
Vendored
139 lines
6.6 KiB
Kotlin
Vendored
// TARGET_BACKEND: JVM
|
|
// WITH_RUNTIME
|
|
|
|
// 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"
|
|
}
|