import java.util.ArrayList class JsonObject { } class JsonArray { } class ProjectInfo { override fun toString(): String = "OK" } public trait Parser { public fun parse(source: IN): OUT } public trait MultiParser { public fun parse(source: IN): Collection } public trait JsonParser: Parser, MultiParser { public override fun parse(source: JsonArray): Collection { return ArrayList() } } public abstract class ProjectInfoJsonParser(): JsonParser { public override fun parse(source: JsonObject): ProjectInfo { return ProjectInfo() } } class ProjectApiContext { public val projectInfoJsonParser: ProjectInfoJsonParser = object : ProjectInfoJsonParser(){ } } fun box(): String { val context = ProjectApiContext() val array = context.projectInfoJsonParser.parse(JsonArray()) return if (array != null) "OK" else "fail" }