// !LANGUAGE: -ForbidUsingExtensionPropertyTypeParameterInDelegate // SKIP_MANGLE_VERIFICATION //For KT-6020 // KT-24643: language version in K2 is >= 1.8 // MODULE: lib // FILE: lib.kt import kotlin.reflect.KProperty1 import kotlin.reflect.KMutableProperty1 import kotlin.reflect.KProperty class Value>(var value1: T, val value2: IT) interface IDelegate1 { operator fun getValue(t: T1, p: KProperty<*>): R1 } interface IDelegate2 { operator fun getValue(t: T2, p: KProperty<*>): R2 } interface IR { fun foo(): R } class CR(val r: R) : IR { override fun foo(): R = r } class P(val p1: P1, val p2: P2) val Value>.additionalText by object : IDelegate1>, P> { fun qux11(t: F11T): F11T = t private val Value>.deepO by object : IDelegate1>, T> { override fun getValue(t: Value>, p: KProperty<*>): T { return qux11(t.value1) } } private val Value>.deepK by object : IDelegate1>, T> { fun > qux22(t: F22T): T = t.foo() override fun getValue(t: Value>, p: KProperty<*>): T { return qux22(t.value2) } } override fun getValue(t: Value>, p: KProperty<*>): P { return P(t.deepO, t.deepK) } } // MODULE: main(lib) // FILE: main.kt fun box(): String { val p = Value("O", CR("K")) val rr = p.additionalText return rr.p1 + rr.p2 }