From fe51901b69337d82fc9c7a2e9ccd028dbf9434d3 Mon Sep 17 00:00:00 2001 From: Huey Date: Wed, 12 Feb 2025 14:48:48 +0700 Subject: [PATCH 1/3] [#50] Add contract{} to String extensions --- .../co/nimblehq/common/extensions/StringExt.kt | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt b/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt index df8332d..0800a66 100644 --- a/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt +++ b/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt @@ -2,6 +2,8 @@ package co.nimblehq.common.extensions import androidx.core.util.PatternsCompat import java.util.* +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract /** * Check if the string not null or empty. @@ -9,7 +11,13 @@ import java.util.* * * @return true if this nullable char sequence is NOT either null or empty */ -fun String?.isNotNullOrEmpty(): Boolean = !this.isNullOrEmpty() +@OptIn(ExperimentalContracts::class) +fun String?.isNotNullOrEmpty(): Boolean { + contract { + returns(false) implies (this@isNotNullOrEmpty != null) + } + return !this.isNullOrEmpty() +} /** * Check if the string not null or blank. @@ -18,7 +26,13 @@ fun String?.isNotNullOrEmpty(): Boolean = !this.isNullOrEmpty() * @return true if this nullable char sequence is NOT either null or empty or consists solely of * whitespace */ -fun String?.isNotNullOrBlank(): Boolean = !this.isNullOrBlank() +@OptIn(ExperimentalContracts::class) +fun String?.isNotNullOrBlank(): Boolean { + contract { + returns(false) implies (this@isNotNullOrBlank != null) + } + return !this.isNullOrBlank() +} /** * Eliminate the given character then titleize. From 12135c46e4fc431b80ba483133ff7fe330256507 Mon Sep 17 00:00:00 2001 From: Huey Date: Tue, 16 Dec 2025 15:32:26 +0700 Subject: [PATCH 2/3] [#50] Fix incorrect contract logic --- .../src/main/java/co/nimblehq/common/extensions/StringExt.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt b/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt index 0800a66..8afa1cd 100644 --- a/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt +++ b/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt @@ -14,7 +14,7 @@ import kotlin.contracts.contract @OptIn(ExperimentalContracts::class) fun String?.isNotNullOrEmpty(): Boolean { contract { - returns(false) implies (this@isNotNullOrEmpty != null) + returns(true) implies (this@isNotNullOrEmpty != null) } return !this.isNullOrEmpty() } @@ -29,7 +29,7 @@ fun String?.isNotNullOrEmpty(): Boolean { @OptIn(ExperimentalContracts::class) fun String?.isNotNullOrBlank(): Boolean { contract { - returns(false) implies (this@isNotNullOrBlank != null) + returns(true) implies (this@isNotNullOrBlank != null) } return !this.isNullOrBlank() } From de023eacbc384b630015704a9883b9b048445510 Mon Sep 17 00:00:00 2001 From: Huey Date: Tue, 16 Dec 2025 15:36:03 +0700 Subject: [PATCH 3/3] [#50] Extract regex to top-level val --- .../src/main/java/co/nimblehq/common/extensions/StringExt.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt b/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt index 8afa1cd..d1d4728 100644 --- a/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt +++ b/common-ktx/src/main/java/co/nimblehq/common/extensions/StringExt.kt @@ -5,6 +5,8 @@ import java.util.* import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract +private val THAI_REGEX = "([\\u0E00-\\u0E7F]+)".toRegex() + /** * Check if the string not null or empty. * This extension wraps for more readable. @@ -82,6 +84,5 @@ fun String.isEmailValid(): Boolean { * @return true if this string is Thai */ fun String.isThai(): Boolean { - val thaiRegex = "([\\u0E00-\\u0E7F]+)".toRegex() - return if (isEmpty() || isBlank()) false else all { thaiRegex.matches(it.toString()) } + return isNotEmpty() && all { THAI_REGEX.matches(it.toString()) } }