Skip to content

Commit 79ce138

Browse files
committed
Add contract on whatif-android module
1 parent 79acdf0 commit 79ce138

File tree

6 files changed

+107
-26
lines changed

6 files changed

+107
-26
lines changed

whatif-android/build.gradle

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ android {
2424
}
2525

2626
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
27-
kotlinOptions.freeCompilerArgs += ["-Xexplicit-api=strict"]
27+
kotlinOptions.freeCompilerArgs += [
28+
"-Xexplicit-api=strict",
29+
"-Xopt-in=kotlin.contracts.ExperimentalContracts"
30+
]
2831
}
2932

3033
dependencies {

whatif-android/src/main/java/com/skydoves/whatif_android/WhatIfActivity.kt

+58-16
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import android.os.Parcelable
2727
import com.skydoves.whatif.whatIfNotNull
2828
import com.skydoves.whatif.whatIfNotNullAs
2929
import java.io.Serializable
30+
import kotlin.contracts.InvocationKind
31+
import kotlin.contracts.contract
3032

3133
/**
3234
* An expression for invoking [whatIf] when the [Activity]'s intent extras is not null and not empty.
@@ -38,7 +40,9 @@ import java.io.Serializable
3840
public inline fun Activity.whatIfHasExtras(
3941
whatIf: (Bundle) -> Unit
4042
) {
41-
43+
contract {
44+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
45+
}
4246
this.whatIfHasExtras(
4347
whatIf = whatIf,
4448
whatIfNot = { }
@@ -58,7 +62,10 @@ public inline fun Activity.whatIfHasExtras(
5862
whatIf: (Bundle) -> Unit,
5963
whatIfNot: () -> Unit
6064
) {
61-
65+
contract {
66+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
67+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
68+
}
6269
this.intent.extras.whatIfNotNull(
6370
whatIf = {
6471
if (!it.isEmpty) {
@@ -81,7 +88,9 @@ public inline fun Activity.whatIfHasExtras(
8188
name: String,
8289
whatIf: () -> Unit
8390
) {
84-
91+
contract {
92+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
93+
}
8594
this.whatIfHasExtras(
8695
name = name,
8796
whatIf = whatIf,
@@ -104,7 +113,10 @@ public inline fun Activity.whatIfHasExtras(
104113
whatIf: () -> Unit,
105114
whatIfNot: () -> Unit
106115
) {
107-
116+
contract {
117+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
118+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
119+
}
108120
if (intent.hasExtra(name)) {
109121
whatIf()
110122
} else {
@@ -124,7 +136,9 @@ public inline fun Activity.whatIfHasStringExtra(
124136
name: String,
125137
whatIf: (String) -> Unit
126138
) {
127-
139+
contract {
140+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
141+
}
128142
this.intent.getStringExtra(name).whatIfNotNull(
129143
whatIf = whatIf,
130144
whatIfNot = { }
@@ -146,7 +160,10 @@ public inline fun Activity.whatIfHasStringExtra(
146160
whatIf: (String) -> Unit,
147161
whatIfNot: () -> Unit
148162
) {
149-
163+
contract {
164+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
165+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
166+
}
150167
this.intent.getStringExtra(name).whatIfNotNull(
151168
whatIf = whatIf,
152169
whatIfNot = whatIfNot
@@ -165,7 +182,9 @@ public inline fun Activity.whatIfHasCharSequenceExtra(
165182
name: String,
166183
whatIf: (CharSequence) -> Unit
167184
) {
168-
185+
contract {
186+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
187+
}
169188
this.intent.getCharSequenceExtra(name).whatIfNotNull(
170189
whatIf = whatIf,
171190
whatIfNot = { }
@@ -187,7 +206,10 @@ public inline fun Activity.whatIfHasCharSequenceExtra(
187206
whatIf: (CharSequence) -> Unit,
188207
whatIfNot: () -> Unit
189208
) {
190-
209+
contract {
210+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
211+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
212+
}
191213
this.intent.getCharSequenceExtra(name).whatIfNotNull(
192214
whatIf = whatIf,
193215
whatIfNot = whatIfNot
@@ -206,7 +228,9 @@ public inline fun <reified T : Serializable> Activity.whatIfHasSerializableExtra
206228
name: String,
207229
whatIf: (T) -> Unit
208230
) {
209-
231+
contract {
232+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
233+
}
210234
this.intent.getSerializableExtra(name).whatIfNotNullAs(
211235
whatIf = whatIf,
212236
whatIfNot = { }
@@ -228,7 +252,10 @@ public inline fun <reified T : Serializable> Activity.whatIfHasSerializableExtra
228252
whatIf: (T) -> Unit,
229253
whatIfNot: () -> Unit
230254
) {
231-
255+
contract {
256+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
257+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
258+
}
232259
this.intent.getSerializableExtra(name).whatIfNotNullAs(
233260
whatIf = whatIf,
234261
whatIfNot = whatIfNot
@@ -247,7 +274,9 @@ public inline fun <reified T : Parcelable> Activity.whatIfHasParcelableExtra(
247274
name: String,
248275
whatIf: (T) -> Unit
249276
) {
250-
277+
contract {
278+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
279+
}
251280
this.intent.getParcelableExtra<T>(name).whatIfNotNull(
252281
whatIf = whatIf,
253282
whatIfNot = { }
@@ -269,7 +298,10 @@ public inline fun <reified T : Parcelable> Activity.whatIfHasParcelableExtra(
269298
whatIf: (T) -> Unit,
270299
whatIfNot: () -> Unit
271300
) {
272-
301+
contract {
302+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
303+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
304+
}
273305
this.intent.getParcelableExtra<T>(name).whatIfNotNull(
274306
whatIf = whatIf,
275307
whatIfNot = whatIfNot
@@ -288,7 +320,9 @@ public inline fun <reified T : Parcelable> Activity.whatIfHasParcelableArrayList
288320
name: String,
289321
whatIf: (ArrayList<T>) -> Unit
290322
) {
291-
323+
contract {
324+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
325+
}
292326
this.intent.getParcelableArrayListExtra<T>(name).whatIfNotNull(
293327
whatIf = whatIf,
294328
whatIfNot = { }
@@ -310,7 +344,10 @@ public inline fun <reified T : Parcelable> Activity.whatIfHasParcelableArrayList
310344
whatIf: (ArrayList<T>) -> Unit,
311345
whatIfNot: () -> Unit
312346
) {
313-
347+
contract {
348+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
349+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
350+
}
314351
this.intent.getParcelableArrayListExtra<T>(name).whatIfNotNull(
315352
whatIf = whatIf,
316353
whatIfNot = whatIfNot
@@ -327,7 +364,9 @@ public inline fun <reified T : Parcelable> Activity.whatIfHasParcelableArrayList
327364
public inline fun Activity.whatIfHasDeepLinkUri(
328365
whatIf: (Uri) -> Unit
329366
) {
330-
367+
contract {
368+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
369+
}
331370
this.whatIfHasDeepLinkUri(whatIf, { })
332371
}
333372

@@ -344,6 +383,9 @@ public inline fun Activity.whatIfHasDeepLinkUri(
344383
whatIf: (Uri) -> Unit,
345384
whatIfNot: () -> Unit
346385
) {
347-
386+
contract {
387+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
388+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
389+
}
348390
this.intent.data.whatIfNotNull(whatIf, whatIfNot)
349391
}

whatif-android/src/main/java/com/skydoves/whatif_android/WhatIfFragment.kt

+26-7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import androidx.fragment.app.Fragment
2727
import androidx.fragment.app.FragmentActivity
2828
import com.skydoves.whatif.whatIfNotNull
2929
import com.skydoves.whatif.whatIfNotNullAs
30+
import kotlin.contracts.InvocationKind
31+
import kotlin.contracts.contract
3032

3133
/**
3234
* @author skydoves (Jaewoong Eum)
@@ -40,7 +42,9 @@ import com.skydoves.whatif.whatIfNotNullAs
4042
public inline fun Fragment?.whatIfNotNullContext(
4143
whatIf: (Context) -> Unit
4244
) {
43-
45+
contract {
46+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
47+
}
4448
this?.context.whatIfNotNull {
4549
whatIf(it)
4650
}
@@ -80,7 +84,9 @@ public inline fun Fragment?.whatIfNotNullContext(
8084
public inline fun Fragment?.whatIfNotNullActivity(
8185
whatIf: (FragmentActivity) -> Unit
8286
) {
83-
87+
contract {
88+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
89+
}
8490
this?.activity.whatIfNotNull {
8591
whatIf(it)
8692
}
@@ -101,7 +107,10 @@ public inline fun Fragment?.whatIfNotNullActivity(
101107
whatIf: (FragmentActivity) -> Unit,
102108
whatIfNot: () -> Unit
103109
) {
104-
110+
contract {
111+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
112+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
113+
}
105114
this?.activity.whatIfNotNull(
106115
whatIf = whatIf,
107116
whatIfNot = whatIfNot
@@ -120,7 +129,9 @@ public inline fun Fragment?.whatIfNotNullActivity(
120129
public inline fun Fragment?.whatIfHasArguments(
121130
whatIf: (Bundle) -> Unit
122131
) {
123-
132+
contract {
133+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
134+
}
124135
whatIfHasArguments(whatIf) { }
125136
}
126137

@@ -138,7 +149,10 @@ public inline fun Fragment?.whatIfHasArguments(
138149
whatIf: (Bundle) -> Unit,
139150
whatIfNot: () -> Unit
140151
) {
141-
152+
contract {
153+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
154+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
155+
}
142156
this?.arguments.whatIfNotNull(whatIf, whatIfNot)
143157
}
144158

@@ -154,7 +168,9 @@ public inline fun Fragment?.whatIfHasArguments(
154168
public inline fun <reified T> Fragment?.whatIfFindParentInterface(
155169
whatIf: (T) -> Unit
156170
) {
157-
171+
contract {
172+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
173+
}
158174
whatIfFindParentInterface(whatIf) { }
159175
}
160176

@@ -172,6 +188,9 @@ public inline fun <reified T> Fragment?.whatIfFindParentInterface(
172188
whatIf: (T) -> Unit,
173189
whatIfNot: () -> Unit
174190
) {
175-
191+
contract {
192+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
193+
callsInPlace(whatIfNot, InvocationKind.AT_MOST_ONCE)
194+
}
176195
this?.activity.whatIfNotNullAs(whatIf, whatIfNot)
177196
}

whatif-android/src/main/java/com/skydoves/whatif_android/WhatIfFragmentActivity.kt

+14
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import androidx.annotation.IdRes
2020
import androidx.fragment.app.Fragment
2121
import androidx.fragment.app.FragmentActivity
2222
import com.skydoves.whatif.whatIfNotNullAs
23+
import kotlin.contracts.InvocationKind
24+
import kotlin.contracts.contract
2325

2426
/**
2527
* @author skydoves (Jaewoong Eum)
@@ -35,6 +37,9 @@ public inline fun <reified T : Fragment> FragmentActivity.whatIfFindFragment(
3537
@IdRes id: Int,
3638
whatIf: (T) -> Unit
3739
) {
40+
contract {
41+
callsInPlace(whatIf, InvocationKind.EXACTLY_ONCE)
42+
}
3843
whatIfFindFragment(id, whatIf, {})
3944
}
4045

@@ -55,6 +60,9 @@ public inline fun <reified T : Fragment> FragmentActivity.whatIfFindFragment(
5560
whatIf: (T) -> Unit,
5661
whatIfNot: () -> Unit
5762
) {
63+
contract {
64+
callsInPlace(whatIf, InvocationKind.EXACTLY_ONCE)
65+
}
5866
supportFragmentManager.findFragmentById(id).whatIfNotNullAs(whatIf, whatIfNot)
5967
}
6068

@@ -72,6 +80,9 @@ public inline fun <reified T : Fragment> FragmentActivity.whatIfFindFragment(
7280
tag: String?,
7381
whatIf: (T) -> Unit
7482
) {
83+
contract {
84+
callsInPlace(whatIf, InvocationKind.EXACTLY_ONCE)
85+
}
7586
whatIfFindFragment(tag, whatIf, {})
7687
}
7788

@@ -92,5 +103,8 @@ public inline fun <reified T : Fragment> FragmentActivity.whatIfFindFragment(
92103
whatIf: (T) -> Unit,
93104
whatIfNot: () -> Unit
94105
) {
106+
contract {
107+
callsInPlace(whatIf, InvocationKind.EXACTLY_ONCE)
108+
}
95109
supportFragmentManager.findFragmentByTag(tag).whatIfNotNullAs(whatIf, whatIfNot)
96110
}

whatif/build.gradle

+4-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ task coverageReport(type: JacocoReport, dependsOn: 'test') {
2121
}
2222

2323
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
24-
kotlinOptions.freeCompilerArgs += ["-Xopt-in=kotlin.contracts.ExperimentalContracts"]
24+
kotlinOptions.freeCompilerArgs += [
25+
"-Xexplicit-api=strict",
26+
"-Xopt-in=kotlin.contracts.ExperimentalContracts"
27+
]
2528
}
2629

2730
dependencies {

whatif/src/main/java/com/skydoves/whatif/WhatIf.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ public inline fun <T> T?.whatIfNotNull(
375375
whatIf: (T) -> Unit
376376
): T? {
377377
contract {
378-
callsInPlace(whatIf, InvocationKind.EXACTLY_ONCE)
378+
callsInPlace(whatIf, InvocationKind.AT_MOST_ONCE)
379379
}
380380
return this.whatIfNotNull(
381381
whatIf = whatIf,

0 commit comments

Comments
 (0)