Type<*> is inferred now if Type<A> and Type<B> common supertype is Type<X> and X is not within parameter upper bound. #KT-7585 Fixed. #EA-68943 Fixed.
It provides also a fix for KT-7585 (empty type intersection assertion). A set of relevant tests, one fixed test
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
// FILE: A.java
|
||||
|
||||
class A {}
|
||||
|
||||
// FILE: Wrapper.java
|
||||
|
||||
abstract class Wrapper<T extends A> {
|
||||
protected T t;
|
||||
|
||||
Wrapper(T t) { this.t = t; }
|
||||
}
|
||||
|
||||
// FILE: kt7585.kt
|
||||
|
||||
class E
|
||||
|
||||
class MyWrapper(a: A): Wrapper<A>(a)
|
||||
|
||||
// This wrapper is not legal
|
||||
class TheirWrapper(e: E): Wrapper<<!UPPER_BOUND_VIOLATED, UPPER_BOUND_VIOLATED!>E<!>>(e)
|
||||
|
||||
data class Pair<out T>(val a: T, val b: T)
|
||||
|
||||
fun foo(): String {
|
||||
val matrix: Pair<Wrapper<*>>
|
||||
// It's not legal to do such a thing because E is not derived from A
|
||||
// But we should not have assertion errors because of it!
|
||||
matrix = Pair(MyWrapper(A()), TheirWrapper(E()))
|
||||
return matrix.toString()
|
||||
}
|
||||
Reference in New Issue
Block a user