diff --git a/libraries/stdlib/src/kotlin/properties/delegation/Delegation.kt b/libraries/stdlib/src/kotlin/properties/delegation/Delegation.kt deleted file mode 100644 index fe4dbb05a6d..00000000000 --- a/libraries/stdlib/src/kotlin/properties/delegation/Delegation.kt +++ /dev/null @@ -1,118 +0,0 @@ -package kotlin.properties.delegation - -import kotlin.properties.ChangeSupport - -public class NotNullVar { - private var value: T? = null - - public fun get(thisRef: Any?, desc: PropertyMetadata): T { - return value ?: throw IllegalStateException("Property ${desc.name} should be initialized before get") - } - - public fun set(thisRef: Any?, desc: PropertyMetadata, value: T) { - this.value = value - } -} - -public class SynchronizedVar(private val initValue: T, private val lock: Any) { - private var value: T = initValue - - public fun get(thisRef: Any?, desc: PropertyMetadata): T { - return synchronized(lock) { value } - } - - public fun set(thisRef: Any?, desc: PropertyMetadata, newValue: T) { - synchronized(lock) { - value = newValue - } - } -} - -class ObservableProperty(initialValue: T, val changeSupport: (name: String, oldValue: T, newValue: T) -> Unit) { - private var value = initialValue - - public fun get(thisRef: Any?, desc: PropertyMetadata): T { - return value - } - - public fun set(thisRef: Any?, desc: PropertyMetadata, newValue: T) { - changeSupport(desc.name, value, newValue) - value = newValue - } -} - -public class KeyMissingException(message: String): RuntimeException(message) - -public abstract class MapVal { - public abstract fun getMap(thisRef: T): Map<*, *> - public abstract fun getKey(desc: PropertyMetadata): Any? - - public open fun getDefaultValue(desc: PropertyMetadata, key: Any?): V { - throw KeyMissingException("Key $key is missing") - } - - public fun get(thisRef: T, desc: PropertyMetadata): V { - val key = getKey(desc) - val map = getMap(thisRef) - if (!map.containsKey(key)) { - return getDefaultValue(desc, key) - } - return map[key] as V - } -} - -public abstract class MapVar: MapVal() { - - public fun set(thisRef: T, desc: PropertyMetadata, newValue: V) { - val map = getMap(thisRef) as MutableMap - map[getKey(desc)] = newValue - } -} - -public fun Map.readOnlyProperty(default: (() -> V)? = null): MapVal { - return object: MapVal() { - override fun getMap(thisRef: Any?) = this@readOnlyProperty - override fun getKey(desc: PropertyMetadata) = desc.name - override fun getDefaultValue(desc: PropertyMetadata, key: Any?) = if (default == null) super.getDefaultValue(desc, key) else default() - } -} - -public fun Map<*, *>.readOnlyProperty(default: (() -> V)? = null, key: Any?): MapVal { - return object: MapVal() { - override fun getMap(thisRef: Any?) = this@readOnlyProperty - override fun getKey(desc: PropertyMetadata) = key - override fun getDefaultValue(desc: PropertyMetadata, key: Any?) = if (default == null) super.getDefaultValue(desc, key) else default() - } -} - -public fun Map<*, *>.readOnlyProperty(default: (() -> V)? = null, key: (desc: PropertyMetadata) -> Any?): MapVal { - return object: MapVal() { - override fun getMap(thisRef: Any?) = this@readOnlyProperty - override fun getKey(desc: PropertyMetadata) = key(desc) - override fun getDefaultValue(desc: PropertyMetadata, key: Any?) = if (default == null) super.getDefaultValue(desc, key) else default() - } -} - -public fun MutableMap.property(default: (() -> V)? = null): MapVar { - return object: MapVar() { - override fun getMap(thisRef: Any?) = this@property - override fun getKey(desc: PropertyMetadata) = desc.name - override fun getDefaultValue(desc: PropertyMetadata, key: Any?) = if (default == null) super.getDefaultValue(desc, key) else default() - } -} - -public fun MutableMap<*, *>.property(default: (() -> V)? = null, key: Any?): MapVar { - return object: MapVar() { - override fun getMap(thisRef: Any?) = this@property - override fun getKey(desc: PropertyMetadata) = key - override fun getDefaultValue(desc: PropertyMetadata, key: Any?) = if (default == null) super.getDefaultValue(desc, key) else default() - } -} - -public fun MutableMap<*, *>.property(default: (() -> V)? = null, key: (desc: PropertyMetadata) -> Any?): MapVar { - return object: MapVar() { - override fun getMap(thisRef: Any?) = this@property - override fun getKey(desc: PropertyMetadata) = key(desc) - override fun getDefaultValue(desc: PropertyMetadata, key: Any?) = if (default == null) super.getDefaultValue(desc, key) else default() - } -} \ No newline at end of file diff --git a/libraries/stdlib/src/kotlin/properties/delegation/lazy/LazyValues.kt b/libraries/stdlib/src/kotlin/properties/delegation/lazy/LazyValues.kt deleted file mode 100644 index 2d0767446d3..00000000000 --- a/libraries/stdlib/src/kotlin/properties/delegation/lazy/LazyValues.kt +++ /dev/null @@ -1,75 +0,0 @@ -package kotlin.properties.delegation.lazy - -private val NULL_VALUE: Any = Any() - -private fun escape(value: T): Any { - return if (value == null) NULL_VALUE else value -} - -private fun unescape(value: Any): T? { - return if (value == NULL_VALUE) null else value as T -} - -public open class LazyVal(initializer: () -> T): NullableLazyVal(initializer) { - override fun get(thisRef: Any?, desc: PropertyMetadata): T { - return super.get(thisRef, desc)!! - } -} - -public open class NullableLazyVal(private val initializer: () -> T?) { - private var value: Any? = null - - public open fun get(thisRef: Any?, desc: PropertyMetadata): T? { - if (value == null) { - value = escape(initializer()) - } - return unescape(value!!) - } -} - -public open class VolatileLazyVal(initializer: () -> T): VolatileNullableLazyVal(initializer) { - override fun get(thisRef: Any?, desc: PropertyMetadata): T { - return super.get(thisRef, desc)!! - } -} - -public open class VolatileNullableLazyVal(private val initializer: () -> T?) { - private volatile var value: Any? = null - - public open fun get(thisRef: Any?, desc: PropertyMetadata): T? { - if (value == null) { - value = escape(initializer()) - } - return unescape(value!!) - } -} - -public open class AtomicLazyVal(lock: Any? = null, initializer: () -> T): AtomicNullableLazyVal(lock, initializer) { - override fun get(thisRef: Any?, desc: PropertyMetadata): T { - return super.get(thisRef, desc)!! - } -} - -public open class AtomicNullableLazyVal(lock: Any? = null, private val initializer: () -> T?) { - private val lock = lock ?: this - private volatile var value: Any? = null - - public open fun get(thisRef: Any?, desc: PropertyMetadata): T? { - val _v1 = value - if (_v1 != null) { - return unescape(_v1) - } - - return synchronized(lock) { - val _v2 = value - if (_v2 != null) { - unescape(_v2) - } - else { - val typedValue = initializer() - value = escape(typedValue) - typedValue - } - } - } -} \ No newline at end of file