[FIR] Fix bounds check for inner classes of generic outer classes

#KT-61068 Fixed
#KT-35566
This commit is contained in:
Kirill Rakhman
2023-09-06 13:21:33 +02:00
committed by Space Team
parent 5e49b472f8
commit b41e5abcfa
8 changed files with 119 additions and 5 deletions
@@ -0,0 +1,41 @@
// ISSUE: KT-61068, KT-35566
// FILE: generic.kt
package generic
interface Foo
open class SuperOuter<T> {
open inner class SuperInner<D : Foo>(database: D)
}
class SubOuter : SuperOuter<Unit>() {
inner class SubInner(database: Any?) : SuperInner<<!UPPER_BOUND_VIOLATED!>Any?<!>>(<!ARGUMENT_TYPE_MISMATCH!>database<!>)
}
// FILE: nongeneric.kt
package nongeneric
interface Foo
open class SuperOuter {
open inner class SuperInner<D : Foo>(database: D)
}
class SubOuter : SuperOuter() {
inner class SubInner(database: Any?) : SuperInner<<!UPPER_BOUND_VIOLATED!>Any?<!>>(<!ARGUMENT_TYPE_MISMATCH!>database<!>)
}
// FILE: kt35566.kt
package kt35566
open class Case1<K : Number> {
open inner class Case1_1<L> : Case1<Int>() where L : CharSequence {
var x: L? = null
inner class Case1_2<M>(m: M) : Case1<K>.Case1_1<<!UPPER_BOUND_VIOLATED!>M<!>>() where M : Map<K, L> {
init {
x = m
}
}
}
}
@@ -0,0 +1,41 @@
// ISSUE: KT-61068, KT-35566
// FILE: generic.kt
package generic
interface Foo
open class SuperOuter<T> {
open inner class SuperInner<D : Foo>(database: D)
}
class SubOuter : SuperOuter<Unit>() {
inner class SubInner(database: Any?) : SuperInner<Any?>(database)
}
// FILE: nongeneric.kt
package nongeneric
interface Foo
open class SuperOuter {
open inner class SuperInner<D : Foo>(database: D)
}
class SubOuter : SuperOuter() {
inner class SubInner(database: Any?) : SuperInner<<!UPPER_BOUND_VIOLATED!>Any?<!>>(database)
}
// FILE: kt35566.kt
package kt35566
open class Case1<K : Number> {
open inner class Case1_1<L> : Case1<Int>() where L : CharSequence {
var x: L? = null
inner class Case1_2<M>(m: M) : Case1<K>.Case1_1<M>() where M : Map<K, L> {
init {
x = m
}
}
}
}