kotlinx.serialization icon indicating copy to clipboard operation
kotlinx.serialization copied to clipboard

Transient atomic field not found

Open recursive-rat4 opened this issue 1 year ago • 3 comments

Describe the bug The automatic serializer throws on transient atomic fields, but manually written one works.

java.lang.NoSuchFieldError: Class ninja.blacknet.db.PeerDB$Entry does not have member field 'kotlinx.atomicfu.AtomicBoolean inContact'
	at ninja.blacknet.db.PeerDB$Entry.<init>(PeerDB.kt:356)
	at ninja.blacknet.db.PeerDB$Entry$$serializer.deserialize(PeerDB.kt:356)
	at ninja.blacknet.db.PeerDB$Entry$$serializer.deserialize(PeerDB.kt:356)
	at ninja.blacknet.serialization.bbf.BinaryFormat.decodeFromPacket(BinaryFormat.kt:31)
	at ninja.blacknet.serialization.bbf.BinaryFormat.decodeFromByteArray(BinaryFormat.kt:26)
	at ninja.blacknet.db.PeerDBTest.entry(PeerDBTest.kt:44)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)

To Reproduce

@Serializable
class Entry(
    /* ... */
) {
    @Transient
    private val inContact = atomic(false)
}

Expected behavior

Environment

  • Kotlin version: 1.9.22
  • Library version: 1.6.3
  • Kotlin platforms: JVM
  • Atomicfu version: 0.23.2

recursive-rat4 avatar Feb 21 '24 16:02 recursive-rat4

It looks like some misunderstanding between serialization and atomicfu plugins. As far as I remember, atomicfu actually removes inContact field from the class. @mvicsokolova Can you take a look at this?

sandwwraith avatar Feb 22 '24 13:02 sandwwraith

Indeed, the exception happens if atomicfu transforms IR, but post-compilation transformation works.

recursive-rat4 avatar Mar 04 '24 18:03 recursive-rat4

I'm looking at this problem, kotlinx-atomicfu plugin replaces inContact field with a volatile property, that is atomically updated. Probably some metadata was left. 👀

mvicsokolova avatar Mar 05 '24 08:03 mvicsokolova