[NI] Don't apply SAM-conversion for type that is subtype of function

Plus, don't get synthetic candidates as all candidates are creating
 by conversion

 #KT-31503 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2019-05-24 17:23:02 +03:00
parent ceaa64dfb1
commit fe5976d7f4
9 changed files with 76 additions and 13 deletions
@@ -0,0 +1,28 @@
// FILE: MyFuture.java
public interface MyFuture<V> {
MyFuture<V> addListener(MyListener<? extends MyFuture<? super V>> listener);
}
// FILE: MyListener.java
public interface MyListener<F extends MyFuture<?>> {
void operationComplete(F future) throws Exception;
}
// FILE: test.kt
typealias Handler = (cause: Throwable?) -> Unit
fun <T> MyFuture<T>.setup() {
addListener(ListenerImpl<T, MyFuture<T>>())
addListener { }
}
class ListenerImpl<T, F : MyFuture<T>> : MyListener<F>, Handler {
override fun operationComplete(future: F) {
}
override fun invoke(cause: Throwable?) {
}
}
@@ -0,0 +1,27 @@
package
public fun </*0*/ T> MyFuture<T>.setup(): kotlin.Unit
public final class ListenerImpl</*0*/ T, /*1*/ F : MyFuture<T>> : MyListener<F>, Handler /* = (cause: kotlin.Throwable?) -> kotlin.Unit */ {
public constructor ListenerImpl</*0*/ T, /*1*/ F : MyFuture<T>>()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ fun invoke(/*0*/ cause: kotlin.Throwable?): kotlin.Unit
public open override /*1*/ fun operationComplete(/*0*/ future: F): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface MyFuture</*0*/ V : kotlin.Any!> {
public abstract fun addListener(/*0*/ listener: MyListener<out MyFuture<in V!>!>!): MyFuture<V!>!
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 interface MyListener</*0*/ F : MyFuture<*>!> {
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 abstract fun operationComplete(/*0*/ future: F!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public typealias Handler = (cause: kotlin.Throwable?) -> kotlin.Unit