Drop deprecations: complicated map delegates and kotlin.support.AbstractIterator.

This commit is contained in:
Ilya Gorbunov
2016-01-15 22:23:47 +03:00
parent 4f1d2252f0
commit d1a5988bfc
3 changed files with 0 additions and 353 deletions
@@ -1,8 +0,0 @@
package kotlin.support
/**
* A base class to simplify implementing iterators so that implementations only have to implement [computeNext]
* to implement the iterator, calling [done] when the iteration is complete.
*/
@Deprecated("Use AbstractIterator from kotlin.collections instead.", ReplaceWith("kotlin.collections.AbstractIterator<T>"))
public abstract class AbstractIterator<T> : kotlin.collections.AbstractIterator<T>()
@@ -39,49 +39,6 @@ public object Delegates {
override fun beforeChange(property: KProperty<*>, oldValue: T, newValue: T): Boolean = onChange(property, oldValue, newValue)
}
/**
* Returns a property delegate for a read/write property that stores its value in a map, using the property name
* as a key.
* @param map the map where the property values are stored.
*/
@Deprecated("Delegate property to the map itself without creating a wrapper.", ReplaceWith("map"))
public fun <T> mapVar(map: MutableMap<in String, Any?>): ReadWriteProperty<Any?, T> {
return FixedMapVar<Any?, String, T>(map, propertyNameSelector, throwKeyNotFound)
}
/**
* Returns a property delegate for a read/write property that stores its value in a map, using the property name
* as a key.
* @param map the map where the property values are stored.
* @param default the function returning the value of the property for a given object if it's missing from the given map.
*/
@Deprecated("Complex scenarios of delegation to map are deprecated. Delegate to map itself.")
public fun <R, T> mapVar(map: MutableMap<in String, Any?>,
default: (thisRef: R, propertyName: String) -> T): ReadWriteProperty<R, T> {
return FixedMapVar<R, String, T>(map, propertyNameSelector, default)
}
/**
* Returns a property delegate for a read-only property that takes its value from a map, using the property name
* as a key.
* @param map the map where the property values are stored.
*/
@Deprecated("Delegate property to the map itself without creating a wrapper.", ReplaceWith("map"))
public fun <T> mapVal(map: Map<in String, Any?>): ReadOnlyProperty<Any?, T> {
return FixedMapVal<Any?, String, T>(map, propertyNameSelector, throwKeyNotFound)
}
/**
* Returns a property delegate for a read-only property that takes its value from a map, using the property name
* as a key.
* @param map the map where the property values are stored.
* @param default the function returning the value of the property for a given object if it's missing from the given map.
*/
@Deprecated("Complex scenarios of delegation to map are deprecated. Delegate to map itself.")
public fun <R, T> mapVal(map: Map<in String, Any?>,
default: (thisRef: R, propertyName: String) -> T): ReadOnlyProperty<R, T> {
return FixedMapVal<R, String, T>(map, propertyNameSelector, default)
}
}
@@ -131,114 +88,3 @@ public abstract class ObservableProperty<T>(initialValue: T) : ReadWriteProperty
afterChange(property, oldValue, value)
}
}
/**
* Implements the core logic for a property delegate that stores property values in a map.
* @param T the type of the object that owns the delegated property.
* @param K the type of key in the map.
* @param V the type of the property value.
*/
@Deprecated("Complex scenarios of delegation to map are deprecated. Delegate to map itself.")
public abstract class MapVal<T, K, out V>() : ReadOnlyProperty<T, V> {
/**
* Returns the map used to store the values of the properties of the given object instance.
* @param ref the object instance for which the map is requested.
*/
protected abstract fun map(ref: T): Map<in K, Any?>
/**
* Returns the map key used to store the values of the given property.
* @param property the property for which the key is requested.
*/
protected abstract fun key(property: KProperty<*>): K
/**
* Returns the property value to be used when the map does not contain the corresponding key.
* @param ref the object instance for which the value was requested.
* @param property the property for which the value was requested.
*/
protected open fun default(ref: T, property: KProperty<*>): V {
throw NoSuchElementException("The value for property ${property.name} is missing in $ref.")
}
public override fun getValue(thisRef: T, property: KProperty<*>) : V {
val map = map(thisRef)
val key = key(property)
return map.getOrElse(key, { default(thisRef, property) }) as V
}
}
/**
* Implements the core logic for a read/write property delegate that stores property values in a map.
* @param T the type of the object that owns the delegated property.
* @param K the type of key in the map.
* @param V the type of the property value.
*/
@Deprecated("Complex scenarios of delegation to map are deprecated. Delegate to map itself.")
public abstract class MapVar<T, K, V>() : MapVal<T, K, V>(), ReadWriteProperty<T, V> {
protected abstract override fun map(ref: T): MutableMap<in K, Any?>
public override fun setValue(thisRef: T, property: KProperty<*>, value: V) {
val map = map(thisRef)
map.put(key(property), value)
}
override fun getValue(thisRef: T, property: KProperty<*>): V {
return super<MapVal>.getValue(thisRef, property)
}
}
private val propertyNameSelector: (KProperty<*>) -> String = {it.name}
private val throwKeyNotFound: (Any?, Any?) -> Nothing = {thisRef, key -> throw NoSuchElementException("The value for key $key is missing from $thisRef.") }
/**
* Implements a read-only property delegate that stores the property values in a given map instance and uses the given
* callback functions for calculating the key and the default value for each property.
* @param map the map used to store the values.
* @param key the function to calculate the map key from a property metadata object.
* @param default the function returning the value of the property for a given object if it's missing from the given map.
*/
@Deprecated("Complex scenarios of delegation to map are deprecated. Delegate to map itself.")
public open class FixedMapVal<T, K, out V>(
private val map: Map<in K, Any?>,
private val key: (KProperty<*>) -> K,
private val default: (ref: T, key: K) -> V = throwKeyNotFound
) : MapVal<T, K, V>() {
protected override fun map(ref: T): Map<in K, Any?> {
return map
}
protected override fun key(property: KProperty<*>): K {
return (key)(property)
}
protected override fun default(ref: T, property: KProperty<*>): V {
return (default)(ref, key(property))
}
}
/**
* Implements a read/write property delegate that stores the property values in a given map instance and uses the given
* callback functions for calculating the key and the default value for each property.
* @param map the map used to store the values.
* @param key the function to calculate the map key from a property metadata object.
* @param default the function returning the value of the property for a given object if it's missing from the given map.
*/
@Deprecated("Complex scenarios of delegation to map are deprecated. Delegate to map itself.")
public open class FixedMapVar<T, K, V>(
private val map: MutableMap<in K, Any?>,
private val key: (KProperty<*>) -> K,
private val default: (ref: T, key: K) -> V = throwKeyNotFound
) : MapVar<T, K, V>() {
protected override fun map(ref: T): MutableMap<in K, Any?> {
return map
}
protected override fun key(property: KProperty<*>): K {
return (key)(property)
}
protected override fun default(ref: T, property: KProperty<*>): V {
return (default)(ref, key(property))
}
}
@@ -1,191 +0,0 @@
package test.properties.delegation.map
import org.junit.Test as test
import java.util.HashMap
import kotlin.properties.*
import kotlin.reflect.KProperty
import kotlin.test.*
data class B(val a: Int)
class MapValWithDifferentTypesTest() {
val map = hashMapOf("a" to "a", "b" to 1, "c" to B(1), "d" to null)
val a by Delegates.mapVal<String>(map)
val b by Delegates.mapVal<Int>(map)
val c by Delegates.mapVal<Any>(map)
val d by Delegates.mapVal<Int?>(map)
@test fun doTest() {
assertTrue(a == "a", "fail at 'a'")
assertTrue(b == 1, "fail at 'b'")
assertTrue(c == B(1), "fail at 'c'")
assertTrue(d == null, "fail at 'd'")
}
}
class MapVarWithDifferentTypesTest() {
val map: HashMap<String, Any?> = hashMapOf("a" to "a", "b" to 1, "c" to B(1), "d" to "d")
var a: String by Delegates.mapVar(map)
var b: Int by Delegates.mapVar(map)
var c by Delegates.mapVar<Any>(map)
var d by Delegates.mapVar<String?>(map)
@test fun doTest() {
a = "aa"
b = 11
c = B(11)
d = null
assertTrue(a == "aa", "fail at 'a'")
assertTrue(b == 11, "fail at 'b'")
assertTrue(c == B(11), "fail at 'c'")
assertTrue(d == null, "fail at 'd'")
map["a"] = null
a // fails { a } // does not fail due to KT-8135
}
}
class MapNullableKeyTest {
val map = hashMapOf<Any?, Any?>(null to "null")
var a by FixedMapVar<Any?, Any?, Any?>(map, key = { desc -> null }, default = {ref, desc -> null})
@test fun doTest() {
assertTrue(a == "null", "fail at 'a'")
a = "foo"
assertTrue(a == "foo", "fail at 'a' after set")
}
}
class MapPropertyStringTest() {
val map = hashMapOf<String, Any?>("a" to "a", "b" to "b", "c" to "c")
val a: String by Delegates.mapVal(map)
var b by Delegates.mapVar<String>(map)
val c by Delegates.mapVal<String>(map)
@test fun doTest() {
b = "newB"
assertTrue(a == "a", "fail at 'a'")
assertTrue(b == "newB", "fail at 'b'")
assertTrue(c == "c", "fail at 'c'")
}
}
class MapValWithDefaultTest() {
val map = hashMapOf<String, String>()
val a: String by Delegates.mapVal(map, default = { ref, desc -> "aDefault" })
val b: String by FixedMapVal(map, default = { ref: MapValWithDefaultTest, desc: String -> "bDefault" }, key = {"b"})
val c: String by FixedMapVal(map, default = { ref: MapValWithDefaultTest, desc: String -> "cDefault" }, key = { desc -> desc.name })
val d: String by Delegates.mapVal(map, default = { ref, name -> ref.c })
@test fun doTest() {
assertEquals("aDefault", a, "fail at 'a'")
assertEquals("bDefault", b, "fail at 'b'")
assertEquals("cDefault", c, "fail at 'c'")
assertEquals(c, d, "'d' must have the default value equal to 'c'")
}
}
class MapVarWithDefaultTest() {
val map = hashMapOf<String, Any?>()
var a: String by Delegates.mapVar(map, default = {ref, desc -> "aDefault" })
var b: String by FixedMapVar(map, default = {ref: Any?, desc: String -> "bDefault" }, key = {"b"})
var c: String by FixedMapVar(map, default = {ref: Any?, desc: String -> "cDefault" }, key = { desc -> desc.name })
var d: String by Delegates.mapVar(map, default = { ref, name -> ref.c })
@test fun doTest() {
assertEquals("aDefault", a, "fail at 'a'")
assertEquals("bDefault", b, "fail at 'b'")
assertEquals("cDefault", c, "fail at 'c'")
assertEquals(c, d, "'d' must have the default value equal to 'c'")
a = "a"
b = "b"
c = "c"
assertEquals("a", a, "fail at 'a' after set")
assertEquals("b", b, "fail at 'b' after set")
assertEquals("c", c, "fail at 'c' after set")
assertEquals(c, d, "'d' must still have the default value equal to 'c'")
}
}
class MapPropertyKeyTest() {
val map = hashMapOf<String, Any?>("a" to "a", "b" to "b")
val a by FixedMapVal<Any?, String, String>(map, key = {"a"})
var b by FixedMapVar<Any?, String, String>(map, key = {"b"})
@test fun doTest() {
b = "c"
assertTrue(a == "a", "fail at 'a'")
assertTrue(b == "c", "fail at 'b'")
}
}
class MapPropertyFunctionTest() {
val map = hashMapOf<String, Any?>("aDesc" to "a", "bDesc" to "b")
val a by FixedMapVal<Any?, String, String>(map, { desc -> "${desc.name}Desc" })
var b by FixedMapVar<Any?, String, String>(map, { desc -> "${desc.name}Desc" })
@test fun doTest() {
b = "c"
assertTrue(a == "a", "fail at 'a'")
assertTrue(b == "c", "fail at 'b' after set")
}
}
@Suppress("ALWAYS_NULL")
private val topLevel: String by Delegates.mapVal(emptyMap(), default = { ref, name -> ref.toString() })
class MapTopLevelVarWithDefaultTest() {
@test fun doTest() {
assertEquals("null", topLevel)
}
}
val mapVal = object : MapVal<MapPropertyCustomTest, String, String>() {
override fun map(ref: MapPropertyCustomTest) = ref.map
override fun key(property: KProperty<*>) = "${property.name}Desc"
}
val mapVar = object : MapVar<MapPropertyCustomTest, String, String>() {
override fun map(ref: MapPropertyCustomTest) = ref.map
override fun key(property: KProperty<*>) = "${property.name}Desc"
}
class MapPropertyCustomTest() {
val map = hashMapOf<String, Any?>("aDesc" to "a", "bDesc" to "b")
val a by mapVal
var b by mapVar
@test fun doTest() {
b = "newB"
assertTrue(a == "a", "fail at 'a'")
assertTrue(b == "newB", "fail at 'b' after set")
}
}
val mapValWithDefault = object : MapVal<MapPropertyCustomWithDefaultTest, String, String>() {
override fun map(ref: MapPropertyCustomWithDefaultTest) = ref.map
override fun key(property: KProperty<*>) = property.name
override fun default(ref: MapPropertyCustomWithDefaultTest, property: KProperty<*>) = "default"
}
val mapVarWithDefault = object : MapVar<MapPropertyCustomWithDefaultTest, String, String>() {
override fun map(ref: MapPropertyCustomWithDefaultTest) = ref.map
override fun key(property: KProperty<*>) = property.name
override fun default(ref: MapPropertyCustomWithDefaultTest, property: KProperty<*>) = "default"
}
class MapPropertyCustomWithDefaultTest() {
val map = hashMapOf<String, Any?>()
val a by mapValWithDefault
var b by mapVarWithDefault
@test fun doTest() {
assertTrue(a == "default", "fail at 'a'")
assertTrue(b == "default", "fail at 'b'")
b = "c"
assertTrue(b == "c", "fail at 'b' after set")
}
}