// WITH_RUNTIME // FILE: Promise.java import org.jetbrains.annotations.NotNull; interface Consumer { void consume(T t); } public abstract class Promise { @NotNull public abstract Promise done(@NotNull Consumer done); } // FILE: 1.kt class User { fun use(promise: Promise<*>): Promise<*> { promise.done { } return promise } } fun box(): String { var result = "" User().use( object : Promise() { override fun done(x: Consumer): Promise { result = x.javaClass.genericInterfaces[0].toString() return this } } ) if (result != "Consumer") return "fail: $result" return "OK" }