| class In<in T>() { |
| ~In.f:T->Unit~fun f(t : T) : Unit {} |
| ~In.f:Int->Int~fun f(t : Int) : Int {} |
| ~In.f1~fun f1(t : T) : Unit {} |
| } |
| |
| class Out<out T>() { |
| ~Out.f~fun f() : T {} |
| ~Out.f(a)~fun f(a : Int) : Int {a} |
| } |
| |
| class Inv<T>() { |
| ~Inv.f~fun f(t : T) : T {t} |
| ~Inv.inf~fun inf(t : T) : Unit {} |
| ~Inv.outf~fun outf() : T {} |
| } |
| |
| fun testInOut() { |
| In<String>().`In.f:T->Unit`f("1"); |
| (return as In<in String>).`In.f:T->Unit`f("1"); |
| (return as In<out String>).`!null`f("1") |
| (return as In<*>).`!null`f("1"); |
| |
| In<String>().`In.f:Int->Int`f(1); |
| (return as In<in String>).`In.f:Int->Int`f(1); |
| (return as In<out String>).`In.f:Int->Int`f(1) |
| (return as In<out String>).`In.f1`f1(1) |
| (return as In<*>).`In.f:Int->Int`f(1); |
| |
| Out<Int>().`Out.f(a)`f(1) |
| (return as Out<out Int>).`Out.f(a)`f(1) |
| (return as Out<in Int>).`Out.f(a)`f(1) |
| (return as Out<*>).`Out.f(a)`f(1) |
| |
| Out<Int>().`Out.f`f() |
| (return as Out<out Int>).`Out.f`f() |
| (return as Out<in Int>).`Out.f`f() |
| (return as Out<*>).`Out.f`f() |
| |
| Inv<Int>().`Inv.f`f(1) |
| (return as Inv<in Int>).`Inv.f`f(1) |
| (return as Inv<out Int>).`Inv.f`f(1) |
| (return as Inv<*>).`Inv.f`f(1) |
| |
| Inv<Int>().`Inv.inf`inf(1) |
| (return as Inv<in Int>).`Inv.inf`inf(1) |
| (return as Inv<out Int>).`Inv.inf`inf(1) |
| (return as Inv<*>).`Inv.inf`inf(1) |
| |
| Inv<Int>().`Inv.outf`outf() |
| ((return as Inv<in Int>).`Inv.outf`outf())`:kotlin::Any` |
| (return as Inv<out Int>).`Inv.outf`outf() |
| (return as Inv<*>).`Inv.outf`outf() |
| |
| Inv<Int>().`Inv.outf`outf(1) |
| } |