Skip to content

Commit 08d78e4

Browse files
committed
Suppress experimental usage warnings
1 parent c901176 commit 08d78e4

File tree

4 files changed

+19
-16
lines changed

4 files changed

+19
-16
lines changed

kt/aoc2024-exe/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree
44
plugins {
55
alias(libs.plugins.kotlin.multiplatform)
66
alias(libs.plugins.kotlin.plugin.allopen)
7-
alias(libs.plugins.atomicfu)
87
alias(libs.plugins.detekt)
98
alias(libs.plugins.kotlinx.benchmark)
109
distribution

kt/aoc2024-exe/src/nonblockingBench/kotlin/com/github/ephemient/aoc2024/exe/RunBlockingBenchmark.kt

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,29 @@ import kotlin.coroutines.Continuation
44
import kotlin.coroutines.CoroutineContext
55
import kotlin.coroutines.EmptyCoroutineContext
66
import kotlin.coroutines.startCoroutine
7-
import kotlinx.atomicfu.atomic
7+
import kotlinx.coroutines.CompletableDeferred
88
import kotlinx.coroutines.CoroutineScope
9+
import kotlinx.coroutines.Deferred
910
import kotlinx.coroutines.Dispatchers
11+
import kotlinx.coroutines.ExperimentalCoroutinesApi
12+
import kotlinx.coroutines.InternalForInheritanceCoroutinesApi
1013
import kotlinx.coroutines.Job
14+
import kotlinx.coroutines.completeWith
1115

1216
actual fun <T> runBlockingBenchmark(block: suspend CoroutineScope.() -> T): T {
13-
val continuation = ContinuationImpl<T>(Dispatchers.Unconfined)
14-
block.startCoroutine(CoroutineScope(continuation.context), continuation)
15-
return continuation.getCompleted()
17+
val deferred = CompletableContinuation<T>(Dispatchers.Unconfined)
18+
block.startCoroutine(CoroutineScope(deferred.context), deferred)
19+
@OptIn(ExperimentalCoroutinesApi::class)
20+
return deferred.getCompleted()
1621
}
1722

18-
private class ContinuationImpl<T>(context: CoroutineContext = EmptyCoroutineContext) : Continuation<T> {
19-
private val result = atomic<Result<T>?>(null)
23+
@OptIn(InternalForInheritanceCoroutinesApi::class)
24+
private class CompletableContinuation<T> private constructor(
25+
context: CoroutineContext,
26+
private val deferred: CompletableDeferred<T>,
27+
) : Continuation<T>, Deferred<T> by deferred {
28+
constructor(context: CoroutineContext = EmptyCoroutineContext) : this(context, CompletableDeferred(context[Job]))
2029

21-
override val context: CoroutineContext = context + Job(context[Job])
22-
23-
override fun resumeWith(result: Result<T>) {
24-
check(this.result.compareAndSet(null, result)) { "Already resumed, but proposed with update $result" }
25-
}
26-
27-
fun getCompleted(): T = checkNotNull(result.value) { "The job has not completed yet" }.getOrThrow()
30+
override val context: CoroutineContext = context + deferred
31+
override fun resumeWith(result: Result<T>) = check(deferred.completeWith(result)) { "Already resumed" }
2832
}

kt/aoc2024-lib/src/commonMain/kotlin/com/github/ephemient/aoc2024/Day20.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.ephemient.aoc2024
22

33
import kotlin.math.abs
4+
import kotlinx.coroutines.ExperimentalCoroutinesApi
45
import kotlinx.coroutines.flow.asFlow
56
import kotlinx.coroutines.flow.flatMapMerge
67
import kotlinx.coroutines.flow.flow
@@ -26,6 +27,7 @@ class Day20(input: String) {
2627

2728
suspend fun part2(time: Int = 100) = solve(20, time)
2829

30+
@OptIn(ExperimentalCoroutinesApi::class)
2931
private suspend fun solve(cheats: Int, time: Int) = path.indices.asFlow().flatMapMerge { i ->
3032
flow {
3133
var count = 0

kt/gradle/libs.versions.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
[versions]
22
asm = "9.7.1"
3-
atomicfu = "0.26.1"
43
detekt = "1.23.7"
54
junit-jupiter = "5.11.4"
65
kotlin = "2.1.0"
@@ -12,7 +11,6 @@ native-image = "0.10.4"
1211
okio = "3.9.1"
1312

1413
[plugins]
15-
atomicfu = { id = "org.jetbrains.kotlinx.atomicfu", version.ref = "atomicfu" }
1614
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
1715
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
1816
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }

0 commit comments

Comments
 (0)