// FILE: annotation.kt package kotlin.native.concurrent @Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS) @Retention(AnnotationRetention.BINARY) annotation class ThreadLocal // FILE: test.kt import kotlin.native.concurrent.ThreadLocal import kotlin.reflect.KProperty class Delegate { val value: Int = 10 operator fun getValue(thisRef: Any?, property: KProperty<*>): Int { return value } operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) { } } class AtomicInt(var value: Int) object Foo { var field1: Int = 10 val backer2 = AtomicInt(0) var field2: Int get() = backer2.value set(value: Int) { backer2.value = value } } object Foo1 { var field1: Int = 10 set(value: Int) { backer2.value = value } val backer2 = AtomicInt(0) } object WithDelegate { var field1: Int by Delegate() } @ThreadLocal object Bar { var field1: Int = 10 var field2: String? = null } class Foo2 { companion object { var field1: Int = 10 val backer2 = AtomicInt(0) var field2: Int get() = backer2.value set(value: Int) { backer2.value = value } } } class Bar2 { @ThreadLocal companion object { var field1: Int = 10 var field2: String? = null } } @ThreadLocal enum class Color(var rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) } enum class Color1(var rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF); init { this.rgb += 1 } } @ThreadLocal var a = 3 enum class Color2() { RED(), GREEN(), BLUE(); var rgb: Int = 2 set(value: Int) { a = value } } enum class Color3() { RED(), GREEN(), BLUE(); var field1: Int by Delegate() } enum class Color4 { RED { var a = 2 override fun foo() { a = 42 } }, GREEN, BLUE; open fun foo() {} } var topLevelProperty = "Global var"