[NI] Fix passing callable references to suspend functions as functional parameter
#KT-32452
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// Issue: KT-32256
|
||||
|
||||
fun main() {
|
||||
myMethod(::refA)
|
||||
myMethod(::refB)
|
||||
anotherMethod(::refA)
|
||||
anotherMethod(::refB)
|
||||
}
|
||||
|
||||
suspend fun refA(input: String): String {
|
||||
return input
|
||||
}
|
||||
|
||||
suspend fun refB(): String {
|
||||
return "Hello, World!"
|
||||
}
|
||||
|
||||
fun myMethod(f: suspend (String) -> String) {}
|
||||
|
||||
fun myMethod(f: suspend () -> String) {}
|
||||
|
||||
fun <I, O> anotherMethod(f: suspend (I) -> O) {}
|
||||
|
||||
fun <O> anotherMethod(f: suspend () -> O) {}
|
||||
@@ -0,0 +1,9 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ O> anotherMethod(/*0*/ f: suspend () -> O): kotlin.Unit
|
||||
public fun </*0*/ I, /*1*/ O> anotherMethod(/*0*/ f: suspend (I) -> O): kotlin.Unit
|
||||
public fun main(): kotlin.Unit
|
||||
public fun myMethod(/*0*/ f: suspend () -> kotlin.String): kotlin.Unit
|
||||
public fun myMethod(/*0*/ f: suspend (kotlin.String) -> kotlin.String): kotlin.Unit
|
||||
public suspend fun refA(/*0*/ input: kotlin.String): kotlin.String
|
||||
public suspend fun refB(): kotlin.String
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// ISSUE: KT-32452
|
||||
|
||||
interface A {
|
||||
suspend fun foo(input: String): String
|
||||
}
|
||||
|
||||
open class B<T : Any> {
|
||||
fun <U, R : Any, T> call(function: suspend T.(U) -> R): R = TODO()
|
||||
|
||||
fun <U, R : Any, T> call(function: suspend T.(U) -> List<R>): List<R> = TODO()
|
||||
}
|
||||
|
||||
class MyService : A, B<A>() {
|
||||
override suspend fun foo(input: String) = call(A::foo)
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package
|
||||
|
||||
public interface A {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract suspend fun foo(/*0*/ input: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class B</*0*/ T : kotlin.Any> {
|
||||
public constructor B</*0*/ T : kotlin.Any>()
|
||||
public final fun </*0*/ U, /*1*/ R : kotlin.Any, /*2*/ T> call(/*0*/ function: suspend T.(U) -> R): R
|
||||
public final fun </*0*/ U, /*1*/ R : kotlin.Any, /*2*/ T> call(/*0*/ function: suspend T.(U) -> kotlin.collections.List<R>): kotlin.collections.List<R>
|
||||
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
|
||||
}
|
||||
|
||||
public final class MyService : A, B<A> {
|
||||
public constructor MyService()
|
||||
public final override /*1*/ /*fake_override*/ fun </*0*/ U, /*1*/ R : kotlin.Any, /*2*/ T> call(/*0*/ function: suspend T.(U) -> R): R
|
||||
public final override /*1*/ /*fake_override*/ fun </*0*/ U, /*1*/ R : kotlin.Any, /*2*/ T> call(/*0*/ function: suspend T.(U) -> kotlin.collections.List<R>): kotlin.collections.List<R>
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ suspend fun foo(/*0*/ input: kotlin.String): kotlin.String
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user