From 16c5289e6c59ea13eee37a93711baade9322b63d Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Mon, 16 Nov 2015 22:52:00 +0300 Subject: [PATCH] Stdlib generators DSL: allow to use documentation family extensions inside doc { } without importing them first. --- .../src/templates/Aggregates.kt | 2 -- .../kotlin-stdlib-gen/src/templates/Elements.kt | 3 --- .../kotlin-stdlib-gen/src/templates/Filtering.kt | 3 --- .../src/templates/Generators.kt | 1 - .../kotlin-stdlib-gen/src/templates/Guards.kt | 3 +-- .../kotlin-stdlib-gen/src/templates/Mapping.kt | 3 --- .../kotlin-stdlib-gen/src/templates/Numeric.kt | 1 - .../kotlin-stdlib-gen/src/templates/Ordering.kt | 3 +-- .../kotlin-stdlib-gen/src/templates/Sets.kt | 3 --- .../kotlin-stdlib-gen/src/templates/Snapshots.kt | 2 -- .../src/templates/SpecialJVM.kt | 2 +- .../src/templates/engine/Engine.kt | 16 +++++++++------- 12 files changed, 12 insertions(+), 30 deletions(-) diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Aggregates.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Aggregates.kt index 9ac33b7b07b..cbd3ad494d3 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Aggregates.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Aggregates.kt @@ -1,8 +1,6 @@ package templates import templates.Family.* -import templates.DocExtensions.element -import templates.DocExtensions.collection fun aggregates(): List { val templates = arrayListOf() diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Elements.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Elements.kt index 5b7c9ea7872..1192ddacb5d 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Elements.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Elements.kt @@ -1,9 +1,6 @@ package templates import templates.Family.* -import templates.DocExtensions.element -import templates.DocExtensions.collection -import templates.DocExtensions.prefixWithArticle fun elements(): List { diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt index ddc5530254c..12767e5fecf 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt @@ -1,9 +1,6 @@ package templates import templates.Family.* -import templates.DocExtensions.collection -import templates.DocExtensions.element -import templates.DocExtensions.mapResult fun filtering(): List { val templates = arrayListOf() diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Generators.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Generators.kt index ef2ced38363..f8a14af3ae1 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Generators.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Generators.kt @@ -1,7 +1,6 @@ package templates import templates.Family.* -import templates.DocExtensions.collection fun generators(): List { val templates = arrayListOf() diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Guards.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Guards.kt index a3d7b38453a..bd8498198e0 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Guards.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Guards.kt @@ -1,12 +1,11 @@ package templates -import java.util.ArrayList import templates.Family.* fun guards(): List { val THIS = "\$this" - val templates = ArrayList() + val templates = arrayListOf() templates add f("requireNoNulls()") { include(Lists) diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Mapping.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Mapping.kt index 0580bd81b94..f4e0c18ffcd 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Mapping.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Mapping.kt @@ -1,9 +1,6 @@ package templates import templates.Family.* -import templates.DocExtensions.element -import templates.DocExtensions.collection -import templates.DocExtensions.mapResult fun mapping(): List { val templates = arrayListOf() diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Numeric.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Numeric.kt index e05a6a6e050..c2ea020be3c 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Numeric.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Numeric.kt @@ -1,7 +1,6 @@ package templates import templates.Family.* -import templates.DocExtensions.collection fun numeric(): List { val templates = arrayListOf() diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Ordering.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Ordering.kt index cb54c9d4378..bd6be80b77e 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Ordering.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Ordering.kt @@ -1,13 +1,12 @@ package templates import templates.Family.* -import templates.DocExtensions.collection fun ordering(): List { val templates = arrayListOf() templates add f("reverse()") { - doc { f -> "Reverses elements in the ${f.collection} in-place." } + doc { f -> "Reverses ${f.element}s in the ${f.collection} in-place." } only(Lists, ArraysOfObjects, ArraysOfPrimitives) customReceiver(Lists) { "MutableList" } returns { "Unit" } diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Sets.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Sets.kt index 5105e9a06de..3cd28b5c29d 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Sets.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Sets.kt @@ -1,9 +1,6 @@ package templates import templates.Family.* -import templates.DocExtensions.element -import templates.DocExtensions.collection -import templates.DocExtensions.mapResult fun sets(): List { val templates = arrayListOf() diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Snapshots.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Snapshots.kt index db655c257ec..d5ea9fbe3e9 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Snapshots.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Snapshots.kt @@ -1,8 +1,6 @@ package templates import templates.Family.* -import templates.DocExtensions.element -import templates.DocExtensions.collection fun snapshots(): List { val templates = arrayListOf() diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJVM.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJVM.kt index 69b7e014278..b0ed8b40b35 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJVM.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJVM.kt @@ -276,7 +276,7 @@ fun specialJVM(): List { } } - templates.forEach { it.jvmOnly(true) } + templates.forEach { it.apply { jvmOnly(true) } } return templates } \ No newline at end of file diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/engine/Engine.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/engine/Engine.kt index 6f8bd8d97be..5c1b2080f4a 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/engine/Engine.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/engine/Engine.kt @@ -77,18 +77,20 @@ class GenericFunction(val signature: String, val keyword: String = "fun") { } } - 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) {} } + operator fun SpecializedProperty.invoke(vararg keys: TKey, valueBuilder: (TKey) -> TValue) = set(keys.asList(), valueBuilder) + operator fun SpecializedProperty.invoke(value: TValue, vararg keys: TKey) = set(keys.asList(), { value }) + open class FamilyProperty() : SpecializedProperty() open class PrimitiveProperty() : SpecializedProperty() - class DeprecationProperty() : FamilyProperty() { - operator fun invoke(value: String, vararg keys: Family) = set(keys.asList(), { Deprecation(value) }) - } + class DeprecationProperty() : FamilyProperty() + operator fun DeprecationProperty.invoke(value: String, vararg keys: Family) = set(keys.asList(), { Deprecation(value) }) + + class DocProperty() : FamilyProperty() + operator fun DocProperty.invoke(vararg keys: Family, valueBuilder: DocExtensions.(Family) -> String) = set(keys.asList(), { f -> valueBuilder(DocExtensions, f) }) @@ -107,7 +109,7 @@ class GenericFunction(val signature: String, val keyword: String = "fun") { val customReceiver = FamilyProperty() val customSignature = FamilyProperty() val deprecate = DeprecationProperty() - val doc = FamilyProperty() + val doc = DocProperty() val platformName = PrimitiveProperty() val inline = FamilyProperty() val jvmOnly = FamilyProperty()