class Out class In interface A { fun foo1(x: Out): Out fun foo2(x: In): In var prop: Out } // method: A::foo1 // generic signature: (LOut<+TT;>;)LOut; // method: A::foo2 // generic signature: (LIn<-TE;>;)LIn; // method: A::getProp // generic signature: ()LOut; // method: A::setProp // generic signature: (LOut<+TT;>;)V abstract class B : A { override final fun foo1(x: Out): Out = null!! override final fun foo2(x: In): In = null!! override final var prop: Out = null!! } // method: B::foo1 // generic signature: (LOut;)LOut; // method: B::foo2 // generic signature: (LIn;)LIn; // method: B::getProp // generic signature: ()LOut; // method: B::setProp // generic signature: (LOut;)V