// FILE: f.kt package override.normal trait MyTrait { fun foo() val pr : Unit } abstract class MyAbstractClass { abstract fun bar() abstract val prr : Unit } open class MyClass() : MyTrait, MyAbstractClass() { override fun foo() {} override fun bar() {} override val pr : Unit = #() override val prr : Unit = #() } class MyChildClass() : MyClass() {} class MyIllegalClass : MyTrait, MyAbstractClass() {} class MyIllegalClass2() : MyTrait, MyAbstractClass() { override fun foo() {} override val pr : Unit = #() override val prr : Unit = #() } class MyIllegalClass3() : MyTrait, MyAbstractClass() { override fun bar() {} override val pr : Unit = #() override val prr : Unit = #() } class MyIllegalClass4() : MyTrait, MyAbstractClass() { fun foo() {} val pr : Unit override fun other() {} override val otherPr : Int = 1 } class MyChildClass1() : MyClass() { fun foo() {} val pr : Unit = #() override fun bar() {} override val prr : Unit = #() } // FILE: f.kt package override.generics trait MyTrait { fun foo(t: T) : T } abstract class MyAbstractClass { abstract fun bar(t: T) : T abstract val pr : T } trait MyProps { val p : T } open class MyGenericClass(t : T) : MyTrait, MyAbstractClass(), MyProps { override fun foo(t: T) = t override fun bar(t: T) = t override val p : T = t override val pr : T = t } class MyChildClass() : MyGenericClass(1) {} class MyChildClass1(t : T) : MyGenericClass(t) {} class MyChildClass2(t : T) : MyGenericClass(t) { fun foo(t: T) = t val pr : T = t override fun bar(t: T) = t override val p : T = t } open class MyClass() : MyTrait, MyAbstractClass() { override fun foo(i: Int) = i override fun bar(s: String) = s override val pr : String = "1" } abstract class MyAbstractClass1 : MyTrait, MyAbstractClass() { override fun foo(i: Int) = i override fun bar(s: String) = s } class MyIllegalGenericClass1 : MyTrait, MyAbstractClass() {} class MyIllegalGenericClass2(r : R) : MyTrait, MyAbstractClass() { override fun foo(r: R) = r override val pr : R = r } class MyIllegalClass1 : MyTrait, MyAbstractClass() {} abstract class MyLegalAbstractClass1 : MyTrait, MyAbstractClass() {} class MyIllegalClass2(t : T) : MyTrait, MyAbstractClass() { fun foo(t: T) = t fun bar(t: T) = t val pr : T = t } abstract class MyLegalAbstractClass2(t : T) : MyTrait, MyAbstractClass() { fun foo(t: T) = t fun bar(t: T) = t val pr : T = t }