[FIR] Implement FirReturnAllowedChecker
Supported diagnostics: - RETURN_NOT_ALLOWED - RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY
This commit is contained in:
committed by
TeamCityServer
parent
254ff77977
commit
3cb17ac2f0
+6
-6
@@ -16,15 +16,15 @@ suspend fun baz() {
|
||||
}
|
||||
|
||||
foo2 {
|
||||
return@baz
|
||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
||||
}
|
||||
|
||||
foo3 {
|
||||
return@baz
|
||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
||||
}
|
||||
|
||||
foo4 {
|
||||
return@baz
|
||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
||||
}
|
||||
|
||||
bar1 {
|
||||
@@ -32,14 +32,14 @@ suspend fun baz() {
|
||||
}
|
||||
|
||||
bar2 {
|
||||
return@baz
|
||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
||||
}
|
||||
|
||||
bar3 {
|
||||
return@baz
|
||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
||||
}
|
||||
|
||||
bar4 {
|
||||
return@baz
|
||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
||||
}
|
||||
}
|
||||
|
||||
-51
@@ -1,51 +0,0 @@
|
||||
// !LANGUAGE: +NewInference +OverloadResolutionByLambdaReturnType
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION -EXPERIMENTAL_API_USAGE -EXPERIMENTAL_UNSIGNED_LITERALS
|
||||
// ISSUE: KT-11265
|
||||
|
||||
// FILE: OverloadResolutionByLambdaReturnType.kt
|
||||
|
||||
package kotlin
|
||||
|
||||
annotation class OverloadResolutionByLambdaReturnType
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
import kotlin.OverloadResolutionByLambdaReturnType
|
||||
|
||||
inline fun <T, R> Array<out T>.myFlatMap(transform: (T) -> Iterable<R>): List<R> {
|
||||
TODO()
|
||||
}
|
||||
|
||||
@OverloadResolutionByLambdaReturnType
|
||||
@JvmName("seqFlatMap")
|
||||
inline fun <T, R> Array<out T>.myFlatMap(transform: (T) -> Sequence<R>): List<R> {
|
||||
TODO()
|
||||
}
|
||||
|
||||
fun String.toList(): List<String> = null!!
|
||||
|
||||
fun test_1(a: Array<String>, b: Boolean) {
|
||||
a.myFlatMap { it.toList().ifEmpty { return } }
|
||||
a.myFlatMap {
|
||||
if (b) return
|
||||
it.toList()
|
||||
}
|
||||
}
|
||||
|
||||
fun <T, R> Array<out T>.noInlineFlatMap(transform: (T) -> Iterable<R>): List<R> {
|
||||
TODO()
|
||||
}
|
||||
|
||||
@OverloadResolutionByLambdaReturnType
|
||||
@JvmName("noInlineSeqFlatMap")
|
||||
fun <T, R> Array<out T>.noInlineFlatMap(transform: (T) -> Sequence<R>): List<R> {
|
||||
TODO()
|
||||
}
|
||||
|
||||
fun test_2(a: Array<String>, b: Boolean) {
|
||||
a.noInlineFlatMap { it.toList().ifEmpty { return } }
|
||||
a.noInlineFlatMap {
|
||||
if (b) return
|
||||
it.toList()
|
||||
}
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +NewInference +OverloadResolutionByLambdaReturnType
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION -EXPERIMENTAL_API_USAGE -EXPERIMENTAL_UNSIGNED_LITERALS
|
||||
// ISSUE: KT-11265
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// FIR_IDENTICAL
|
||||
fun testArray(b: Boolean) {
|
||||
Array(5) { i ->
|
||||
if (b) return
|
||||
i
|
||||
}
|
||||
throw AssertionError()
|
||||
}
|
||||
|
||||
fun testMyArray(b: Boolean) {
|
||||
MyArray(5) { i ->
|
||||
if (b) <!RETURN_NOT_ALLOWED!>return<!>
|
||||
i
|
||||
}
|
||||
throw AssertionError()
|
||||
}
|
||||
|
||||
class MyArray<T> {
|
||||
constructor(size: Int, init: (Int) -> T)
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package
|
||||
|
||||
public fun testArray(/*0*/ b: kotlin.Boolean): kotlin.Unit
|
||||
public fun testMyArray(/*0*/ b: kotlin.Boolean): kotlin.Unit
|
||||
|
||||
public final class MyArray</*0*/ T> {
|
||||
public constructor MyArray</*0*/ T>(/*0*/ size: kotlin.Int, /*1*/ init: (kotlin.Int) -> T)
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user