Skip to content

Commit 084e9fa

Browse files
Add ifNotNull and ifNull functions
1 parent 0b6d152 commit 084e9fa

File tree

5 files changed

+73
-0
lines changed

5 files changed

+73
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
### Added
66

7+
- `T?.ifNotNull(block: () -> Unit): T?`
8+
- `T?.ifNull(block: () -> Unit): T?`
79
- `Graph` data structure
810

911
### Changed

kotlin-stdlib/api/android/kotlin-stdlib.api

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,11 @@ public final class com/javiersc/kotlin/stdlib/StringsTransformKt {
191191
public static final fun transformstring (Ljava/lang/String;)Ljava/lang/String;
192192
}
193193

194+
public final class com/javiersc/kotlin/stdlib/TKt {
195+
public static final fun ifNotNull (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
196+
public static final fun ifNull (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
197+
}
198+
194199
public abstract interface class com/javiersc/kotlin/stdlib/graph/Graph : java/util/Map, kotlin/jvm/internal/markers/KMappedMarker {
195200
public abstract fun asString ()Ljava/lang/String;
196201
public abstract fun contains (Ljava/lang/Object;)Z

kotlin-stdlib/api/jvm/kotlin-stdlib.api

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ public final class com/javiersc/kotlin/stdlib/StringsTransformKt {
197197
public static final fun transformstring (Ljava/lang/String;)Ljava/lang/String;
198198
}
199199

200+
public final class com/javiersc/kotlin/stdlib/TKt {
201+
public static final fun ifNotNull (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
202+
public static final fun ifNull (Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
203+
}
204+
200205
public abstract interface class com/javiersc/kotlin/stdlib/graph/Graph : java/util/Map, kotlin/jvm/internal/markers/KMappedMarker {
201206
public abstract fun asString ()Ljava/lang/String;
202207
public abstract fun contains (Ljava/lang/Object;)Z
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.javiersc.kotlin.stdlib
2+
3+
public inline fun <T> T?.ifNotNull(block: () -> Unit): T? {
4+
if (this != null) block()
5+
return this
6+
}
7+
8+
public inline fun <T> T?.ifNull(block: () -> Unit): T? {
9+
if (this == null) block()
10+
return this
11+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.javiersc.kotlin.stdlib
2+
3+
import kotlin.test.Test
4+
import kotlin.test.assertFalse
5+
import kotlin.test.assertTrue
6+
7+
@Suppress("RedundantNullableReturnType")
8+
class TTest {
9+
10+
private val a: String? = "a"
11+
private val b: String? = null
12+
private val one: Int? = 1
13+
private val two: Int? = null
14+
15+
@Test
16+
fun ifNotNull() {
17+
var isA = false
18+
var isB = false
19+
var isOne = false
20+
var isTwo = false
21+
22+
a.ifNotNull { isA = true }
23+
b.ifNotNull { isB = true }
24+
one.ifNotNull { isOne = true }
25+
two.ifNotNull { isTwo = true }
26+
27+
assertTrue { isA }
28+
assertFalse { isB }
29+
assertTrue { isOne }
30+
assertFalse { isTwo }
31+
}
32+
33+
@Test
34+
fun ifNull() {
35+
var isA = false
36+
var isB = false
37+
var isOne = false
38+
var isTwo = false
39+
40+
a.ifNull { isA = true }
41+
b.ifNull { isB = true }
42+
one.ifNull { isOne = true }
43+
two.ifNull { isTwo = true }
44+
45+
assertFalse { isA }
46+
assertTrue { isB }
47+
assertFalse { isOne }
48+
assertTrue { isTwo }
49+
}
50+
}

0 commit comments

Comments
 (0)