Deprecate precondition checks with non-lazy message.

Make precondition checks with lazy message inline.
Use require with lazy message in stdlib.
#KT-8253 Fixed
This commit is contained in:
Ilya Gorbunov
2015-09-04 19:20:54 +03:00
parent a59962c620
commit c14f376d21
3 changed files with 50 additions and 11 deletions
+9 -9
View File
@@ -1411,7 +1411,7 @@ public fun ShortArray.sliceArray(indices: IntRange): ShortArray {
* Returns a list containing first [n] elements.
*/
public fun <T> Array<out T>.take(n: Int): List<T> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -1428,7 +1428,7 @@ public fun <T> Array<out T>.take(n: Int): List<T> {
* Returns a list containing first [n] elements.
*/
public fun BooleanArray.take(n: Int): List<Boolean> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -1445,7 +1445,7 @@ public fun BooleanArray.take(n: Int): List<Boolean> {
* Returns a list containing first [n] elements.
*/
public fun ByteArray.take(n: Int): List<Byte> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -1462,7 +1462,7 @@ public fun ByteArray.take(n: Int): List<Byte> {
* Returns a list containing first [n] elements.
*/
public fun CharArray.take(n: Int): List<Char> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -1479,7 +1479,7 @@ public fun CharArray.take(n: Int): List<Char> {
* Returns a list containing first [n] elements.
*/
public fun DoubleArray.take(n: Int): List<Double> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -1496,7 +1496,7 @@ public fun DoubleArray.take(n: Int): List<Double> {
* Returns a list containing first [n] elements.
*/
public fun FloatArray.take(n: Int): List<Float> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -1513,7 +1513,7 @@ public fun FloatArray.take(n: Int): List<Float> {
* Returns a list containing first [n] elements.
*/
public fun IntArray.take(n: Int): List<Int> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -1530,7 +1530,7 @@ public fun IntArray.take(n: Int): List<Int> {
* Returns a list containing first [n] elements.
*/
public fun LongArray.take(n: Int): List<Long> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -1547,7 +1547,7 @@ public fun LongArray.take(n: Int): List<Long> {
* Returns a list containing first [n] elements.
*/
public fun ShortArray.take(n: Int): List<Short> {
require(n >= 0, "Requested element count $n is less than zero.")
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (n >= size()) return toList()
var count = 0
@@ -4,11 +4,17 @@ package kotlin
import java.lang.IllegalArgumentException
import java.lang.IllegalStateException
/**
* Throws an [IllegalArgumentException] if the [value] is false.
*/
public fun require(value: Boolean): Unit = require(value) { "Failed requirement" }
/**
* Throws an [IllegalArgumentException] with an optional [message] if the [value] is false.
*
* @sample test.collections.PreconditionsTest.failingRequireWithMessage
*/
@deprecated("Use require with lazy message instead.", ReplaceWith("require(value) { message }"))
public fun require(value: Boolean, message: Any = "Failed requirement"): Unit {
if (!value) {
throw IllegalArgumentException(message.toString())
@@ -27,12 +33,18 @@ public inline fun require(value: Boolean, lazyMessage: () -> Any): Unit {
}
}
/**
* Throws an [IllegalArgumentException] if the [value] is null. Otherwise returns the not null value.
*/
public fun <T:Any> requireNotNull(value: T?): T = requireNotNull(value) { "Required value was null" }
/**
* Throws an [IllegalArgumentException] with the given [message] if the [value] is null. Otherwise
* returns the not null value.
*
* @sample test.collections.PreconditionsTest.requireNotNull
*/
@deprecated("Use requireNotNull with lazy message instead.", ReplaceWith("requireNotNull(value) { message }"))
public fun <T:Any> requireNotNull(value: T?, message: Any = "Required value was null"): T {
if (value == null) {
throw IllegalArgumentException(message.toString())
@@ -47,7 +59,7 @@ public fun <T:Any> requireNotNull(value: T?, message: Any = "Required value was
*
* @sample test.collections.PreconditionsTest.requireNotNullWithLazyMessage
*/
public fun <T:Any> requireNotNull(value: T?, lazyMessage: () -> Any): T {
public inline fun <T:Any> requireNotNull(value: T?, lazyMessage: () -> Any): T {
if (value == null) {
val message = lazyMessage()
throw IllegalArgumentException(message.toString())
@@ -56,11 +68,17 @@ public fun <T:Any> requireNotNull(value: T?, lazyMessage: () -> Any): T {
}
}
/**
* Throws an [IllegalStateException] if the [value] is false.
*/
public fun check(value: Boolean): Unit = check(value) { "Check failed" }
/**
* Throws an [IllegalStateException] with an optional [message] if the [value] is false.
*
* @sample test.collections.PreconditionsTest.failingCheckWithMessage
*/
@deprecated("Use check with lazy message instead.", ReplaceWith("check(value) { message }"))
public fun check(value: Boolean, message: Any = "Check failed"): Unit {
if (!value) {
throw IllegalStateException(message.toString())
@@ -79,12 +97,19 @@ public inline fun check(value: Boolean, lazyMessage: () -> Any): Unit {
}
}
/**
* Throws an [IllegalStateException] if the [value] is null. Otherwise
* returns the not null value.
*/
public fun <T:Any> checkNotNull(value: T?): T = checkNotNull(value) { "Required value was null" }
/**
* Throws an [IllegalStateException] with the given [message] if the [value] is null. Otherwise
* returns the not null value.
*
* @sample test.collections.PreconditionsTest.checkNotNull
*/
@deprecated("Use checkNotNull with lazy message instead.", ReplaceWith("checkNotNull(value) { message }"))
public fun <T:Any> checkNotNull(value: T?, message: Any = "Required value was null"): T {
if (value == null) {
throw IllegalStateException(message.toString())
@@ -93,6 +118,20 @@ public fun <T:Any> checkNotNull(value: T?, message: Any = "Required value was nu
}
}
/**
* Throws an [IllegalStateException] with the result of calling [lazyMessage] if the [value] is null. Otherwise
* returns the not null value.
*/
public inline fun <T:Any> checkNotNull(value: T?, lazyMessage: () -> Any): T {
if (value == null) {
val message = lazyMessage()
throw IllegalStateException(message.toString())
} else {
return value
}
}
/**
* Throws an [IllegalStateException] with the given [message].
*