| class Out<out T> |
| class In<in Z> |
| |
| interface A<T, E> { |
| fun foo1(x: Out<T>): Out<T> |
| fun foo2(x: In<E>): In<E> |
| |
| var prop: Out<T> |
| } |
| |
| // method: A::foo1 |
| // generic signature: (LOut<+TT;>;)LOut<TT;>; |
| |
| // method: A::foo2 |
| // generic signature: (LIn<-TE;>;)LIn<TE;>; |
| |
| // method: A::getProp |
| // generic signature: ()LOut<TT;>; |
| |
| // method: A::setProp |
| // generic signature: (LOut<+TT;>;)V |
| |
| abstract class B : A<String, Any?> { |
| override final fun foo1(x: Out<String>): Out<String> = null!! |
| override final fun foo2(x: In<Any?>): In<Any?> = null!! |
| |
| override final var prop: Out<String> = null!! |
| } |
| |
| // method: B::foo1 |
| // generic signature: (LOut<Ljava/lang/String;>;)LOut<Ljava/lang/String;>; |
| |
| // method: B::foo2 |
| // generic signature: (LIn<Ljava/lang/Object;>;)LIn<Ljava/lang/Object;>; |
| |
| // method: B::getProp |
| // generic signature: ()LOut<Ljava/lang/String;>; |
| |
| // method: B::setProp |
| // generic signature: (LOut<Ljava/lang/String;>;)V |