// TARGET_BACKEND: JVM // WITH_STDLIB // FULL_JDK // FILE: 1.kt package test import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty interface Base { } class BaseImpl : Base { } class ObjectContainer { } typealias ObjectContainerProvider = () -> ObjectContainer? internal inline fun ObjectContainerProvider.extensionFun(): ReadOnlyProperty { return object : ReadOnlyProperty { val emptyProxy: T by lazy { T::class.java.getDeclaredConstructor().newInstance() } override fun getValue(thisRef: Any, property: KProperty<*>): T = emptyProxy } } // FILE: 2.kt import test.* class DefaultObjectContainerProvider : ObjectContainerProvider { val baseImpl: BaseImpl by extensionFun() override fun invoke(): ObjectContainer? { return null } } fun box(): String { DefaultObjectContainerProvider().baseImpl return "OK" }