| interface MyTrait<T> { | |
| fun foo(t: T) : T | |
| } | |
| abstract class MyAbstractClass<T> { | |
| abstract fun bar(t: T) : T | |
| } | |
| open class MyGenericClass<T> : MyTrait<T>, MyAbstractClass<T>() { | |
| override fun foo(t: T) = t | |
| override fun bar(t: T) = t | |
| } | |
| class MyChildClass : MyGenericClass<Int>() {} | |
| class MyChildClass1<T> : MyGenericClass<T>() {} | |
| class MyChildClass2<T> : MyGenericClass<T>() { | |
| fun <error>foo</error>(t: T) = t | |
| override fun bar(t: T) = t | |
| } | |
| open class MyClass : MyTrait<Int>, MyAbstractClass<String>() { | |
| override fun foo(t: Int) = t | |
| override fun bar(t: String) = t | |
| } | |
| <error>class MyIllegalGenericClass1</error><T> : MyTrait<T>, MyAbstractClass<T>() {} | |
| <error>class MyIllegalGenericClass2</error><T, R> : MyTrait<T>, MyAbstractClass<R>() { | |
| <error>override</error> fun foo(r: R) = r | |
| } | |
| <error>class MyIllegalClass1</error> : MyTrait<Int>, MyAbstractClass<String>() {} | |
| <error>class MyIllegalClass2</error><T> : MyTrait<Int>, MyAbstractClass<Int>() { | |
| <error>fun foo(t: T)</error> = t | |
| <error>fun bar(t: T)</error> = t | |
| } |