From 96b79eebe7b923aa81fc808db9482f40d02c12df Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 10 Jul 2015 19:15:56 +0300 Subject: [PATCH] asSequence returns empty sequence singleton for empty arrays and strings. #KT-8450 Fixed --- libraries/stdlib/src/generated/_Sequences.kt | 10 ++++++++++ .../kotlin-stdlib-gen/src/templates/Sequence.kt | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libraries/stdlib/src/generated/_Sequences.kt b/libraries/stdlib/src/generated/_Sequences.kt index d2e1b314b20..6e99878fc17 100644 --- a/libraries/stdlib/src/generated/_Sequences.kt +++ b/libraries/stdlib/src/generated/_Sequences.kt @@ -14,6 +14,7 @@ import java.util.Collections // TODO: it's temporary while we have java.util.Col * Returns a sequence from the given collection. */ public fun Array.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -25,6 +26,7 @@ public fun Array.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun BooleanArray.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -36,6 +38,7 @@ public fun BooleanArray.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun ByteArray.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -47,6 +50,7 @@ public fun ByteArray.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun CharArray.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -58,6 +62,7 @@ public fun CharArray.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun DoubleArray.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -69,6 +74,7 @@ public fun DoubleArray.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun FloatArray.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -80,6 +86,7 @@ public fun FloatArray.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun IntArray.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -91,6 +98,7 @@ public fun IntArray.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun LongArray.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -102,6 +110,7 @@ public fun LongArray.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun ShortArray.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() @@ -142,6 +151,7 @@ public fun Sequence.asSequence(): Sequence { * Returns a sequence from the given collection. */ public fun String.asSequence(): Sequence { + if (isEmpty()) return emptySequence() return object : Sequence { override fun iterator(): Iterator { return this@asSequence.iterator() diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Sequence.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Sequence.kt index 8f25dbb53cb..6fb929dc583 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Sequence.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Sequence.kt @@ -26,7 +26,6 @@ fun sequences(): List { } templates add f("asSequence()") { include(Maps) - exclude(Sequences) doc { "Returns a sequence from the given collection." } returns("Sequence") body { @@ -39,6 +38,17 @@ fun sequences(): List { """ } + body(ArraysOfObjects, ArraysOfPrimitives, Strings) { + """ + if (isEmpty()) return emptySequence() + return object : Sequence { + override fun iterator(): Iterator { + return this@asSequence.iterator() + } + } + """ + } + body(Sequences) { """ return this