From 84d17349b7c47eb724c35bfcade109201ab92765 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 25 Feb 2024 01:45:02 +0700 Subject: [PATCH] Delegate.maskSmart --- gradle.properties | 2 +- .../kotlin/ru/dbotthepony/kommons/util/Delegate.kt | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6617a13..c4191ac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ kotlin.code.style=official specifyKotlinAsDependency=false projectGroup=ru.dbotthepony.kommons -projectVersion=2.9.2 +projectVersion=2.9.3 guavaDepVersion=33.0.0 gsonDepVersion=2.8.9 diff --git a/src/main/kotlin/ru/dbotthepony/kommons/util/Delegate.kt b/src/main/kotlin/ru/dbotthepony/kommons/util/Delegate.kt index db45866..bda7a8b 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/util/Delegate.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/util/Delegate.kt @@ -55,6 +55,20 @@ interface Delegate : Supplier, Consumer { @Deprecated("Warning: Using read-only property as delegate") constructor(prop: KProperty0) : this(prop::get, Consumer { }) } + + companion object { + /** + * Returns smart box if [getter] or [setter] is not passthrough + */ + @JvmStatic + fun maskSmart(value: V, getter: DelegateGetter, setter: DelegateSetter): Delegate { + if (getter === DelegateGetter.passthrough() && setter === DelegateSetter.passthrough()) { + return Box(value) + } else { + return SmartBox(value, getter, setter) + } + } + } } operator fun Supplier.getValue(ref: Any?, property: KProperty<*>): V {