kotlinx-atomicfu
kotlinx-atomicfu copied to clipboard
AtomicInt minusAssign not found
trafficstars
With 0.23.2, If I use the following piece of code:
val position: AtomicInt = atomic(1)
position -= 1
compilation on the JVM fails with:
> Task :myproject:compileKotlinJvm FAILED
e: java.lang.IllegalStateException: No minusAssign function found in CLASS CLASS name:AtomicIntegerFieldUpdater modality:FINAL visibility:public superTypes:[]
at org.jetbrains.kotlinx.atomicfu.compiler.backend.common.AbstractAtomicSymbols.getAtomicHandlerFunctionSymbol(AbstractAtomicSymbols.kt:84)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.JvmAtomicfuIrBuilder.callFieldUpdater(JvmAtomicfuIrBuilder.kt:75)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.jvm.AtomicfuJvmIrTransformer$JvmAtomicFunctionCallTransformer.transformAtomicUpdateCallOnProperty(AtomicfuJvmIrTransformer.kt:164)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.common.AbstractAtomicfuTransformer$AtomicFunctionCallTransformer.visitCall(AbstractAtomicfuTransformer.kt:602)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.common.AbstractAtomicfuTransformer$AtomicFunctionCallTransformer.visitCall(AbstractAtomicfuTransformer.kt:550)
at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:26)
And on JS with:
> Task :myproject:compileKotlinJs FAILED
e: java.lang.IllegalStateException: Exception while looking for the function `atomicfu_minusAssign` in package `kotlinx.atomicfu`: Collection contains no element matching the predicate.
at org.jetbrains.kotlinx.atomicfu.compiler.backend.js.TransformerUtilKt.referencePackageFunction(TransformerUtil.kt:268)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.js.AtomicfuJsIrTransformer$AtomicTransformer.getRuntimeFunctionSymbol(AtomicfuJsIrTransformer.kt:414)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.js.AtomicfuJsIrTransformer$AtomicTransformer.inlineAtomicFunction(AtomicfuJsIrTransformer.kt:330)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.js.AtomicfuJsIrTransformer$AtomicTransformer.visitCall(AtomicfuJsIrTransformer.kt:180)
at org.jetbrains.kotlinx.atomicfu.compiler.backend.js.AtomicfuJsIrTransformer$AtomicTransformer.visitCall(AtomicfuJsIrTransformer.kt:104)
at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:26)
Note that I have:
# AtomicFU transformation via compiler plugin
kotlinx.atomicfu.enableJsIrTransformation = true
kotlinx.atomicfu.enableJvmIrTransformation = true
kotlinx.atomicfu.enableNativeIrTransformations = true
Hi!
kotlinx-atomicfu does not support minusAssign operator for atomics. Please use decrementAndGet() function instead:
val position: AtomicInt = atomic(1)
// ...
val newValue = position.decrementAndGet()
Thanks @mvicsokolova. I ended up using the underlying getAndAdd function.
I did use minusAssign and plusAssign, as they're part of the AtomicInt API.
Maybe removing them would be better.