[FIR] Implement TYPE_VARIANCE_CONFLICT, TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE diagnostics, fix tests
This commit is contained in:
committed by
TeamCityServer
parent
ef53f0e0b3
commit
cf531dbbe6
-14
@@ -1,14 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
class Outer<out E, in F> {
|
||||
inner class Inner {
|
||||
fun unsafe1(x: E) {}
|
||||
fun unsafe2(x: Collection<E?>) {}
|
||||
fun unsafe3(): F? = null
|
||||
fun unsafe4(): Collection<F>? = null
|
||||
}
|
||||
|
||||
// Should be errors
|
||||
// Refinement of variance checker is needed
|
||||
fun foo(x: Inner) {}
|
||||
fun bar(): Inner? = null
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
class Outer<out E, in F> {
|
||||
inner class Inner {
|
||||
|
||||
+3
-3
@@ -10,9 +10,9 @@ interface Super<out U> {
|
||||
}
|
||||
// Related variance errors
|
||||
class Owner<in T> {
|
||||
inner class Inner<U : T>(val u: U) {
|
||||
inner class Inner<U : <!TYPE_VARIANCE_CONFLICT!>T<!>>(val u: U) {
|
||||
fun getT() = u
|
||||
}
|
||||
|
||||
fun foo(arg: Inner<*>) = arg.getT()
|
||||
}
|
||||
<!TYPE_VARIANCE_CONFLICT!>fun foo(arg: Inner<*>)<!> = arg.getT()
|
||||
}
|
||||
|
||||
@@ -10,8 +10,8 @@ typealias AOut<T> = Out<T>
|
||||
typealias AInvOut<T1, T2> = InvOut<T1, T2>
|
||||
typealias AInvOutTT<T> = AInvOut<T, T>
|
||||
|
||||
class Test1<out S> : A1<S>
|
||||
class Test2<out S> : A2<Any, S>
|
||||
class Test1<out S> : A1<<!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>S<!>>
|
||||
class Test2<out S> : A2<<!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>Any<!>, S>
|
||||
class Test3<out S> : AOut<S>
|
||||
class Test4<out S> : AInvOut<S, S>
|
||||
class Test5<out S> : AInvOutTT<S>
|
||||
class Test4<out S> : AInvOut<<!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>S<!>, S>
|
||||
class Test5<out S> : AInvOutTT<<!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>S<!>>
|
||||
|
||||
@@ -7,5 +7,5 @@ typealias A4<E> = Out<Inv<E>>
|
||||
|
||||
interface Q1<out S> : Out<A1<S>>
|
||||
interface Q2<out S> : Out<A2<S>>
|
||||
interface Q3<out S> : Out<A3<S>>
|
||||
interface Q4<out S> : Out<A4<S>>
|
||||
interface Q3<out S> : Out<A3<<!TYPE_VARIANCE_CONFLICT!>S<!>>>
|
||||
interface Q4<out S> : Out<A4<<!TYPE_VARIANCE_CONFLICT!>S<!>>>
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
interface Inv<T>
|
||||
|
||||
interface TypeBounds1<in I, out O, P, X : I>
|
||||
interface TypeBounds2<in I, out O, P, X : O>
|
||||
interface TypeBounds3<in I, out O, P, X : P>
|
||||
interface TypeBounds4<in I, out O, P, X : In<I>>
|
||||
interface TypeBounds5<in I, out O, P, X : In<O>>
|
||||
|
||||
interface WhereTypeBounds1<in I, out O, P, X> where X : I
|
||||
interface WhereTypeBounds2<in I, out O, P, X> where X : O
|
||||
interface WhereTypeBounds3<in I, out O, P, X> where X : P
|
||||
interface WhereTypeBounds4<in I, out O, P, X> where X : In<I>
|
||||
interface WhereTypeBounds5<in I, out O, P, X> where X : In<O>
|
||||
|
||||
class SubClass1<in I, out O, P> : Out<I>
|
||||
class SubClass2<in I, out O, P> : Out<O>
|
||||
class SubClass3<in I, out O, P> : Out<P>
|
||||
class SubClass4<in I, out O, P> : In<I>
|
||||
class SubClass5<in I, out O, P> : In<O>
|
||||
class SubClass6<in I, out O, P> : Inv<O>
|
||||
class SubClass7<in I, out O, P> : Inv<I>
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
interface Inv<T>
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
interface Inv<T>
|
||||
fun <T> getT(): T = null!!
|
||||
|
||||
interface Test<in I, out O, P> {
|
||||
fun parameters1(i: I, o: O, p: P)
|
||||
fun parameters2(i: In<I>)
|
||||
fun parameters3(i: In<O>)
|
||||
|
||||
fun explicitReturnType1() : I
|
||||
fun explicitReturnType2() : O
|
||||
fun explicitReturnType3() : P
|
||||
fun explicitReturnType4() : In<I>
|
||||
fun explicitReturnType5() : In<O>
|
||||
|
||||
fun imlicitReturnType1() = getT<I>()
|
||||
fun imlicitReturnType2() = getT<O>()
|
||||
fun imlicitReturnType3() = getT<P>()
|
||||
fun imlicitReturnType4() = getT<In<I>>()
|
||||
fun imlicitReturnType5() = getT<In<O>>()
|
||||
|
||||
fun I.receiver1()
|
||||
fun O.receiver2()
|
||||
fun P.receiver3()
|
||||
fun In<I>.receiver4()
|
||||
fun In<O>.receiver5()
|
||||
|
||||
fun <X : I> typeParameter1()
|
||||
fun <X : O> typeParameter2()
|
||||
fun <X : P> typeParameter3()
|
||||
fun <X : In<I>> typeParameter4()
|
||||
fun <X : In<O>> typeParameter5()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
interface Inv<T>
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
interface In<in T>
|
||||
fun <T> getT(): T = null!!
|
||||
|
||||
interface Test<in I, out O, P> {
|
||||
fun ok1(i: (O) -> I) : (I) -> O
|
||||
fun ok2(i: (P) -> P) : (P) -> P
|
||||
fun ok3(i: (In<I>) -> In<O>) = getT<(In<O>) -> In<I>>()
|
||||
|
||||
fun neOk1(i: (I) -> O): (O) -> I
|
||||
fun neOk2(i: (In<O>) -> In<I>)
|
||||
fun neOk3() = getT<(In<I>) -> In<O>>()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface In<in T>
|
||||
fun <T> getT(): T = null!!
|
||||
|
||||
|
||||
+12
-12
@@ -27,22 +27,22 @@ interface Test<in I, out O, P> {
|
||||
fun Ok22(i: Inv<out I>)
|
||||
fun Ok23(i: Inv<out P>)
|
||||
|
||||
fun neOk1(i: O)
|
||||
fun neOk2(i: In<I>)
|
||||
fun neOk3(i: In<In<O>>)
|
||||
fun neOk4(i: Inv<I>)
|
||||
fun neOk5(i: Inv<O>)
|
||||
fun neOk6(i: In<In<O>>)
|
||||
fun neOk7(i: Pair<In<I>, O>)
|
||||
fun neOk8(i: Inv<out O>)
|
||||
fun neOk1(i: <!TYPE_VARIANCE_CONFLICT("O; out; in; O")!>O<!>)
|
||||
fun neOk2(i: In<<!TYPE_VARIANCE_CONFLICT("I; in; out; In<I>")!>I<!>>)
|
||||
fun neOk3(i: In<In<<!TYPE_VARIANCE_CONFLICT("O; out; in; In<In<O>>")!>O<!>>>)
|
||||
fun neOk4(i: Inv<<!TYPE_VARIANCE_CONFLICT("I; in; invariant; Inv<I>")!>I<!>>)
|
||||
fun neOk5(i: Inv<<!TYPE_VARIANCE_CONFLICT("O; out; invariant; Inv<O>")!>O<!>>)
|
||||
fun neOk6(i: In<In<<!TYPE_VARIANCE_CONFLICT("O; out; in; In<In<O>>")!>O<!>>>)
|
||||
fun neOk7(i: Pair<In<<!TYPE_VARIANCE_CONFLICT("I; in; out; Pair<In<I>, O>")!>I<!>>, <!TYPE_VARIANCE_CONFLICT("O; out; in; Pair<In<I>, O>")!>O<!>>)
|
||||
fun neOk8(i: Inv<out <!TYPE_VARIANCE_CONFLICT("O; out; in; Inv<out O>")!>O<!>>)
|
||||
fun neOk9(i: <!CONFLICTING_PROJECTION!>In<out P><!>)
|
||||
fun neOk10(i: Out<O>)
|
||||
fun neOk10(i: Out<<!TYPE_VARIANCE_CONFLICT("O; out; in; Out<O>")!>O<!>>)
|
||||
|
||||
fun neOk11(i: Inv<in I>)
|
||||
fun neOk12(i: Inv<out O>)
|
||||
fun neOk11(i: Inv<in <!TYPE_VARIANCE_CONFLICT("I; in; out; Inv<in I>")!>I<!>>)
|
||||
fun neOk12(i: Inv<out <!TYPE_VARIANCE_CONFLICT("O; out; in; Inv<out O>")!>O<!>>)
|
||||
|
||||
fun neOk30(i: <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Pair<O, ><!>)
|
||||
fun neOk31(i: Pair<O, <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>>)
|
||||
fun neOk31(i: Pair<<!TYPE_VARIANCE_CONFLICT("O; out; in; Pair<O, ERROR CLASS: Wrong number of type arguments>")!>O<!>, <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>>)
|
||||
fun neOk32(i: <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>)
|
||||
fun neOk33(i: Inv<<!SYNTAX!><!>>)
|
||||
fun neOk34(i: Inv<<!UNRESOLVED_REFERENCE!>C<!>>)
|
||||
|
||||
@@ -14,32 +14,32 @@ interface Test<in I, out O, P> {
|
||||
var ok6: Inv<in P>
|
||||
var ok7: Inv<out P>
|
||||
|
||||
var neOk1: O
|
||||
var neOk2: In<I>
|
||||
var neOk3: In<In<O>>
|
||||
var neOk4: Inv<I>
|
||||
var neOk5: Inv<O>
|
||||
var neOk6: In<In<O>>
|
||||
var neOk7: Pair<In<I>, O>
|
||||
var neOk8: Inv<in O>
|
||||
var neOk9: Inv<in I>
|
||||
var neOk1: <!TYPE_VARIANCE_CONFLICT("O; out; invariant; O")!>O<!>
|
||||
var neOk2: In<<!TYPE_VARIANCE_CONFLICT("I; in; invariant; In<I>")!>I<!>>
|
||||
var neOk3: In<In<<!TYPE_VARIANCE_CONFLICT("O; out; invariant; In<In<O>>")!>O<!>>>
|
||||
var neOk4: Inv<<!TYPE_VARIANCE_CONFLICT("I; in; invariant; Inv<I>")!>I<!>>
|
||||
var neOk5: Inv<<!TYPE_VARIANCE_CONFLICT("O; out; invariant; Inv<O>")!>O<!>>
|
||||
var neOk6: In<In<<!TYPE_VARIANCE_CONFLICT("O; out; invariant; In<In<O>>")!>O<!>>>
|
||||
var neOk7: Pair<In<<!TYPE_VARIANCE_CONFLICT("I; in; invariant; Pair<In<I>, O>")!>I<!>>, <!TYPE_VARIANCE_CONFLICT("O; out; invariant; Pair<In<I>, O>")!>O<!>>
|
||||
var neOk8: Inv<in <!TYPE_VARIANCE_CONFLICT("O; out; invariant; Inv<in O>")!>O<!>>
|
||||
var neOk9: Inv<in <!TYPE_VARIANCE_CONFLICT("I; in; invariant; Inv<in I>")!>I<!>>
|
||||
var neOk10: <!CONFLICTING_PROJECTION!>In<out I><!>
|
||||
|
||||
var neOk11: I
|
||||
var neOk12: In<O>
|
||||
var neOk13: In<In<I>>
|
||||
var neOk14: Out<I>
|
||||
var neOk15: Out<Out<I>>
|
||||
var neOk16: Out<In<O>>
|
||||
var neOk17: Pair<In<O>, I>
|
||||
var neOk11: <!TYPE_VARIANCE_CONFLICT("I; in; invariant; I")!>I<!>
|
||||
var neOk12: In<<!TYPE_VARIANCE_CONFLICT("O; out; invariant; In<O>")!>O<!>>
|
||||
var neOk13: In<In<<!TYPE_VARIANCE_CONFLICT("I; in; invariant; In<In<I>>")!>I<!>>>
|
||||
var neOk14: Out<<!TYPE_VARIANCE_CONFLICT("I; in; invariant; Out<I>")!>I<!>>
|
||||
var neOk15: Out<Out<<!TYPE_VARIANCE_CONFLICT("I; in; invariant; Out<Out<I>>")!>I<!>>>
|
||||
var neOk16: Out<In<<!TYPE_VARIANCE_CONFLICT("O; out; invariant; Out<In<O>>")!>O<!>>>
|
||||
var neOk17: Pair<In<<!TYPE_VARIANCE_CONFLICT("O; out; invariant; Pair<In<O>, I>")!>O<!>>, <!TYPE_VARIANCE_CONFLICT("I; in; invariant; Pair<In<O>, I>")!>I<!>>
|
||||
|
||||
var neOk20: Inv<in O>
|
||||
var neOk21: Inv<in I>
|
||||
var neOk22: Inv<out O>
|
||||
var neOk23: Inv<out I>
|
||||
var neOk20: Inv<in <!TYPE_VARIANCE_CONFLICT("O; out; invariant; Inv<in O>")!>O<!>>
|
||||
var neOk21: Inv<in <!TYPE_VARIANCE_CONFLICT("I; in; invariant; Inv<in I>")!>I<!>>
|
||||
var neOk22: Inv<out <!TYPE_VARIANCE_CONFLICT("O; out; invariant; Inv<out O>")!>O<!>>
|
||||
var neOk23: Inv<out <!TYPE_VARIANCE_CONFLICT("I; in; invariant; Inv<out I>")!>I<!>>
|
||||
|
||||
var neOk30: <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Pair<I, ><!>
|
||||
var neOk31: Pair<I, <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>>
|
||||
var neOk31: Pair<<!TYPE_VARIANCE_CONFLICT("I; in; invariant; Pair<I, ERROR CLASS: Wrong number of type arguments>")!>I<!>, <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>>
|
||||
var neOk32: <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>
|
||||
var neOk33: Inv<<!SYNTAX!><!>>
|
||||
var neOk34: Inv<<!UNRESOLVED_REFERENCE!>C<!>>
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
interface In<in I>
|
||||
interface Out<out O>
|
||||
interface Inv<P>
|
||||
fun <T> getT(): T = null!!
|
||||
|
||||
|
||||
interface Test<in I : Any, out O : Any, P : Any> {
|
||||
fun ok1(i: I?) : O?
|
||||
fun ok2(i: In<O?>?) : Out<O?>?
|
||||
fun ok3(i: Inv<in O?>) = getT<Inv<in I?>>()
|
||||
|
||||
fun neOk1(i: O?) : I?
|
||||
fun neOk(i: Out<O?>?) : In<O?>?
|
||||
fun neOk3(i: Inv<in I?>)
|
||||
fun neOk4() = getT<Inv<in O?>?>()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface In<in I>
|
||||
interface Out<out O>
|
||||
interface Inv<P>
|
||||
|
||||
+12
-12
@@ -15,26 +15,26 @@ interface Test<in I, out O, P> {
|
||||
fun ok7(): Out<P>
|
||||
fun ok8(): Out<In<P>>
|
||||
fun ok9(): Pair<In<I>, O>
|
||||
|
||||
|
||||
fun ok10(): Inv<in I>
|
||||
fun ok11(): Inv<out O>
|
||||
fun ok12(): Inv<in P>
|
||||
fun ok13(): Inv<out P>
|
||||
|
||||
fun neOk1(): I
|
||||
fun neOk2(): In<O>
|
||||
fun neOk3(): In<In<I>>
|
||||
fun neOk4(): Inv<I>
|
||||
fun neOk5(): Inv<O>
|
||||
fun neOk6(): Pair<In<O>, I>
|
||||
fun neOk7(): Inv<in O>
|
||||
fun neOk1(): <!TYPE_VARIANCE_CONFLICT!>I<!>
|
||||
fun neOk2(): In<<!TYPE_VARIANCE_CONFLICT!>O<!>>
|
||||
fun neOk3(): In<In<<!TYPE_VARIANCE_CONFLICT!>I<!>>>
|
||||
fun neOk4(): Inv<<!TYPE_VARIANCE_CONFLICT!>I<!>>
|
||||
fun neOk5(): Inv<<!TYPE_VARIANCE_CONFLICT!>O<!>>
|
||||
fun neOk6(): Pair<In<<!TYPE_VARIANCE_CONFLICT!>O<!>>, <!TYPE_VARIANCE_CONFLICT!>I<!>>
|
||||
fun neOk7(): Inv<in <!TYPE_VARIANCE_CONFLICT!>O<!>>
|
||||
fun neOk8(): <!CONFLICTING_PROJECTION!>Out<in I><!>
|
||||
|
||||
fun neOk10(): Inv<in O>
|
||||
fun neOk11(): Inv<out I>
|
||||
|
||||
fun neOk10(): Inv<in <!TYPE_VARIANCE_CONFLICT!>O<!>>
|
||||
fun neOk11(): Inv<out <!TYPE_VARIANCE_CONFLICT!>I<!>>
|
||||
|
||||
fun neOk30(): <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Pair<I, ><!>
|
||||
fun neOk31(): Pair<I, <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>>
|
||||
fun neOk31(): Pair<<!TYPE_VARIANCE_CONFLICT!>I<!>, <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>>
|
||||
fun neOk32(): <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Inv<!>
|
||||
fun neOk33(): Inv<<!SYNTAX!><!>>
|
||||
fun neOk34(): Inv<<!UNRESOLVED_REFERENCE!>C<!>>
|
||||
|
||||
@@ -15,7 +15,7 @@ interface Test<in I, out O, P> {
|
||||
fun ok7(): Out<P>
|
||||
fun ok8(): Out<In<P>>
|
||||
fun ok9(): Pair<In<I>, O>
|
||||
|
||||
|
||||
fun ok10(): Inv<in I>
|
||||
fun ok11(): Inv<out O>
|
||||
fun ok12(): Inv<in P>
|
||||
@@ -29,7 +29,7 @@ interface Test<in I, out O, P> {
|
||||
fun neOk6(): Pair<In<<!TYPE_VARIANCE_CONFLICT("O; out; in; Pair<In<O>, I>")!>O<!>>, <!TYPE_VARIANCE_CONFLICT("I; in; out; Pair<In<O>, I>")!>I<!>>
|
||||
fun neOk7(): Inv<in <!TYPE_VARIANCE_CONFLICT("O; out; in; Inv<in O>")!>O<!>>
|
||||
fun neOk8(): Out<<!CONFLICTING_PROJECTION("Out")!>in<!> I>
|
||||
|
||||
|
||||
fun neOk10(): Inv<in <!TYPE_VARIANCE_CONFLICT("O; out; in; Inv<in O>")!>O<!>>
|
||||
fun neOk11(): Inv<out <!TYPE_VARIANCE_CONFLICT("I; in; out; Inv<out I>")!>I<!>>
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
interface Inv<T>
|
||||
|
||||
fun <T> getT(): T = null!!
|
||||
|
||||
class Test<in I, out O, P>(
|
||||
val type1: I,
|
||||
val type2: O,
|
||||
val type3: P,
|
||||
val type4: In<I>,
|
||||
val type5: In<O>,
|
||||
|
||||
var type6: I,
|
||||
var type7: O,
|
||||
var type8: P,
|
||||
var type9: In<I>,
|
||||
var type0: In<O>,
|
||||
|
||||
type11: I,
|
||||
type12: O,
|
||||
type13: P,
|
||||
type14: In<I>,
|
||||
type15: In<O>
|
||||
)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
interface Inv<T>
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
interface Inv<T>
|
||||
|
||||
class Delegate<T> {
|
||||
operator fun getValue(t: Any, p: KProperty<*>): T = null!!
|
||||
operator fun setValue(t: Any, p: KProperty<*>, value: T) {}
|
||||
}
|
||||
|
||||
fun <T> getT(): T = null!!
|
||||
|
||||
abstract class Test<in I, out O, P> {
|
||||
abstract val type1: I
|
||||
abstract val type2: O
|
||||
abstract val type3: P
|
||||
abstract val type4: In<I>
|
||||
abstract val type5: In<O>
|
||||
|
||||
val implicitType1 = getT<I>()
|
||||
val implicitType2 = getT<O>()
|
||||
val implicitType3 = getT<P>()
|
||||
val implicitType4 = getT<In<I>>()
|
||||
val implicitType5 = getT<In<O>>()
|
||||
|
||||
val delegateType1 by Delegate<I>()
|
||||
val delegateType2 by Delegate<O>()
|
||||
val delegateType3 by Delegate<P>()
|
||||
val delegateType4 by Delegate<In<I>>()
|
||||
val delegateType5 by Delegate<In<O>>()
|
||||
|
||||
abstract val I.receiver1: Int
|
||||
abstract val O.receiver2: Int
|
||||
abstract val P.receiver3: Int
|
||||
abstract val In<I>.receiver4: Int
|
||||
abstract val In<O>.receiver5: Int
|
||||
|
||||
val <X : I> X.typeParameter1: Int get() = 0
|
||||
val <X : O> X.typeParameter2: Int get() = 0
|
||||
val <X : P> X.typeParameter3: Int get() = 0
|
||||
val <X : In<I>> X.typeParameter4: Int get() = 0
|
||||
val <X : In<O>> X.typeParameter5: Int get() = 0
|
||||
|
||||
val <X> X.typeParameter6: Int where X : I get() = 0
|
||||
val <X> X.typeParameter7: Int where X : O get() = 0
|
||||
val <X> X.typeParameter8: Int where X : P get() = 0
|
||||
val <X> X.typeParameter9: Int where X : In<I> get() = 0
|
||||
val <X> X.typeParameter0: Int where X : In<O> get() = 0
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
interface In<in T>
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
interface Inv<T>
|
||||
|
||||
class Delegate<T> {
|
||||
operator fun getValue(t: Any, p: KProperty<*>): T = null!!
|
||||
operator fun setValue(t: Any, p: KProperty<*>, varue: T) {}
|
||||
}
|
||||
|
||||
fun <T> getT(): T = null!!
|
||||
|
||||
abstract class Test<in I, out O, P> {
|
||||
abstract var type1: I
|
||||
abstract var type2: O
|
||||
abstract var type3: P
|
||||
abstract var type4: In<I>
|
||||
abstract var type5: In<O>
|
||||
|
||||
var implicitType1 = getT<I>()
|
||||
var implicitType2 = getT<O>()
|
||||
var implicitType3 = getT<P>()
|
||||
var implicitType4 = getT<In<I>>()
|
||||
var implicitType5 = getT<In<O>>()
|
||||
|
||||
var delegateType1 by Delegate<I>()
|
||||
var delegateType2 by Delegate<O>()
|
||||
var delegateType3 by Delegate<P>()
|
||||
var delegateType4 by Delegate<In<I>>()
|
||||
var delegateType5 by Delegate<In<O>>()
|
||||
|
||||
abstract var I.receiver1: Int
|
||||
abstract var O.receiver2: Int
|
||||
abstract var P.receiver3: Int
|
||||
abstract var In<I>.receiver4: Int
|
||||
abstract var In<O>.receiver5: Int
|
||||
|
||||
var <X : I> X.typeParameter1: Int get() = 0; set(i) {}
|
||||
var <X : O> X.typeParameter2: Int get() = 0; set(i) {}
|
||||
var <X : P> X.typeParameter3: Int get() = 0; set(i) {}
|
||||
var <X : In<I>> X.typeParameter4: Int get() = 0; set(i) {}
|
||||
var <X : In<O>> X.typeParameter5: Int get() = 0; set(i) {}
|
||||
|
||||
var <X> X.typeParameter6: Int where X : I get() = 0; set(i) {}
|
||||
var <X> X.typeParameter7: Int where X : O get() = 0; set(i) {}
|
||||
var <X> X.typeParameter8: Int where X : P get() = 0; set(i) {}
|
||||
var <X> X.typeParameter9: Int where X : In<I> get() = 0; set(i) {}
|
||||
var <X> X.typeParameter0: Int where X : In<O> get() = 0; set(i) {}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
interface In<in T>
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
interface Test<in I, out O> {
|
||||
val internal_val: I
|
||||
public val public_val: I
|
||||
protected val protected_val: I
|
||||
val internal_val: <!TYPE_VARIANCE_CONFLICT!>I<!>
|
||||
public val public_val: <!TYPE_VARIANCE_CONFLICT!>I<!>
|
||||
protected val protected_val: <!TYPE_VARIANCE_CONFLICT!>I<!>
|
||||
<!PRIVATE_PROPERTY_IN_INTERFACE!>private<!> val private_val: I
|
||||
|
||||
var interlan_private_set: O
|
||||
var interlan_private_set: <!TYPE_VARIANCE_CONFLICT!>O<!>
|
||||
<!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
||||
public var public_private_set: O
|
||||
public var public_private_set: <!TYPE_VARIANCE_CONFLICT!>O<!>
|
||||
<!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
||||
protected var protected_private_set: O
|
||||
protected var protected_private_set: <!TYPE_VARIANCE_CONFLICT!>O<!>
|
||||
<!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
||||
<!PRIVATE_PROPERTY_IN_INTERFACE!>private<!> var private_private_set: O
|
||||
private set
|
||||
|
||||
fun internal_fun(i: O) : I
|
||||
public fun public_fun(i: O) : I
|
||||
protected fun protected_fun(i: O) : I
|
||||
fun internal_fun(i: <!TYPE_VARIANCE_CONFLICT!>O<!>) : <!TYPE_VARIANCE_CONFLICT!>I<!>
|
||||
public fun public_fun(i: <!TYPE_VARIANCE_CONFLICT!>O<!>) : <!TYPE_VARIANCE_CONFLICT!>I<!>
|
||||
protected fun protected_fun(i: <!TYPE_VARIANCE_CONFLICT!>O<!>) : <!TYPE_VARIANCE_CONFLICT!>I<!>
|
||||
<!PRIVATE_FUNCTION_WITH_NO_BODY!>private<!> fun private_fun(i: O) : I
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user