| interface T { | |
| open fun baz(): String = "T.baz" | |
| } | |
| open class A { | |
| open val foo: String = "OK" | |
| open fun bar(): String = "OK" | |
| open fun boo(): String = "OK" | |
| } | |
| open class B : A(), T { | |
| override fun bar(): String = "B" | |
| override fun baz(): String = "B.baz" | |
| inner class E { | |
| val foo: String = super<A>@B.foo | |
| fun bar() = super<A>@B.bar() + super@B.bar() + super@B.baz() | |
| } | |
| } | |
| class C : B() { | |
| override fun bar(): String = "C" | |
| override fun boo(): String = "C" | |
| inner class D { | |
| val foo: String = super<B>@C.foo | |
| fun bar() = super<B>@C.bar() + super<B>@C.boo() | |
| } | |
| } | |
| fun box(): String { | |
| var r = "" | |
| r = B().E().foo | |
| if (r != "OK") return "fail 1; r = $r" | |
| r = "" | |
| r = B().E().bar() | |
| if (r != "OKOKT.baz") return "fail 2; r = $r" | |
| r = "" | |
| r = C().D().foo | |
| if (r != "OK") return "fail 3; r = $r" | |
| r = "" | |
| r = C().D().bar() | |
| if (r != "BOK") return "fail 4; r = $r" | |
| return "OK" | |
| } |