package expo.modules.devmenu import java.util.* import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty class KeyValueCachedPropertyProxy( private var loader: (TKey) -> TValue, private val container: WeakHashMap ) { operator fun get(key: TKey): TValue { if (!container.containsKey(key)) { container[key] = loader(key) } return container[key]!! } } class KeyValueCachedProperty(private val loader: (TKey) -> TValue) : ReadOnlyProperty> { private val container = WeakHashMap() override fun getValue(thisRef: Any, property: KProperty<*>): KeyValueCachedPropertyProxy { return KeyValueCachedPropertyProxy(loader, container) } }