class None class In class Out fun a1(value: None) {} fun a2(value: None) {} fun a3(value: None) {} fun a4(value: In) {} fun a5(value: In<in Int>) {} fun a6(value: In<out Int>) {} fun a7(value: Out) {} fun a8(value: Out<in Int>) {} fun a9(value: Out<out Int>) {} typealias A1 = None typealias A2 = None typealias A3 = None typealias A4<in K> = None typealias A5<in K> = None typealias A6<in K> = None typealias A7<out K> = None typealias A8<out K> = None typealias A9<out K> = None typealias A10 = In typealias A11 = In<in K> typealias A12 = In<out K> typealias A13<in K> = In typealias A14<in K> = In<in K> typealias A15<in K> = In<out K> typealias A16<out K> = In typealias A17<out K> = In<in K> typealias A18<out K> = In<out K> typealias A19 = Out typealias A20 = Out<in K> typealias A21 = Out<out K> typealias A22<in K> = Out typealias A23<in K> = Out<in K> typealias A24<in K> = Out<out K> typealias A25<out K> = Out typealias A26<out K> = Out<in K> typealias A27<out K> = Out<out K> class Outer { inner class Intermediate { inner class Inner { } } } fun test1(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() fun test2(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() fun test3(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() fun test4(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() fun test5(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() fun test6(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() fun test7(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() fun test8(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() fun test9(): Outer.Intermediate.Inner = Outer().Intermediate().Inner() class InOuter { inner class OutIntermediate { inner class InInner { } } } fun test10(): InOuter.OutIntermediate.InInner = InOuter().OutIntermediate().InInner() fun test11(): InOuter<in Int>.OutIntermediate.InInner = InOuter().OutIntermediate().InInner() fun test12(): InOuter<out Int>.OutIntermediate.InInner = InOuter().OutIntermediate().InInner() fun test13(): InOuter.OutIntermediate<in String>.InInner = InOuter().OutIntermediate().InInner() fun test14(): InOuter.OutIntermediate<out String>.InInner = InOuter().OutIntermediate().InInner() fun test15(): InOuter.OutIntermediate.InInner<in Char> = InOuter().OutIntermediate().InInner() fun test16(): InOuter.OutIntermediate.InInner<out Char> = InOuter().OutIntermediate().InInner() fun test17(): InOuter<in Int>.OutIntermediate<out String>.InInner = InOuter().OutIntermediate().InInner() fun test18(): InOuter.OutIntermediate<in String>.InInner<out Char> = InOuter().OutIntermediate().InInner() class TwoParametersOuter { inner class TwoParametersIntermediate { inner class InInner { } } } fun test19(): TwoParametersOuterout String>.TwoParametersIntermediate<in String, Int>.InInner? = null