// FIR_IDENTICAL import kotlin.reflect.KProperty interface In interface Out interface Inv class Delegate { operator fun getValue(t: Any, p: KProperty<*>): T = null!! operator fun setValue(t: Any, p: KProperty<*>, value: T) {} } fun getT(): T = null!! abstract class Test { abstract val type1: I abstract val type2: O abstract val type3: P abstract val type4: In abstract val type5: In<O> val implicitType1 = getT() val implicitType2 = getT() val implicitType3 = getT

() val implicitType4 = getT>() val implicitType5 = getT>() val delegateType1 by Delegate() val delegateType2 by Delegate() val delegateType3 by Delegate

() val delegateType4 by Delegate>() val delegateType5 by Delegate>() abstract val I.receiver1: Int abstract val O.receiver2: Int abstract val P.receiver3: Int abstract val In<I>.receiver4: Int abstract val In.receiver5: Int val X.typeParameter1: Int get() = 0 val O> X.typeParameter2: Int get() = 0 val X.typeParameter3: Int get() = 0 val I>> X.typeParameter4: Int get() = 0 val > X.typeParameter5: Int get() = 0 val X.typeParameter6: Int where X : I get() = 0 val X.typeParameter7: Int where X : O get() = 0 val X.typeParameter8: Int where X : P get() = 0 val X.typeParameter9: Int where X : In<I> get() = 0 val X.typeParameter0: Int where X : In get() = 0 }