From ba091f8c3cfa665e83c789e1a5845d1ae0f26b6b Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Mon, 15 Jul 2024 19:54:04 +0200 Subject: Backend: RecalculatingValue as a ReadOnlyProperty (#2151) --- .../at/hannibal2/skyhanni/utils/RecalculatingValue.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt b/src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt index 76f0c0c94..6059ed662 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt @@ -1,17 +1,28 @@ package at.hannibal2.skyhanni.utils +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty import kotlin.time.Duration -class RecalculatingValue(private val expireTime: Duration, val calculation: () -> T) { +class RecalculatingValue(private val expireTime: Duration, private val calculation: () -> T) : ReadOnlyProperty { - private var currentValue = calculation() + private var currentValue: Any? = UNINITIALIZED_VALUE private var lastAccessTime = SimpleTimeMark.farPast() + @Deprecated("use \"by RecalculatingValue\" instead") fun getValue(): T { if (lastAccessTime.passedSince() > expireTime) { currentValue = calculation() lastAccessTime = SimpleTimeMark.now() } - return currentValue + @Suppress("UNCHECKED_CAST") + return currentValue as T + } + + @Suppress("DEPRECATION") + override fun getValue(thisRef: Any?, property: KProperty<*>): T = getValue() + + companion object { + private val UNINITIALIZED_VALUE = Any() } } -- cgit