Files
kotlin-fork/compiler/testData/diagnostics/tests/resolve/specialConstructions/elvisAsCall.kt
T
Mikhail Glukhikh 9b11b5300c Elvis DFA: now only left part is taken into account #KT-9100 Fixed
I had to fix a few incorrect tests using something like x!! in Elvis right part, and also one bug in our code
2015-09-10 17:50:57 +03:00

36 lines
948 B
Kotlin
Vendored

package a
interface A
fun doList(l: List<Int>) = l
fun doInt(i: Int) = i
fun getList(): List<Int>? = null
fun <T> strangeList(f: (T) -> Unit): List<T> = throw Exception("$f")
fun <T: A> emptyListOfA(): List<T> = throw Exception()
//-------------------------------
fun testElvis(a: Int?, b: Int?) {
if (a != null) {
doInt(b ?: <!DEBUG_INFO_SMARTCAST!>a<!>)
}
doList(getList() ?: <!TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>emptyListOfA<!>()) //should be an error
doList(getList() ?: strangeList { doInt(it) }) //lambda was not analyzed
}
fun testDataFlowInfo1(a: Int?, b: Int?) {
val c: Int = a ?: b!!
doInt(c)
// b is nullable if a != null
b <!UNSAFE_INFIX_CALL!>+<!> 1
}
fun testDataFlowInfo2(a: Int?, b: Int?) {
doInt(a ?: b!!)
// b is nullable if a != null
b <!UNSAFE_INFIX_CALL!>+<!> 1
}
fun testTypeMismatch(a: String?, b: Any) {
doInt(<!TYPE_MISMATCH!>a<!> ?: <!TYPE_MISMATCH!>b<!>)
}