From 654a85368d3b8d0f2395b9f8435ae502bd197291 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Thu, 15 Oct 2015 19:09:04 +0300 Subject: [PATCH] Allow to evaluate FamilyProperty based on family value specified. --- .../kotlin-stdlib-gen/src/templates/Engine.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Engine.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Engine.kt index 83a32b9a221..3288b755317 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Engine.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Engine.kt @@ -63,22 +63,22 @@ class ConcreteFunction(val textBuilder: (Appendable) -> Unit, val sourceFile: So class GenericFunction(val signature: String, val keyword: String = "fun") { open class SpecializedProperty() { - private val values = HashMap() + private val valueBuilders = HashMap TValue)>() - operator fun get(key: TKey): TValue? = values.getOrElse(key, { values.getOrElse(null, { null }) }) + operator fun get(key: TKey): TValue? = (valueBuilders[key] ?: valueBuilders[null] ?: null)?.let { it(key) } - operator fun set(keys: Collection, value: TValue) { + operator fun set(keys: Collection, value: (TKey)->TValue) { if (keys.isEmpty()) - values[null] = value; + valueBuilders[null] = value; else for (key in keys) { - values[key] = value + valueBuilders[key] = value onKeySet(key) } } - operator fun invoke(vararg keys: TKey, valueBuilder: () -> TValue) = set(keys.asList(), valueBuilder()) - operator fun invoke(value: TValue, vararg keys: TKey) = set(keys.asList(), value) + operator fun invoke(vararg keys: TKey, valueBuilder: (TKey) -> TValue) = set(keys.asList(), valueBuilder) + operator fun invoke(value: TValue, vararg keys: TKey) = set(keys.asList(), { value }) protected open fun onKeySet(key: TKey) {} } @@ -87,7 +87,7 @@ class GenericFunction(val signature: String, val keyword: String = "fun") { open class PrimitiveProperty() : SpecializedProperty() class DeprecationProperty() : FamilyProperty() { - operator fun invoke(value: String, vararg keys: Family) = set(keys.asList(), Deprecation(value)) + operator fun invoke(value: String, vararg keys: Family) = set(keys.asList(), { Deprecation(value) }) }