[stdlib] Specify AT_MOST_ONCE contract for default-value-like functional parameters KT-54879

This commit is contained in:
Ilya Gorbunov
2024-03-04 08:26:58 +01:00
committed by Space Team
parent dee9fdc02d
commit fc13ae7b4d
21 changed files with 167 additions and 14 deletions
@@ -6,6 +6,7 @@
package kotlin.jvm.optionals
import java.util.Optional
import kotlin.contracts.*
/**
* Returns this [Optional]'s value if [present][Optional.isPresent], or otherwise `null`.
@@ -26,8 +27,12 @@ public fun <T> Optional<out T & Any>.getOrDefault(defaultValue: T): T = if (isPr
*/
@SinceKotlin("1.8")
@WasExperimental(ExperimentalStdlibApi::class)
public inline fun <T> Optional<out T & Any>.getOrElse(defaultValue: () -> T): T =
if (isPresent) get() else defaultValue()
public inline fun <T> Optional<out T & Any>.getOrElse(defaultValue: () -> T): T {
contract {
callsInPlace(defaultValue, InvocationKind.AT_MOST_ONCE)
}
return if (isPresent) get() else defaultValue()
}
/**
* Appends this [Optional]'s value to the given [destination] collection if [present][Optional.isPresent].