// WITH_REFLECT // NO_CHECK_LAMBDA_INLINING // TARGET_BACKEND: JVM // FILE: 1.kt package test import java.util.* import kotlin.reflect.KClass val valuesInjectFnc = HashMap, Any>() inline fun injectFnc(): Lazy> = lazy(LazyThreadSafetyMode.NONE) { (valuesInjectFnc[T::class] ?: throw Exception("no inject ${T::class.simpleName}")) as Function0 } inline fun registerFnc(noinline value: Function0) { valuesInjectFnc[T::class] = value } public class Box // FILE: 2.kt import test.* class Boxer { val box: () -> Box by injectFnc() } fun box(): String { val box = Box() registerFnc { box } val prop = Boxer().box if (prop() != box) return "fail 1" return "OK" }