| // LANGUAGE: +CompanionBlocks +CompanionExtensions | |
| abstract class Base { | |
| companion { | |
| val baseVal = "BaseVal" | |
| fun baseFun() = "BaseFun" | |
| } | |
| abstract fun abstractFun(): String | |
| } | |
| class Concrete : Base() { | |
| companion { | |
| val concreteVal = "ConcreteVal" | |
| fun concreteFun() = "ConcreteFun" | |
| } | |
| override fun abstractFun() = Base.baseFun() + concreteFun() | |
| } | |
| fun box(): String { | |
| if (Base.baseVal != "BaseVal") return "FAIL: Base.baseVal=${Base.baseVal}" | |
| if (Base.baseFun() != "BaseFun") return "FAIL: Base.baseFun=${Base.baseFun()}" | |
| if (Concrete.concreteVal != "ConcreteVal") return "FAIL: concreteVal=${Concrete.concreteVal}" | |
| if (Concrete.concreteFun() != "ConcreteFun") return "FAIL: concreteFun=${Concrete.concreteFun()}" | |
| val c = Concrete() | |
| if (c.abstractFun() != "BaseFunConcreteFun") return "FAIL: abstractFun=${c.abstractFun()}" | |
| return "OK" | |
| } |