Introduce FirFunctionReturnTypeMismatchChecker

This commit is contained in:
vldf
2021-04-03 22:58:19 +03:00
committed by Mikhail Glukhikh
parent 24f1f1221e
commit 57d2eb5da2
80 changed files with 501 additions and 238 deletions
@@ -33,15 +33,15 @@ fun testReturnFromAnonFun() =
fun testReturn1() =
run {
return if (true) 42
else println()
return <!RETURN_TYPE_MISMATCH!>if (true) 42
else println()<!>
}
fun testReturn2() =
run {
return if (true) 42
return <!RETURN_TYPE_MISMATCH!>if (true) 42
else if (true) 42
else println()
else println()<!>
}
fun testUsage1() =
@@ -1,21 +1,21 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNREACHABLE_CODE -UNUSED_PARAMETER -RETURN_NOT_ALLOWED
fun test1() = run {
return "OK"
return <!RETURN_TYPE_MISMATCH!>"OK"<!>
}
fun test2() = run {
fun local(): String {
return ""
}
return ""
return <!RETURN_TYPE_MISMATCH!>""<!>
}
inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> = null!!
fun test3(a: List<String>, b: List<Int>) = a.map {
if (it.length == 3) return null
if (it.length == 4) return ""
if (it.length == 4) return 5
if (it.length == 3) return <!RETURN_TYPE_MISMATCH!>null<!>
if (it.length == 4) return <!RETURN_TYPE_MISMATCH!>""<!>
if (it.length == 4) return <!RETURN_TYPE_MISMATCH!>5<!>
if (it.length == 4) return b
1
}
@@ -24,14 +24,14 @@ fun test4() = run {
fun test5() {
return
return@test4
<!RETURN_TYPE_MISMATCH!>return@test4<!>
return return@test4
return <!RETURN_TYPE_MISMATCH!>return@test4<!>
return fun() { return; return@test4 "" }
return <!RETURN_TYPE_MISMATCH!>fun() { return; return@test4 <!RETURN_TYPE_MISMATCH!>""<!> }<!>
}
return
<!RETURN_TYPE_MISMATCH!>return<!>
3
}
@@ -43,5 +43,5 @@ val foo: Int
}
fun test(): Int = run {
return ""
return <!RETURN_TYPE_MISMATCH!>""<!>
}
@@ -2,11 +2,11 @@
package f
fun test(a: Boolean, b: Boolean): Int {
return if(a) {
return <!RETURN_TYPE_MISMATCH!>if(a) {
1
} else {
if (b) {
3
}
}
}<!>
}
@@ -10,7 +10,7 @@ fun f() = object : ClassData {
fun g() = object : ClassData {
init {
if (true) {
<!RETURN_NOT_ALLOWED!>return<!> 0
<!RETURN_NOT_ALLOWED!>return<!> <!RETURN_TYPE_MISMATCH!>0<!>
}
}
@@ -17,4 +17,4 @@ fun g() = object : ClassData {
fun some(): Int {
return 6
}
}
}
@@ -6,15 +6,15 @@ fun foo() : Int {
doSmth()
}
catch (e: Exception) {
return ""
return <!RETURN_TYPE_MISMATCH!>""<!>
}
finally {
return ""
return <!RETURN_TYPE_MISMATCH!>""<!>
}
}
fun bar() : Int =
try {
<!RETURN_TYPE_MISMATCH!>try {
doSmth()
}
catch (e: Exception) {
@@ -22,7 +22,7 @@ fun bar() : Int =
}
finally {
""
}
}<!>
fun doSmth() {}
@@ -26,22 +26,22 @@ fun testResultOfLambda2() =
fun testReturn1() =
run {
return when {
return <!RETURN_TYPE_MISMATCH!>when {
true -> 42
else -> println()
}
}<!>
}
fun testReturn2() =
run {
return when {
return <!RETURN_TYPE_MISMATCH!>when {
true -> 42
else ->
when {
true -> 42
else -> println()
}
}
}<!>
}
fun testUsage1() =