Relax rules about inferring to Nothing for special calls

#KT-37388 Fixed
 #KT-38427 Fixed
 #KT-39953 Fixed
 #KT-38899 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2020-07-15 10:59:10 +03:00
parent e45cd02b01
commit 100a6f70ca
55 changed files with 424 additions and 264 deletions
@@ -34,6 +34,6 @@ fun main() {
}
}
val <!UNUSED_VARIABLE!>f<!> : String = <!NI;TYPE_MISMATCH!><!OI;TYPE_MISMATCH!>a<!><!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!><!>
val <!UNUSED_VARIABLE!>f<!> : String = <!TYPE_MISMATCH!>a<!><!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
checkSubtype<String>(<!NI;TYPE_MISMATCH!><!OI;TYPE_MISMATCH!>a<!><!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!><!>)
}
@@ -10,46 +10,46 @@ fun f1(s: Int?): Int {
}
fun f2(s: Int?): Int {
return <!NI;TYPE_MISMATCH!>when (s) {
!is Int -> <!OI;TYPE_MISMATCH!>s<!>
return when (s) {
!is Int -> <!TYPE_MISMATCH!>s<!>
else -> <!DEBUG_INFO_SMARTCAST!>s<!>
}<!>
}
}
fun f3(s: Int?): Int {
return <!NI;TYPE_MISMATCH!>when (s) {
return when (s) {
is Int -> <!DEBUG_INFO_SMARTCAST!>s<!>
else -> <!OI;TYPE_MISMATCH!>s<!>
}<!>
else -> <!TYPE_MISMATCH!>s<!>
}
}
fun f4(s: Int?): Int {
return <!NI;TYPE_MISMATCH!>when {
return when {
s == 4 -> <!DEBUG_INFO_SMARTCAST!>s<!>
s == null -> <!DEBUG_INFO_CONSTANT, OI;TYPE_MISMATCH!>s<!>
s == null -> <!DEBUG_INFO_CONSTANT, TYPE_MISMATCH!>s<!>
else -> <!DEBUG_INFO_SMARTCAST!>s<!>
}<!>
}
}
fun f5(s: Int?): Int {
return <!NI;TYPE_MISMATCH!>when (s) {
s -> <!OI;TYPE_MISMATCH!>s<!>
return when (s) {
s -> <!TYPE_MISMATCH!>s<!>
s!! -> <!DEBUG_INFO_SMARTCAST!>s<!>
s -> <!DEBUG_INFO_SMARTCAST!>s<!>
else -> 0
}<!>
}
}
fun f6(s: Int?): Int {
return <!NI;TYPE_MISMATCH!>when {
return when {
s is Int -> <!DEBUG_INFO_SMARTCAST!>s<!>
else -> <!OI;TYPE_MISMATCH!>s<!>
}<!>
else -> <!TYPE_MISMATCH!>s<!>
}
}
fun f7(s: Int?): Int {
return <!NI;TYPE_MISMATCH!>when {
s !is Int -> <!OI;TYPE_MISMATCH!>s<!>
return when {
s !is Int -> <!TYPE_MISMATCH!>s<!>
else -> <!DEBUG_INFO_SMARTCAST!>s<!>
}<!>
}
}