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:
Mikhail Glukhikh
2015-04-27 11:27:57 +03:00
parent c90bcb41f3
commit 754f8af3fc
12 changed files with 418 additions and 2 deletions
@@ -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()
}