From 2ed277a86305e6c3ca4c51b3e816df6bb88795f5 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 20 Nov 2015 18:43:00 +0300 Subject: [PATCH] Add upperbound constraint Comparable to toSortedSet() and sortedMapOf() Provide an overload of toSortedSet() with Comparator parameter #KT-10115 Fixed --- libraries/stdlib/src/generated/_Arrays.kt | 11 ++++++++++- libraries/stdlib/src/generated/_Collections.kt | 11 ++++++++++- libraries/stdlib/src/generated/_Sequences.kt | 11 ++++++++++- .../stdlib/src/kotlin/collections/MapsJVM.kt | 2 +- .../stdlib/test/collections/CollectionJVMTest.kt | 12 ++++++++++++ .../kotlin-stdlib-gen/src/templates/Snapshots.kt | 15 +++++++++++++++ 6 files changed, 58 insertions(+), 4 deletions(-) diff --git a/libraries/stdlib/src/generated/_Arrays.kt b/libraries/stdlib/src/generated/_Arrays.kt index e7be3162e5a..4e931f482fd 100644 --- a/libraries/stdlib/src/generated/_Arrays.kt +++ b/libraries/stdlib/src/generated/_Arrays.kt @@ -6274,7 +6274,7 @@ public fun ShortArray.toSet(): Set { /** * Returns a [SortedSet] of all elements. */ -public fun Array.toSortedSet(): SortedSet { +public fun > Array.toSortedSet(): SortedSet { return toCollection(TreeSet()) } @@ -6334,6 +6334,15 @@ public fun ShortArray.toSortedSet(): SortedSet { return toCollection(TreeSet()) } +/** + * Returns a [SortedSet] of all elements. + * Elements in the set returned are sorted according to the given [comparator]. + */ +@kotlin.jvm.JvmVersion +public fun Array.toSortedSet(comparator: Comparator): SortedSet { + return toCollection(TreeSet(comparator)) +} + /** * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original array. */ diff --git a/libraries/stdlib/src/generated/_Collections.kt b/libraries/stdlib/src/generated/_Collections.kt index f3f66782237..d7544b8f42b 100644 --- a/libraries/stdlib/src/generated/_Collections.kt +++ b/libraries/stdlib/src/generated/_Collections.kt @@ -1065,10 +1065,19 @@ public fun Iterable.toSet(): Set { /** * Returns a [SortedSet] of all elements. */ -public fun Iterable.toSortedSet(): SortedSet { +public fun > Iterable.toSortedSet(): SortedSet { return toCollection(TreeSet()) } +/** + * Returns a [SortedSet] of all elements. + * Elements in the set returned are sorted according to the given [comparator]. + */ +@kotlin.jvm.JvmVersion +public fun Iterable.toSortedSet(comparator: Comparator): SortedSet { + return toCollection(TreeSet(comparator)) +} + /** * Returns a single list of all elements yielded from results of [transform] function being invoked on each element of original collection. */ diff --git a/libraries/stdlib/src/generated/_Sequences.kt b/libraries/stdlib/src/generated/_Sequences.kt index fe6fb4ca544..88443ba1534 100644 --- a/libraries/stdlib/src/generated/_Sequences.kt +++ b/libraries/stdlib/src/generated/_Sequences.kt @@ -559,10 +559,19 @@ public fun Sequence.toSet(): Set { /** * Returns a [SortedSet] of all elements. */ -public fun Sequence.toSortedSet(): SortedSet { +public fun > Sequence.toSortedSet(): SortedSet { return toCollection(TreeSet()) } +/** + * Returns a [SortedSet] of all elements. + * Elements in the set returned are sorted according to the given [comparator]. + */ +@kotlin.jvm.JvmVersion +public fun Sequence.toSortedSet(comparator: Comparator): SortedSet { + return toCollection(TreeSet(comparator)) +} + /** * Returns a single sequence of all elements from results of [transform] function being invoked on each element of original sequence. */ diff --git a/libraries/stdlib/src/kotlin/collections/MapsJVM.kt b/libraries/stdlib/src/kotlin/collections/MapsJVM.kt index ef2292b6f7c..e2b292c5ebd 100644 --- a/libraries/stdlib/src/kotlin/collections/MapsJVM.kt +++ b/libraries/stdlib/src/kotlin/collections/MapsJVM.kt @@ -68,7 +68,7 @@ public fun Map.toSortedMap(comparator: Comparator): SortedMap * * @sample test.collections.MapJVMTest.createSortedMap */ -public fun sortedMapOf(vararg pairs: Pair): SortedMap +public fun , V> sortedMapOf(vararg pairs: Pair): SortedMap = TreeMap().apply { putAll(pairs) } diff --git a/libraries/stdlib/test/collections/CollectionJVMTest.kt b/libraries/stdlib/test/collections/CollectionJVMTest.kt index bde8833dbd6..337f33ec28d 100644 --- a/libraries/stdlib/test/collections/CollectionJVMTest.kt +++ b/libraries/stdlib/test/collections/CollectionJVMTest.kt @@ -128,6 +128,18 @@ class CollectionJVMTest { } } + @test fun toSortedSet() { + val data = listOf("foo", "Foo", "bar") + val set1 = data.toSortedSet() + assertEquals(listOf("Foo", "bar", "foo"), set1.toList()) + + val set2 = data.toSortedSet(reverseOrder()) + assertEquals(listOf("foo", "bar", "Foo"), set2.toList()) + + val set3 = data.toSortedSet(String.CASE_INSENSITIVE_ORDER) + assertEquals(listOf("bar", "foo"), set3.toList()) + } + @test fun takeReturnsFirstNElements() { expect(setOf(1, 2)) { sortedSetOf(1, 2, 3, 4, 5).take(2).toSet() } } diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Snapshots.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Snapshots.kt index a63e6a833a1..f2e26e2fc35 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Snapshots.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Snapshots.kt @@ -44,11 +44,26 @@ fun snapshots(): List { templates add f("toSortedSet()") { deprecate(Strings) { forBinaryCompatibility } include(CharSequences, Strings) + typeParam("T: Comparable") doc { f -> "Returns a [SortedSet] of all ${f.element}s." } returns("SortedSet") body { "return toCollection(TreeSet())" } } + templates add f("toSortedSet(comparator: Comparator)") { + only(Iterables, ArraysOfObjects, Sequences) + jvmOnly(true) + doc { f -> + """ + Returns a [SortedSet] of all ${f.element}s. + + Elements in the set returned are sorted according to the given [comparator]. + """ + } + returns("SortedSet") + body { "return toCollection(TreeSet(comparator))" } + } + templates add f("toArrayList()") { doc { f -> "Returns an [ArrayList] of all ${f.element}s." } returns("ArrayList")