[atomicfu-JVM] Preparation for commonization of JVM and K/N transformers
The following updates in the JVM/IR plugin were made: * Lots of refactoring with preparation for K/N support: commonization of transformations. * Improved error handling (checks for visibility constraints, appending message about usage constraints in case of an error). * Explicit requirements for the visibility of atomic properties: to prevent leaking they should be private/internal or be members of private/internal classes. * Fixed visibility of generated properties: volatile properties are always private and atomic updaters have the same visibility as the original atomic property. * Volatile fields are generated from scratch and original atomic properties are removed. * Delegated properties support is fixed (only declaration in the same scope is allowed). * Non-inline atomic extensions are forbidden. * For top-level atomics: only one wrapper class per file (with corresponding visibility) is generated. * Bug fixes. The corresponding tickets: https://github.com/Kotlin/kotlinx-atomicfu/issues/322 KT-60528 Merge-request: KT-MR-10579 Merged-by: Maria Sokolova <maria.sokolova@jetbrains.com>
This commit is contained in:
+67
@@ -0,0 +1,67 @@
|
||||
import kotlinx.atomicfu.*
|
||||
import kotlin.test.*
|
||||
import kotlin.random.*
|
||||
|
||||
private object Provider {
|
||||
private val port = atomic(Random.nextInt(20, 90) * 100)
|
||||
fun next(): Int = port.incrementAndGet()
|
||||
|
||||
private val _l = atomic(2424920024888888848)
|
||||
fun getL() = _l.incrementAndGet()
|
||||
|
||||
val _ref = atomic<String?>(null)
|
||||
|
||||
val _x = atomic(false)
|
||||
|
||||
val intArr = AtomicIntArray(10)
|
||||
val longArr = AtomicLongArray(10)
|
||||
val refArr = atomicArrayOfNulls<Any?>(5)
|
||||
}
|
||||
|
||||
private object DelegatedProvider {
|
||||
internal val _a = atomic(42)
|
||||
var a: Int by _a
|
||||
|
||||
var vInt by atomic(77)
|
||||
}
|
||||
|
||||
private fun testFieldInObject() {
|
||||
val port = Provider.next()
|
||||
assertEquals(port + 1, Provider.next())
|
||||
|
||||
assertEquals(2424920024888888849, Provider.getL())
|
||||
|
||||
Provider._ref.compareAndSet(null, "abc")
|
||||
assertEquals("abc", Provider._ref.value)
|
||||
|
||||
assertFalse(Provider._x.value)
|
||||
|
||||
Provider.intArr[8].value = 454
|
||||
assertEquals(455, Provider.intArr[8].incrementAndGet())
|
||||
|
||||
Provider.longArr[8].value = 4544096409680468
|
||||
assertEquals(4544096409680470, Provider.longArr[8].addAndGet(2))
|
||||
|
||||
Provider.refArr[1].value = Provider._ref.value
|
||||
assertEquals("abc", Provider.refArr[1].value)
|
||||
}
|
||||
|
||||
private fun testDelegatedPropertiesInObject() {
|
||||
assertEquals(42, DelegatedProvider.a)
|
||||
DelegatedProvider._a.compareAndSet(42, 56)
|
||||
assertEquals(56, DelegatedProvider.a)
|
||||
DelegatedProvider.a = 77
|
||||
DelegatedProvider._a.compareAndSet(77, 66)
|
||||
assertEquals(66, DelegatedProvider._a.value)
|
||||
assertEquals(66, DelegatedProvider.a)
|
||||
|
||||
assertEquals(77, DelegatedProvider.vInt)
|
||||
DelegatedProvider.vInt = 55
|
||||
assertEquals(110, DelegatedProvider.vInt * 2)
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
testFieldInObject()
|
||||
testDelegatedPropertiesInObject()
|
||||
return "OK"
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
@kotlin.Metadata
|
||||
synthetic final class DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private {
|
||||
// source: 'FieldInObjectTest.kt'
|
||||
private synthetic final static field _a$volatile$FU: java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic volatile field _a$volatile: int
|
||||
static method <clinit>(): void
|
||||
private method <init>(): void
|
||||
public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||
public synthetic final static method access$get_a$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
public synthetic final static method access$get_a$volatile$p(p0: DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private): int
|
||||
public synthetic final static method access$set_a$volatile$p(p0: DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private, p1: int): void
|
||||
private synthetic final static method get_a$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final method get_a$volatile(): int
|
||||
private synthetic final method set_a$volatile(p0: int): void
|
||||
private synthetic inner class DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
final class DelegatedProvider {
|
||||
// source: 'FieldInObjectTest.kt'
|
||||
public final static @org.jetbrains.annotations.NotNull field INSTANCE: DelegatedProvider
|
||||
private synthetic final static field delegatedProvider$VolatileWrapper$atomicfu$private: DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private
|
||||
private synthetic volatile field vInt$volatile: int
|
||||
static method <clinit>(): void
|
||||
private method <init>(): void
|
||||
public synthetic final static method access$getDelegatedProvider$VolatileWrapper$atomicfu$private(): DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private
|
||||
public final method getA(): int
|
||||
private synthetic final static method getDelegatedProvider$VolatileWrapper$atomicfu$private(): DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private
|
||||
public final method getVInt(): int
|
||||
public final method setA(p0: int): void
|
||||
public final method setVInt(p0: int): void
|
||||
private synthetic inner class DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class FieldInObjectTestKt {
|
||||
// source: 'FieldInObjectTest.kt'
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
private final static method testDelegatedPropertiesInObject(): void
|
||||
private final static method testFieldInObject(): void
|
||||
private synthetic inner class DelegatedProvider$DelegatedProvider$VolatileWrapper$atomicfu$private
|
||||
private synthetic inner class Provider$Provider$VolatileWrapper$atomicfu$private
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class Provider$Provider$VolatileWrapper$atomicfu$private {
|
||||
// source: 'FieldInObjectTest.kt'
|
||||
private synthetic final static field _l$volatile$FU: java.util.concurrent.atomic.AtomicLongFieldUpdater
|
||||
private synthetic volatile field _l$volatile: long
|
||||
private synthetic final static field _ref$volatile$FU: java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic volatile field _ref$volatile: java.lang.Object
|
||||
private synthetic final static field _x$volatile$FU: java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic volatile field _x$volatile: int
|
||||
private synthetic final static field port$volatile$FU: java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic volatile field port$volatile: int
|
||||
static method <clinit>(): void
|
||||
private method <init>(): void
|
||||
public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||
public synthetic final static method access$getPort$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
public synthetic final static method access$get_l$volatile$FU(): java.util.concurrent.atomic.AtomicLongFieldUpdater
|
||||
public synthetic final static method access$get_ref$volatile$FU(): java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
public synthetic final static method access$get_x$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final static method getPort$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final method getPort$volatile(): int
|
||||
private synthetic final static method get_l$volatile$FU(): java.util.concurrent.atomic.AtomicLongFieldUpdater
|
||||
private synthetic final method get_l$volatile(): long
|
||||
private synthetic final static method get_ref$volatile$FU(): java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic final method get_ref$volatile(): java.lang.Object
|
||||
private synthetic final static method get_x$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final method get_x$volatile(): int
|
||||
private synthetic final method setPort$volatile(p0: int): void
|
||||
private synthetic final method set_l$volatile(p0: long): void
|
||||
private synthetic final method set_ref$volatile(p0: java.lang.Object): void
|
||||
private synthetic final method set_x$volatile(p0: int): void
|
||||
private synthetic inner class Provider$Provider$VolatileWrapper$atomicfu$private
|
||||
public final inner class kotlin/random/Random$Default
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
final class Provider {
|
||||
// source: 'FieldInObjectTest.kt'
|
||||
public final static @org.jetbrains.annotations.NotNull field INSTANCE: Provider
|
||||
private synthetic final static field intArr: java.util.concurrent.atomic.AtomicIntegerArray
|
||||
private synthetic final static field longArr: java.util.concurrent.atomic.AtomicLongArray
|
||||
private synthetic final static field provider$VolatileWrapper$atomicfu$private: Provider$Provider$VolatileWrapper$atomicfu$private
|
||||
private synthetic final static field refArr: java.util.concurrent.atomic.AtomicReferenceArray
|
||||
static method <clinit>(): void
|
||||
private method <init>(): void
|
||||
public synthetic final static method access$getProvider$VolatileWrapper$atomicfu$private(): Provider$Provider$VolatileWrapper$atomicfu$private
|
||||
public synthetic final method getIntArr(): java.util.concurrent.atomic.AtomicIntegerArray
|
||||
public final method getL(): long
|
||||
public synthetic final method getLongArr(): java.util.concurrent.atomic.AtomicLongArray
|
||||
private synthetic final static method getProvider$VolatileWrapper$atomicfu$private(): Provider$Provider$VolatileWrapper$atomicfu$private
|
||||
public synthetic final method getRefArr(): java.util.concurrent.atomic.AtomicReferenceArray
|
||||
public final method next(): int
|
||||
private synthetic inner class Provider$Provider$VolatileWrapper$atomicfu$private
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
import kotlinx.atomicfu.*
|
||||
import kotlin.test.*
|
||||
|
||||
private val a = atomic(0)
|
||||
private val b = atomic(2424920024888888848)
|
||||
private val c = atomic(true)
|
||||
private val abcNode = atomic(ANode(BNode(CNode(8))))
|
||||
private val any = atomic<Any?>(null)
|
||||
|
||||
internal val a_internal = atomic(0)
|
||||
internal val b_internal = atomic(2424920024888888848)
|
||||
internal val c_internal = atomic(true)
|
||||
internal val abcNode_internal = atomic(ANode(BNode(CNode(8))))
|
||||
internal val any_internal = atomic<Any?>(null)
|
||||
|
||||
private val intArr = AtomicIntArray(3)
|
||||
private val longArr = AtomicLongArray(5)
|
||||
private val booleanArr = AtomicBooleanArray(4)
|
||||
private val refArr = atomicArrayOfNulls<ANode<BNode<CNode>>>(5)
|
||||
private val anyRefArr = atomicArrayOfNulls<Any>(10)
|
||||
|
||||
private val stringAtomicNullArr = atomicArrayOfNulls<String>(10)
|
||||
|
||||
class TopLevelPrimitiveTest {
|
||||
|
||||
fun testTopLevelInt() {
|
||||
assertEquals(0, a.value)
|
||||
assertEquals(0, a.getAndSet(3))
|
||||
assertTrue(a.compareAndSet(3, 8))
|
||||
a.lazySet(1)
|
||||
assertEquals(1, a.value)
|
||||
assertEquals(1, a.getAndSet(2))
|
||||
assertEquals(2, a.value)
|
||||
assertEquals(2, a.getAndIncrement())
|
||||
assertEquals(3, a.value)
|
||||
assertEquals(3, a.getAndDecrement())
|
||||
assertEquals(2, a.value)
|
||||
assertEquals(2, a.getAndAdd(2))
|
||||
assertEquals(4, a.value)
|
||||
assertEquals(7, a.addAndGet(3))
|
||||
assertEquals(7, a.value)
|
||||
assertEquals(8, a.incrementAndGet())
|
||||
assertEquals(8, a.value)
|
||||
assertEquals(7, a.decrementAndGet())
|
||||
assertEquals(7, a.value)
|
||||
assertTrue(a.compareAndSet(7, 10))
|
||||
}
|
||||
|
||||
fun testTopLevelLong() {
|
||||
assertEquals(2424920024888888848, b.value)
|
||||
b.lazySet(8424920024888888848)
|
||||
assertEquals(8424920024888888848, b.value)
|
||||
assertEquals(8424920024888888848, b.getAndSet(8924920024888888848))
|
||||
assertEquals(8924920024888888848, b.value)
|
||||
assertEquals(8924920024888888849, b.incrementAndGet())
|
||||
assertEquals(8924920024888888849, b.value)
|
||||
assertEquals(8924920024888888849, b.getAndDecrement())
|
||||
assertEquals(8924920024888888848, b.value)
|
||||
assertEquals(8924920024888888848, b.getAndAdd(100000000000000000))
|
||||
assertEquals(9024920024888888848, b.value)
|
||||
assertEquals(-198452011965886959, b.addAndGet(-9223372036854775807))
|
||||
assertEquals(-198452011965886959, b.value)
|
||||
assertEquals(-198452011965886958, b.incrementAndGet())
|
||||
assertEquals(-198452011965886958, b.value)
|
||||
assertEquals(-198452011965886959, b.decrementAndGet())
|
||||
assertEquals(-198452011965886959, b.value)
|
||||
}
|
||||
|
||||
fun testTopLevelBoolean() {
|
||||
assertTrue(c.value)
|
||||
c.lazySet(false)
|
||||
assertFalse(c.value)
|
||||
assertTrue(!c.getAndSet(true))
|
||||
assertTrue(c.compareAndSet(true, false))
|
||||
assertFalse(c.value)
|
||||
}
|
||||
|
||||
fun testTopLevelRef() {
|
||||
assertEquals(8, abcNode.value.b.c.d)
|
||||
val newNode = ANode(BNode(CNode(76)))
|
||||
assertEquals(8, abcNode.getAndSet(newNode).b.c.d)
|
||||
assertEquals(76, abcNode.value.b.c.d)
|
||||
val l = IntArray(4){i -> i}
|
||||
any.lazySet(l)
|
||||
assertEquals(2, (any.value as IntArray)[2])
|
||||
}
|
||||
|
||||
fun testTopLevelArrayOfNulls() {
|
||||
assertEquals(null, stringAtomicNullArr[0].value)
|
||||
assertTrue(stringAtomicNullArr[0].compareAndSet(null, "aa"))
|
||||
stringAtomicNullArr[1].lazySet("aa")
|
||||
assertTrue(stringAtomicNullArr[0].value == stringAtomicNullArr[1].value)
|
||||
}
|
||||
}
|
||||
|
||||
class TopLevelArrayTest {
|
||||
|
||||
fun testIntArray() {
|
||||
assertTrue(intArr[0].compareAndSet(0, 3))
|
||||
assertEquals(0, intArr[1].value)
|
||||
intArr[0].lazySet(5)
|
||||
assertEquals(5, intArr[0].value + intArr[1].value + intArr[2].value)
|
||||
assertTrue(intArr[0].compareAndSet(5, 10))
|
||||
assertEquals(10, intArr[0].getAndDecrement())
|
||||
assertEquals(9, intArr[0].value)
|
||||
intArr[2].value = 2
|
||||
assertEquals(2, intArr[2].value)
|
||||
assertTrue(intArr[2].compareAndSet(2, 34))
|
||||
assertEquals(34, intArr[2].value)
|
||||
}
|
||||
|
||||
fun testLongArray() {
|
||||
longArr[0].value = 2424920024888888848
|
||||
assertEquals(2424920024888888848, longArr[0].value)
|
||||
longArr[0].lazySet(8424920024888888848)
|
||||
assertEquals(8424920024888888848, longArr[0].value)
|
||||
val ac = longArr[0].value
|
||||
longArr[3].value = ac
|
||||
assertEquals(8424920024888888848, longArr[3].getAndSet(8924920024888888848))
|
||||
assertEquals(8924920024888888848, longArr[3].value)
|
||||
val ac1 = longArr[3].value
|
||||
longArr[4].value = ac1
|
||||
assertEquals(8924920024888888849, longArr[4].incrementAndGet())
|
||||
assertEquals(8924920024888888849, longArr[4].value)
|
||||
assertEquals(8924920024888888849, longArr[4].getAndDecrement())
|
||||
assertEquals(8924920024888888848, longArr[4].value)
|
||||
longArr[4].value = 8924920024888888848
|
||||
assertEquals(8924920024888888848, longArr[4].getAndAdd(100000000000000000))
|
||||
val ac2 = longArr[4].value
|
||||
longArr[1].value = ac2
|
||||
assertEquals(9024920024888888848, longArr[1].value)
|
||||
assertEquals(-198452011965886959, longArr[1].addAndGet(-9223372036854775807))
|
||||
assertEquals(-198452011965886959, longArr[1].value)
|
||||
assertEquals(-198452011965886958, longArr[1].incrementAndGet())
|
||||
assertEquals(-198452011965886958, longArr[1].value)
|
||||
assertEquals(-198452011965886959, longArr[1].decrementAndGet())
|
||||
assertEquals(-198452011965886959, longArr[1].value)
|
||||
}
|
||||
|
||||
fun testBooleanArray() {
|
||||
assertFalse(booleanArr[1].value)
|
||||
booleanArr[1].compareAndSet(false, true)
|
||||
booleanArr[0].lazySet(true)
|
||||
assertFalse(booleanArr[2].getAndSet(true))
|
||||
assertTrue(booleanArr[0].value && booleanArr[1].value && booleanArr[2].value)
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun testRefArray() {
|
||||
val a2 = ANode(BNode(CNode(2)))
|
||||
val a3 = ANode(BNode(CNode(3)))
|
||||
refArr[0].value = a2
|
||||
assertEquals(2, refArr[0].value!!.b.c.d)
|
||||
assertTrue(refArr[0].compareAndSet(a2, a3))
|
||||
assertEquals(3, refArr[0].value!!.b.c.d)
|
||||
val r0 = refArr[0].value
|
||||
refArr[3].value = r0
|
||||
assertEquals(3, refArr[3].value!!.b.c.d)
|
||||
val a = abcNode.value
|
||||
assertTrue(refArr[3].compareAndSet(a3, a))
|
||||
}
|
||||
}
|
||||
|
||||
data class ANode<T>(val b: T)
|
||||
data class BNode<T>(val c: T)
|
||||
data class CNode(val d: Int)
|
||||
|
||||
fun box(): String {
|
||||
val primitiveTest = TopLevelPrimitiveTest()
|
||||
primitiveTest.testTopLevelInt()
|
||||
primitiveTest.testTopLevelLong()
|
||||
primitiveTest.testTopLevelBoolean()
|
||||
primitiveTest.testTopLevelRef()
|
||||
primitiveTest.testTopLevelArrayOfNulls()
|
||||
|
||||
val arrayTest = TopLevelArrayTest()
|
||||
arrayTest.testIntArray()
|
||||
arrayTest.testLongArray()
|
||||
arrayTest.testBooleanArray()
|
||||
arrayTest.testRefArray()
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
@kotlin.Metadata
|
||||
public final class ANode {
|
||||
// source: 'TopLevelTest.kt'
|
||||
private final field b: java.lang.Object
|
||||
public method <init>(p0: java.lang.Object): void
|
||||
public final method component1(): java.lang.Object
|
||||
public synthetic static method copy$default(p0: ANode, p1: java.lang.Object, p2: int, p3: java.lang.Object): ANode
|
||||
public final @org.jetbrains.annotations.NotNull method copy(p0: java.lang.Object): ANode
|
||||
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||
public final method getB(): java.lang.Object
|
||||
public method hashCode(): int
|
||||
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class BNode {
|
||||
// source: 'TopLevelTest.kt'
|
||||
private final field c: java.lang.Object
|
||||
public method <init>(p0: java.lang.Object): void
|
||||
public final method component1(): java.lang.Object
|
||||
public synthetic static method copy$default(p0: BNode, p1: java.lang.Object, p2: int, p3: java.lang.Object): BNode
|
||||
public final @org.jetbrains.annotations.NotNull method copy(p0: java.lang.Object): BNode
|
||||
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||
public final method getC(): java.lang.Object
|
||||
public method hashCode(): int
|
||||
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class CNode {
|
||||
// source: 'TopLevelTest.kt'
|
||||
private final field d: int
|
||||
public method <init>(p0: int): void
|
||||
public final method component1(): int
|
||||
public synthetic static method copy$default(p0: CNode, p1: int, p2: int, p3: java.lang.Object): CNode
|
||||
public final @org.jetbrains.annotations.NotNull method copy(p0: int): CNode
|
||||
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||
public final method getD(): int
|
||||
public method hashCode(): int
|
||||
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class TopLevelArrayTest {
|
||||
// source: 'TopLevelTest.kt'
|
||||
public method <init>(): void
|
||||
public final method testBooleanArray(): void
|
||||
public final method testIntArray(): void
|
||||
public final method testLongArray(): void
|
||||
public final method testRefArray(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class TopLevelPrimitiveTest {
|
||||
// source: 'TopLevelTest.kt'
|
||||
public method <init>(): void
|
||||
public final method testTopLevelArrayOfNulls(): void
|
||||
public final method testTopLevelBoolean(): void
|
||||
public final method testTopLevelInt(): void
|
||||
public final method testTopLevelLong(): void
|
||||
public final method testTopLevelRef(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public synthetic final class TopLevelTest$VolatileWrapper$atomicfu$internal {
|
||||
// source: 'TopLevelTest.kt'
|
||||
private synthetic final static field a_internal$volatile$FU: java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic volatile field a_internal$volatile: int
|
||||
private synthetic final static field abcNode_internal$volatile$FU: java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic volatile field abcNode_internal$volatile: java.lang.Object
|
||||
private synthetic final static field any_internal$volatile$FU: java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic volatile field any_internal$volatile: java.lang.Object
|
||||
private synthetic final static field b_internal$volatile$FU: java.util.concurrent.atomic.AtomicLongFieldUpdater
|
||||
private synthetic volatile field b_internal$volatile: long
|
||||
private synthetic final static field c_internal$volatile$FU: java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic volatile field c_internal$volatile: int
|
||||
static method <clinit>(): void
|
||||
private method <init>(): void
|
||||
public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||
public synthetic final static method getA_internal$volatile$FU$main(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final method getA_internal$volatile(): int
|
||||
public synthetic final static method getAbcNode_internal$volatile$FU$main(): java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic final method getAbcNode_internal$volatile(): java.lang.Object
|
||||
public synthetic final static method getAny_internal$volatile$FU$main(): java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic final method getAny_internal$volatile(): java.lang.Object
|
||||
public synthetic final static method getB_internal$volatile$FU$main(): java.util.concurrent.atomic.AtomicLongFieldUpdater
|
||||
private synthetic final method getB_internal$volatile(): long
|
||||
public synthetic final static method getC_internal$volatile$FU$main(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final method getC_internal$volatile(): int
|
||||
private synthetic final method setA_internal$volatile(p0: int): void
|
||||
private synthetic final method setAbcNode_internal$volatile(p0: java.lang.Object): void
|
||||
private synthetic final method setAny_internal$volatile(p0: java.lang.Object): void
|
||||
private synthetic final method setB_internal$volatile(p0: long): void
|
||||
private synthetic final method setC_internal$volatile(p0: int): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class TopLevelTest$VolatileWrapper$atomicfu$private {
|
||||
// source: 'TopLevelTest.kt'
|
||||
private synthetic final static field a$volatile$FU: java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic volatile field a$volatile: int
|
||||
private synthetic final static field abcNode$volatile$FU: java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic volatile field abcNode$volatile: java.lang.Object
|
||||
private synthetic final static field any$volatile$FU: java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic volatile field any$volatile: java.lang.Object
|
||||
private synthetic final static field b$volatile$FU: java.util.concurrent.atomic.AtomicLongFieldUpdater
|
||||
private synthetic volatile field b$volatile: long
|
||||
private synthetic final static field c$volatile$FU: java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic volatile field c$volatile: int
|
||||
static method <clinit>(): void
|
||||
private method <init>(): void
|
||||
public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||
public synthetic final static method access$getA$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
public synthetic final static method access$getAbcNode$volatile$FU(): java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
public synthetic final static method access$getAny$volatile$FU(): java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
public synthetic final static method access$getB$volatile$FU(): java.util.concurrent.atomic.AtomicLongFieldUpdater
|
||||
public synthetic final static method access$getC$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final static method getA$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final method getA$volatile(): int
|
||||
private synthetic final static method getAbcNode$volatile$FU(): java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic final method getAbcNode$volatile(): java.lang.Object
|
||||
private synthetic final static method getAny$volatile$FU(): java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
private synthetic final method getAny$volatile(): java.lang.Object
|
||||
private synthetic final static method getB$volatile$FU(): java.util.concurrent.atomic.AtomicLongFieldUpdater
|
||||
private synthetic final method getB$volatile(): long
|
||||
private synthetic final static method getC$volatile$FU(): java.util.concurrent.atomic.AtomicIntegerFieldUpdater
|
||||
private synthetic final method getC$volatile(): int
|
||||
private synthetic final method setA$volatile(p0: int): void
|
||||
private synthetic final method setAbcNode$volatile(p0: java.lang.Object): void
|
||||
private synthetic final method setAny$volatile(p0: java.lang.Object): void
|
||||
private synthetic final method setB$volatile(p0: long): void
|
||||
private synthetic final method setC$volatile(p0: int): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class TopLevelTestKt {
|
||||
// source: 'TopLevelTest.kt'
|
||||
private synthetic final static field anyRefArr: java.util.concurrent.atomic.AtomicReferenceArray
|
||||
private synthetic final static field booleanArr: java.util.concurrent.atomic.AtomicIntegerArray
|
||||
private synthetic final static field intArr: java.util.concurrent.atomic.AtomicIntegerArray
|
||||
private synthetic final static field longArr: java.util.concurrent.atomic.AtomicLongArray
|
||||
private synthetic final static field refArr: java.util.concurrent.atomic.AtomicReferenceArray
|
||||
private synthetic final static field stringAtomicNullArr: java.util.concurrent.atomic.AtomicReferenceArray
|
||||
private synthetic final static field topLevelTest$VolatileWrapper$atomicfu$internal: TopLevelTest$VolatileWrapper$atomicfu$internal
|
||||
private synthetic final static field topLevelTest$VolatileWrapper$atomicfu$private: TopLevelTest$VolatileWrapper$atomicfu$private
|
||||
static method <clinit>(): void
|
||||
public synthetic final static method access$getBooleanArr(): java.util.concurrent.atomic.AtomicIntegerArray
|
||||
public synthetic final static method access$getIntArr(): java.util.concurrent.atomic.AtomicIntegerArray
|
||||
public synthetic final static method access$getLongArr(): java.util.concurrent.atomic.AtomicLongArray
|
||||
public synthetic final static method access$getRefArr(): java.util.concurrent.atomic.AtomicReferenceArray
|
||||
public synthetic final static method access$getStringAtomicNullArr(): java.util.concurrent.atomic.AtomicReferenceArray
|
||||
public synthetic final static method access$getTopLevelTest$VolatileWrapper$atomicfu$private(): TopLevelTest$VolatileWrapper$atomicfu$private
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
private synthetic final static method getAnyRefArr(): java.util.concurrent.atomic.AtomicReferenceArray
|
||||
private synthetic final static method getBooleanArr(): java.util.concurrent.atomic.AtomicIntegerArray
|
||||
private synthetic final static method getIntArr(): java.util.concurrent.atomic.AtomicIntegerArray
|
||||
private synthetic final static method getLongArr(): java.util.concurrent.atomic.AtomicLongArray
|
||||
private synthetic final static method getRefArr(): java.util.concurrent.atomic.AtomicReferenceArray
|
||||
private synthetic final static method getStringAtomicNullArr(): java.util.concurrent.atomic.AtomicReferenceArray
|
||||
public synthetic final static method getTopLevelTest$VolatileWrapper$atomicfu$internal(): TopLevelTest$VolatileWrapper$atomicfu$internal
|
||||
private synthetic final static method getTopLevelTest$VolatileWrapper$atomicfu$private(): TopLevelTest$VolatileWrapper$atomicfu$private
|
||||
}
|
||||
Reference in New Issue
Block a user