From 5ac913381312f9063dce792d9833fa7e6249bbf1 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Thu, 14 Aug 2025 03:09:40 +0300 Subject: [PATCH] Method to create child refcounters --- build.gradle.kts | 2 +- .../MayBeClosedReferenceCounter.kt | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2a846f2..f2a9eac 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,7 +15,7 @@ buildscript { } group = "ru.landgrafhomyak.utility" -version = "0.3" +version = "0.4" repositories { mavenCentral() diff --git a/src/commonMain/kotlin/ru/landrafhomyak/utility/reference_counter/MayBeClosedReferenceCounter.kt b/src/commonMain/kotlin/ru/landrafhomyak/utility/reference_counter/MayBeClosedReferenceCounter.kt index 6771c9a..e70faf8 100644 --- a/src/commonMain/kotlin/ru/landrafhomyak/utility/reference_counter/MayBeClosedReferenceCounter.kt +++ b/src/commonMain/kotlin/ru/landrafhomyak/utility/reference_counter/MayBeClosedReferenceCounter.kt @@ -91,4 +91,41 @@ public sealed class MayBeClosedReferenceCounter { else return "" } + + @Suppress("LEAKED_IN_PLACE_LAMBDA", "WRONG_INVOCATION_KIND") + @JvmName("child") + public fun child(errMessageClosed: String, errExistRefs: String, scope: (MayBeClosedReferenceCounter) -> R): R { + contract { + callsInPlace(scope, InvocationKind.EXACTLY_ONCE) + } + + _Platform.jvm_assertNotNull(errMessageClosed, "param: errMessageClosed") + _Platform.jvm_assertNotNull(errExistRefs, "param: errExistRefs") + _Platform.jvm_assertNotNull(scope, "param: scope") + + this.withRef { + return CloseableReferenceCounter.autoClosed( + errMessageClosed = errMessageClosed, + errExistRefs = errExistRefs, + scope = scope + ) + } + } + + @Suppress("LEAKED_IN_PLACE_LAMBDA", "WRONG_INVOCATION_KIND") + @JvmName("child_inheritErrMessage") + public fun child_inheritErrMessage(errExistRefs: String, scope: (MayBeClosedReferenceCounter) -> R): R { + contract { + callsInPlace(scope, InvocationKind.EXACTLY_ONCE) + } + + _Platform.jvm_assertNotNull(errExistRefs, "param: errExistRefs") + _Platform.jvm_assertNotNull(scope, "param: scope") + + return this.child( + errMessageClosed = this._errMessageClosed, + errExistRefs = errExistRefs, + scope = scope + ) + } } \ No newline at end of file