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
@@ -25,11 +25,11 @@ fun <T> bind2(r: Option<T>): Option<T> {
}
fun <T, R> bind3(r: Option<T>): Option<T> {
return <!NI;TYPE_MISMATCH!>if (r is Some) {
return if (r is Some) <!NI;TYPE_MISMATCH!>{
// Diagnoses an error correctly
if (true) <!OI;TYPE_MISMATCH!>None<R>()<!> else r
}
else r<!>
}<!>
else r
}
fun <T> bindWhen(r: Option<T>): Option<T> {
@@ -2,9 +2,9 @@
package f
fun test(a: Boolean, b: Boolean): Int {
return <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>if(a) {
return if(a) {
1
} else {
} else <!NI;TYPE_MISMATCH!>{
<!OI;TYPE_MISMATCH!><!INVALID_IF_AS_EXPRESSION!>if<!> (b) {
3
}<!>
@@ -30,11 +30,11 @@ val testSafeCall4: String? = J.m[""]?.let { it.toString() }
val testIf1: String = if (true) J.s else J.s
val testIf2: String? = if (true) J.s else J.s
val testIf3: String = <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>if (true) <!OI;TYPE_MISMATCH!>J.m[""]<!> else <!OI;TYPE_MISMATCH!>J.m[""]<!><!>
val testIf3: String = if (true) <!TYPE_MISMATCH!>J.m[""]<!> else <!TYPE_MISMATCH!>J.m[""]<!>
val testIf4: String? = if (true) J.m[""] else J.m[""]
val testWhen1: String = when { else -> J.s }
val testWhen2: String? = when { else -> J.s }
val testWhen3: String = <!NI;TYPE_MISMATCH!>when { else -> <!OI;TYPE_MISMATCH!>J.m[""]<!> }<!>
val testWhen3: String = when { else -> <!TYPE_MISMATCH!>J.m[""]<!> }
val testWhen4: String? = when { else -> J.m[""] }
@@ -14,15 +14,15 @@ fun foo() : Int {
}
fun bar() : Int =
<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>try {
try <!NI;TYPE_MISMATCH!>{
<!OI;TYPE_MISMATCH!>doSmth()<!>
}
catch (e: Exception) {
}<!>
catch (e: Exception) <!NI;TYPE_MISMATCH!>{
<!OI;TYPE_MISMATCH!>""<!>
}
}<!>
finally {
<!UNUSED_EXPRESSION!>""<!>
}<!>
}
fun doSmth() {}