Introduce basic suspend conversion in FE
#KT-15917 In Progress
This commit is contained in:
+23
@@ -0,0 +1,23 @@
|
||||
// !LANGUAGE: +SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo1(f: suspend () -> String) {}
|
||||
fun foo2(f: suspend (Int) -> String) {}
|
||||
fun foo3(f: suspend () -> Unit) {}
|
||||
|
||||
fun test(
|
||||
f0: suspend () -> String,
|
||||
f1: () -> String,
|
||||
f2: (Int) -> String,
|
||||
f3: () -> Unit,
|
||||
) {
|
||||
foo1 { "str" }
|
||||
foo1(f0)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f1)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo2<!>(f2)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo3<!>(f3)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f2)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f3)
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// !LANGUAGE: +SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo1(f: suspend () -> String) {}
|
||||
fun foo2(f: suspend (Int) -> String) {}
|
||||
fun foo3(f: suspend () -> Unit) {}
|
||||
|
||||
fun test(
|
||||
f0: suspend () -> String,
|
||||
f1: () -> String,
|
||||
f2: (Int) -> String,
|
||||
f3: () -> Unit,
|
||||
) {
|
||||
foo1 { "str" }
|
||||
foo1(f0)
|
||||
|
||||
foo1(f1)
|
||||
foo2(f2)
|
||||
foo3(f3)
|
||||
|
||||
foo1(<!TYPE_MISMATCH!>f2<!>)
|
||||
foo1(<!TYPE_MISMATCH!>f3<!>)
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public fun foo1(/*0*/ f: suspend () -> kotlin.String): kotlin.Unit
|
||||
public fun foo2(/*0*/ f: suspend (kotlin.Int) -> kotlin.String): kotlin.Unit
|
||||
public fun foo3(/*0*/ f: suspend () -> kotlin.Unit): kotlin.Unit
|
||||
public fun test(/*0*/ f0: suspend () -> kotlin.String, /*1*/ f1: () -> kotlin.String, /*2*/ f2: (kotlin.Int) -> kotlin.String, /*3*/ f3: () -> kotlin.Unit): kotlin.Unit
|
||||
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
// !LANGUAGE: +SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION
|
||||
|
||||
class Inv2<T, K>
|
||||
|
||||
fun <T> foo1(f: suspend (T) -> String): T = TODO()
|
||||
fun <T> foo2(f: suspend () -> T): T = TODO()
|
||||
fun <T, K> foo3(f: suspend (T) -> K): Inv2<T, K> = TODO()
|
||||
|
||||
fun <I> id(e: I): I = e
|
||||
|
||||
fun test(f: (Int) -> String, g: () -> String) {
|
||||
val a0 = <!INAPPLICABLE_CANDIDATE!>foo1<!>(f)
|
||||
a0
|
||||
|
||||
val a1 = <!INAPPLICABLE_CANDIDATE!>foo2<!>(g)
|
||||
a1
|
||||
|
||||
val a2 = <!INAPPLICABLE_CANDIDATE!>foo3<!>(f)
|
||||
a2
|
||||
|
||||
val a3 = <!INAPPLICABLE_CANDIDATE!>foo1<!>(id(f))
|
||||
a3
|
||||
|
||||
val a4 = <!INAPPLICABLE_CANDIDATE!>foo2<!>(id(g))
|
||||
a4
|
||||
|
||||
val a5 = <!INAPPLICABLE_CANDIDATE!>foo3<!>(id(f))
|
||||
a5
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// !LANGUAGE: +SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION
|
||||
|
||||
class Inv2<T, K>
|
||||
|
||||
fun <T> foo1(f: suspend (T) -> String): T = TODO()
|
||||
fun <T> foo2(f: suspend () -> T): T = TODO()
|
||||
fun <T, K> foo3(f: suspend (T) -> K): Inv2<T, K> = TODO()
|
||||
|
||||
fun <I> id(e: I): I = e
|
||||
|
||||
fun test(f: (Int) -> String, g: () -> String) {
|
||||
val a0 = foo1(f)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int")!>a0<!>
|
||||
|
||||
val a1 = foo2(g)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>a1<!>
|
||||
|
||||
val a2 = foo3(f)
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Inv2<kotlin.Int, kotlin.String>")!>a2<!>
|
||||
|
||||
val a3 = foo1(id(f))
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int")!>a3<!>
|
||||
|
||||
val a4 = foo2(id(g))
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>a4<!>
|
||||
|
||||
val a5 = foo3(id(f))
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("Inv2<kotlin.Int, kotlin.String>")!>a5<!>
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ T> foo1(/*0*/ f: suspend (T) -> kotlin.String): T
|
||||
public fun </*0*/ T> foo2(/*0*/ f: suspend () -> T): T
|
||||
public fun </*0*/ T, /*1*/ K> foo3(/*0*/ f: suspend (T) -> K): Inv2<T, K>
|
||||
public fun </*0*/ I> id(/*0*/ e: I): I
|
||||
public fun test(/*0*/ f: (kotlin.Int) -> kotlin.String, /*1*/ g: () -> kotlin.String): kotlin.Unit
|
||||
|
||||
public final class Inv2</*0*/ T, /*1*/ K> {
|
||||
public constructor Inv2</*0*/ T, /*1*/ K>()
|
||||
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
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// !LANGUAGE: +SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo(f: () -> String, g: suspend () -> String, h: suspend () -> String) {}
|
||||
|
||||
fun test(f: () -> String, g: suspend () -> String) {
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(f, f, f)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(f, { "str" }, f)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(f, f, g)
|
||||
foo(f, g, g)
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// !LANGUAGE: +SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo(f: () -> String, g: suspend () -> String, h: suspend () -> String) {}
|
||||
|
||||
fun test(f: () -> String, g: suspend () -> String) {
|
||||
foo(f, f, f)
|
||||
foo(f, { "str" }, f)
|
||||
foo(f, f, g)
|
||||
foo(f, g, g)
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
public fun foo(/*0*/ f: () -> kotlin.String, /*1*/ g: suspend () -> kotlin.String, /*2*/ h: suspend () -> kotlin.String): kotlin.Unit
|
||||
public fun test(/*0*/ f: () -> kotlin.String, /*1*/ g: suspend () -> kotlin.String): kotlin.Unit
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// !LANGUAGE: -SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo1(f: suspend () -> String) {}
|
||||
fun foo2(f: suspend (Int) -> String) {}
|
||||
fun foo3(f: suspend () -> Unit) {}
|
||||
|
||||
fun test(
|
||||
f0: suspend () -> String,
|
||||
f1: () -> String,
|
||||
f2: (Int) -> String,
|
||||
f3: () -> Unit,
|
||||
) {
|
||||
foo1 { "str" }
|
||||
foo1(f0)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f1)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo2<!>(f2)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo3<!>(f3)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f2)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(f3)
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// !LANGUAGE: -SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun foo1(f: suspend () -> String) {}
|
||||
fun foo2(f: suspend (Int) -> String) {}
|
||||
fun foo3(f: suspend () -> Unit) {}
|
||||
|
||||
fun test(
|
||||
f0: suspend () -> String,
|
||||
f1: () -> String,
|
||||
f2: (Int) -> String,
|
||||
f3: () -> Unit,
|
||||
) {
|
||||
foo1 { "str" }
|
||||
foo1(f0)
|
||||
|
||||
foo1(<!TYPE_MISMATCH!>f1<!>)
|
||||
foo2(<!TYPE_MISMATCH!>f2<!>)
|
||||
foo3(<!TYPE_MISMATCH!>f3<!>)
|
||||
|
||||
foo1(<!TYPE_MISMATCH!>f2<!>)
|
||||
foo1(<!TYPE_MISMATCH!>f3<!>)
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public fun foo1(/*0*/ f: suspend () -> kotlin.String): kotlin.Unit
|
||||
public fun foo2(/*0*/ f: suspend (kotlin.Int) -> kotlin.String): kotlin.Unit
|
||||
public fun foo3(/*0*/ f: suspend () -> kotlin.Unit): kotlin.Unit
|
||||
public fun test(/*0*/ f0: suspend () -> kotlin.String, /*1*/ f1: () -> kotlin.String, /*2*/ f2: (kotlin.Int) -> kotlin.String, /*3*/ f3: () -> kotlin.Unit): kotlin.Unit
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// !LANGUAGE: -SuspendConversion
|
||||
// !WITH_NEW_INFERENCE
|
||||
// !CHECK_TYPE
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_VARIABLE
|
||||
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// !LANGUAGE: -SuspendConversion
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun useSuspendFn(sfn: suspend () -> Unit) = sfn
|
||||
|
||||
Reference in New Issue
Block a user