K2: Fix false-positive overload ambiguity after smart cast
Mostly, the change is just mirroring the same logic from K1 OverloadingConflictResolver ^KT-58524 Fixed
This commit is contained in:
committed by
Space Team
parent
efdecc63cb
commit
442844f165
+33
@@ -0,0 +1,33 @@
|
||||
// ISSUE: KT-58524
|
||||
|
||||
interface MyGenericInterface<T> {
|
||||
fun update(f: (T) -> T) {}
|
||||
}
|
||||
|
||||
interface SubGenericInterface<F> : MyGenericInterface<F> {
|
||||
override fun update(f: (F) -> F) {}
|
||||
}
|
||||
|
||||
interface SubInterfaceInt : SubGenericInterface<Int> {
|
||||
override fun update(f: (Int) -> Int) {}
|
||||
}
|
||||
|
||||
fun foo1(a: MyGenericInterface<Number>) {
|
||||
a <!UNCHECKED_CAST!>as MyGenericInterface<Int><!>
|
||||
|
||||
a.update { expectInt(it) }
|
||||
}
|
||||
|
||||
fun foo2(a: MyGenericInterface<Number>) {
|
||||
a <!UNCHECKED_CAST!>as SubGenericInterface<Int><!>
|
||||
|
||||
a.update { expectInt(it) }
|
||||
}
|
||||
|
||||
fun foo3(a: MyGenericInterface<Number>) {
|
||||
a as SubInterfaceInt
|
||||
|
||||
a.update { expectInt(it) }
|
||||
}
|
||||
|
||||
fun expectInt(w: Int): Int = w
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
// ISSUE: KT-58524
|
||||
|
||||
interface MyGenericInterface<T> {
|
||||
fun update(f: (T) -> T) {}
|
||||
}
|
||||
|
||||
interface SubGenericInterface<F> : MyGenericInterface<F> {
|
||||
override fun update(f: (F) -> F) {}
|
||||
}
|
||||
|
||||
interface SubInterfaceInt : SubGenericInterface<Int> {
|
||||
override fun update(f: (Int) -> Int) {}
|
||||
}
|
||||
|
||||
fun foo1(a: MyGenericInterface<Number>) {
|
||||
a <!UNCHECKED_CAST!>as MyGenericInterface<Int><!>
|
||||
|
||||
<!DEBUG_INFO_SMARTCAST!>a<!>.update { expectInt(it) }
|
||||
}
|
||||
|
||||
fun foo2(a: MyGenericInterface<Number>) {
|
||||
a <!UNCHECKED_CAST!>as SubGenericInterface<Int><!>
|
||||
|
||||
<!DEBUG_INFO_SMARTCAST!>a<!>.update { expectInt(it) }
|
||||
}
|
||||
|
||||
fun foo3(a: MyGenericInterface<Number>) {
|
||||
a as SubInterfaceInt
|
||||
|
||||
<!DEBUG_INFO_SMARTCAST!>a<!>.update { expectInt(it) }
|
||||
}
|
||||
|
||||
fun expectInt(w: Int): Int = w
|
||||
Reference in New Issue
Block a user