From 0717705f15e2bbcc6ffd3f86fa8c65ade2f4aafe Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 27 Mar 2015 14:27:25 +0300 Subject: [PATCH] Add requireNotNull with lazy message. --- .../stdlib/src/kotlin/util/Preconditions.kt | 17 ++++++++++++++++- libraries/stdlib/test/PreconditionsTest.kt | 15 +++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/libraries/stdlib/src/kotlin/util/Preconditions.kt b/libraries/stdlib/src/kotlin/util/Preconditions.kt index bb28bcb9303..340a593bb12 100644 --- a/libraries/stdlib/src/kotlin/util/Preconditions.kt +++ b/libraries/stdlib/src/kotlin/util/Preconditions.kt @@ -41,6 +41,21 @@ public fun requireNotNull(value: T?, message: Any = "Required value was } } +/** + * Throws an [IllegalArgumentException] with the result of calling [lazyMessage] if the [value] is null. Otherwise + * returns the not null value. + * + * @sample test.collections.PreconditionsTest.requireNotNullWithLazyMessage + */ +public fun requireNotNull(value: T?, lazyMessage: () -> Any): T { + if (value == null) { + val message = lazyMessage() + throw IllegalArgumentException(message.toString()) + } else { + return value + } +} + /** * Throws an [IllegalStateException] with an optional [message] if the [value] is false. * @@ -65,7 +80,7 @@ public inline fun check(value: Boolean, lazyMessage: () -> Any): Unit { } /** - * Throws an [IllegalArgumentException] with the given [message] if the [value] is null. Otherwise + * Throws an [IllegalStateException] with the given [message] if the [value] is null. Otherwise * returns the not null value. * * @sample test.collections.PreconditionsTest.checkNotNull diff --git a/libraries/stdlib/test/PreconditionsTest.kt b/libraries/stdlib/test/PreconditionsTest.kt index 9bc75893d81..9e4a7f99614 100644 --- a/libraries/stdlib/test/PreconditionsTest.kt +++ b/libraries/stdlib/test/PreconditionsTest.kt @@ -84,6 +84,21 @@ class PreconditionsTest() { } } + test fun requireNotNullWithLazyMessage() { + val error = failsWith(javaClass()) { + val obj: Any? = null + requireNotNull(obj) { "Message" } + } + assertEquals("Message", error.getMessage()) + + var lazyCalled: Boolean = false + requireNotNull("not null") { + lazyCalled = true + "Message" + } + assertFalse(lazyCalled, "Message is not evaluated if the condition is met") + } + test fun checkNotNull() { val s1: String? = "S1" val r1: String = checkNotNull(s1)