blob: e5cf12f7bac459f0486c773ebec95f17b25e8777 [file]
import kotlinx.atomicfu.*
import kotlin.test.*
class A {
<!PUBLIC_ATOMICS_ARE_FORBIDDEN!>public<!> val a = atomic(true)
@PublishedApi <!PUBLISHED_API_ATOMICS_ARE_FORBIDDEN!>internal<!> val b = atomic(false)
<!PUBLIC_ATOMICS_ARE_FORBIDDEN!>public<!> <!ATOMIC_PROPERTIES_SHOULD_BE_VAL!>var<!> c = atomic(false)
internal val d = atomic(0)
public inline fun update(newValue: Boolean, lambda: (Boolean) -> Unit) {
val oldValue = b.getAndSet(newValue)
lambda(oldValue)
}
}
@PublishedApi
internal class A1 {
val <!PUBLISHED_API_ATOMICS_ARE_FORBIDDEN!>a<!> = atomic(0)
@PublishedApi <!PUBLISHED_API_ATOMICS_ARE_FORBIDDEN!>internal<!> val b = atomic(false)
internal val c = atomic(0)
}
internal class A2 {
val a = atomic(0)
@PublishedApi internal val b = atomic(0)
internal val c = atomic(0)
}
private class A3 {
val a = atomic(0)
@PublishedApi internal val b = atomic(0)
internal val c = atomic(0)
}
abstract class Base {
val <!PUBLIC_ATOMICS_ARE_FORBIDDEN!>a<!> = atomic(0)
@PublishedApi <!PUBLISHED_API_ATOMICS_ARE_FORBIDDEN!>internal<!> val b = atomic(0)
internal val c = atomic(0)
<!PUBLIC_ATOMICS_ARE_FORBIDDEN!>protected<!> val d = atomic(0)
protected class Nested {
val <!PUBLIC_ATOMICS_ARE_FORBIDDEN!>nestedA<!> = atomic(0)
@PublishedApi <!PUBLISHED_API_ATOMICS_ARE_FORBIDDEN!>internal<!> val nestedB = atomic(0)
internal val nestedC = atomic(0)
<!PUBLIC_ATOMICS_ARE_FORBIDDEN!>protected<!> val nestedD = atomic(0)
}
}
fun box(): String {
val aClass = A()
aClass.update(true) { i -> assertFalse(i) }
return "OK"
}