| // WITH_STDLIB |
| |
| abstract class A { |
| abstract fun foo(): List<String> |
| } |
| |
| interface B { |
| fun foo(): ArrayList<String> = ArrayList(listOf("B")) |
| } |
| |
| open class C : A(), B { |
| override fun foo(): ArrayList<String> = super<B>.foo() |
| } |
| |
| interface D { |
| fun foo(): Collection<String> |
| } |
| |
| class E : D, C() |
| |
| fun box(): String { |
| val e = E() |
| var r = e.foo()[0] |
| val d: D = e |
| val c: C = e |
| val b: B = e |
| val a: A = e |
| r += d.foo().iterator().next() |
| r += c.foo()[0] |
| r += b.foo()[0] |
| r += a.foo()[0] |
| return if (r == "BBBBB") "OK" else "Fail: $r" |
| } |