Skip to content

Commit

Permalink
Add workarounds for new KMP warnings (#138)
Browse files Browse the repository at this point in the history
Kotlin 1.9.20 added some new restrictions on MPP code.
  • Loading branch information
ajalt committed Nov 14, 2023
1 parent f6b19ab commit 934f2e5
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.github.ajalt.mordant.internal


private val nextHyperlinkId = AtomicInt(1)
private val nextHyperlinkId = MppAtomicInt(1)

internal fun generateHyperlinkId(): String {
return nextHyperlinkId.getAndIncrement().toString()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ package com.github.ajalt.mordant.internal

import com.github.ajalt.mordant.terminal.*

internal expect class AtomicInt(initial: Int) {
internal interface MppAtomicInt {
fun getAndIncrement(): Int
fun get(): Int
fun set(value: Int)
}

internal expect fun MppAtomicInt(initial: Int): MppAtomicInt

internal expect fun getEnv(key: String): String?

/** Returns pair of [width, height], or null if it can't be detected */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.ajalt.mordant.widgets

import com.github.ajalt.mordant.internal.AtomicInt
import com.github.ajalt.mordant.internal.MppAtomicInt
import com.github.ajalt.mordant.internal.DEFAULT_STYLE
import com.github.ajalt.mordant.rendering.Lines
import com.github.ajalt.mordant.rendering.TextStyle
Expand Down Expand Up @@ -54,7 +54,7 @@ class Spinner(
constructor(frames: String, style: TextStyle = DEFAULT_STYLE, duration: Int = 1, initial: Int = 0) :
this(frames.map { Text(style(it.toString())) }, duration, initial)

private val _tick = AtomicInt(initial)
private val _tick = MppAtomicInt(initial)

/**
* The current frame number.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,23 @@ private external val console: dynamic
private external val Symbol: dynamic
private external val Buffer: dynamic

internal actual class AtomicInt actual constructor(initial: Int) {
private class JsAtomicInt(initial: Int) : MppAtomicInt{
private var backing = initial
actual fun getAndIncrement(): Int {
override fun getAndIncrement(): Int {
return backing++
}

actual fun get(): Int {
override fun get(): Int {
return backing
}

actual fun set(value: Int) {
override fun set(value: Int) {
backing = value
}
}

internal actual fun MppAtomicInt(initial: Int): MppAtomicInt = JsAtomicInt(initial)


private interface JsMppImpls {
fun readEnvvar(key: String): String?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,23 @@ import com.github.ajalt.mordant.terminal.*
import java.lang.management.ManagementFactory
import java.util.concurrent.atomic.AtomicInteger

internal actual class AtomicInt actual constructor(initial: Int) {
private class JvmAtomicInt(initial: Int): MppAtomicInt {
private val backing = AtomicInteger(initial)
actual fun getAndIncrement(): Int {
override fun getAndIncrement(): Int {
return backing.getAndIncrement()
}

actual fun get(): Int {
override fun get(): Int {
return backing.get()
}

actual fun set(value: Int) {
override fun set(value: Int) {
backing.set(value)
}
}

internal actual fun MppAtomicInt(initial: Int): MppAtomicInt = JvmAtomicInt(initial)

internal actual fun getEnv(key: String): String? = System.getenv(key)

// Depending on how IntelliJ is configured, it might use its own Java agent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,23 @@ import kotlin.concurrent.AtomicReference
import kotlin.experimental.ExperimentalNativeApi


internal actual class AtomicInt actual constructor(initial: Int) {
private class NativeAtomicInt(initial: Int) : MppAtomicInt {
private val backing = AtomicInt(initial)
actual fun getAndIncrement(): Int {
override fun getAndIncrement(): Int {
return backing.addAndGet(1) - 1
}

actual fun get(): Int {
override fun get(): Int {
return backing.value
}

actual fun set(value: Int) {
override fun set(value: Int) {
backing.value = value
}
}

internal actual fun MppAtomicInt(initial: Int): MppAtomicInt = NativeAtomicInt(initial)

internal actual fun runningInIdeaJavaAgent(): Boolean = false

internal actual fun getEnv(key: String): String? = getenv(key)?.toKStringFromUtf8()
Expand All @@ -47,7 +49,7 @@ internal actual fun codepointSequence(string: String): Sequence<Int> = sequence
}

internal actual fun printStderr(message: String, newline: Boolean) {
val s = if (newline) message + "\n" else message
val s = if (newline) message + "\n" else message
fprintf(stderr, s)
fflush(stderr)
}
Expand All @@ -63,7 +65,8 @@ internal actual fun readLineOrNullMpp(hideInput: Boolean): String? {
}
}

internal actual fun makePrintingTerminalCursor(terminal: Terminal): TerminalCursor = NativeTerminalCursor(terminal)
internal actual fun makePrintingTerminalCursor(terminal: Terminal): TerminalCursor =
NativeTerminalCursor(terminal)


// These are for the NativeTerminalCursor, but are top-level since atexit and signal require static
Expand Down Expand Up @@ -93,7 +96,10 @@ private fun cursorSigintHandler(signum: Int) {
// `CURSOR_SHOW_STR.length == 6`. We use a literal since that parameter is a UInt on mingw and a ULong on posix
6u
)
signal(SIGINT, existingSigintHandler.value ?: SIG_DFL) // reset signal handling to previous value
signal(
SIGINT,
existingSigintHandler.value ?: SIG_DFL
) // reset signal handling to previous value
existingSigintHandler.value = null
raise(signum) // re-raise the signal
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import kotlinx.cinterop.*
import platform.posix.*

// https://www.gnu.org/software/libc/manual/html_node/getpass.html
@OptIn(UnsafeNumber::class) // https://youtrack.jetbrains.com/issue/KT-60572
internal actual fun ttySetEcho(echo: Boolean) = memScoped {
val termios = alloc<termios>()
if (tcgetattr(STDOUT_FILENO, termios.ptr) != 0) {
Expand Down

0 comments on commit 934f2e5

Please sign in to comment.