kirillrakhman
inline fun <T, R> T.getOrInit(prop: KMutableProperty1<T, R?>, init: () -> R) = prop.get(this) ?: init().apply { prop.set(this@getOrInit, this) }