diff --git a/libraries/stdlib/src/generated/_Collections.kt b/libraries/stdlib/src/generated/_Collections.kt index c9ca07a9e8b..fbf764b7aa0 100644 --- a/libraries/stdlib/src/generated/_Collections.kt +++ b/libraries/stdlib/src/generated/_Collections.kt @@ -35,6 +35,13 @@ public inline fun Collection.map(transform : (T) -> R) : List { return mapTo(ArrayList(), transform) } +/** + * Returns the result of transforming each element to one or more values which are concatenated together into a single list + */ +public inline fun Collection.flatMap(transform: (T)-> Iterable) : List { + return flatMapTo(ArrayList(), transform) +} + /** * Returns a list containing the first *n* elements */ diff --git a/libraries/stdlib/src/generated/_Iterables.kt b/libraries/stdlib/src/generated/_Iterables.kt index ec04bf7e761..92d79de2ba5 100644 --- a/libraries/stdlib/src/generated/_Iterables.kt +++ b/libraries/stdlib/src/generated/_Iterables.kt @@ -90,13 +90,6 @@ public inline fun > Iterable.mapTo(result: C return result } -/** - * Returns the result of transforming each element to one or more values which are concatenated together into a single list - */ -public inline fun Iterable.flatMap(transform: (T)-> Iterable) : List { - return flatMapTo(ArrayList(), transform) -} - /** * Returns the result of transforming each element to one or more values which are concatenated together into a single collection */ diff --git a/libraries/stdlib/src/generated/_IteratorsCommon.kt b/libraries/stdlib/src/generated/_IteratorsCommon.kt index 23f6dd20626..eb9ac8e67f3 100644 --- a/libraries/stdlib/src/generated/_IteratorsCommon.kt +++ b/libraries/stdlib/src/generated/_IteratorsCommon.kt @@ -90,13 +90,6 @@ public inline fun > Iterator.mapTo(result: C return result } -/** - * Returns the result of transforming each element to one or more values which are concatenated together into a single list - */ -public inline fun Iterator.flatMap(transform: (T)-> Iterable) : List { - return flatMapTo(ArrayList(), transform) -} - /** * Returns the result of transforming each element to one or more values which are concatenated together into a single collection */ diff --git a/libraries/stdlib/test/iterators/IteratorsJVMTest.kt b/libraries/stdlib/test/iterators/IteratorsJVMTest.kt index 016dd4edc65..1eda4b183bb 100644 --- a/libraries/stdlib/test/iterators/IteratorsJVMTest.kt +++ b/libraries/stdlib/test/iterators/IteratorsJVMTest.kt @@ -14,7 +14,7 @@ class IteratorsJVMTest { iterate { if (index < binary.length()) binary.get(index++) else null } } - val expected = arrayList( + val expected = arrayListOf( '0', // fibonacci(0) = 0 '1', // fibonacci(1) = 1 '1', // fibonacci(2) = 1 @@ -25,4 +25,9 @@ class IteratorsJVMTest { assertEquals(expected, fibonacci().flatMap(intToBinaryDigits()).take(10).toList()) } + + test fun flatMapOnIterator() { + val result = listOf(1, 2).iterator().flatMap { i -> (0..i).iterator()} + assertEquals(listOf(0, 1, 0, 1, 2), result.toList()) + } } diff --git a/libraries/tools/kotlin-stdlib-gen/src/generators/GenerateStandardLib.kt b/libraries/tools/kotlin-stdlib-gen/src/generators/GenerateStandardLib.kt index 2e39c0af94e..5fead850d2a 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/generators/GenerateStandardLib.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/generators/GenerateStandardLib.kt @@ -35,7 +35,7 @@ fun main(args: Array) { buildFor(Iterators, "") } - val iteratorSignatures = templates.map { it.signature.flat() }.toSet() + val iteratorSignatures = templates.map { it.erasedSignature.flat() }.toSet() templates.clear() collections() @@ -50,15 +50,15 @@ fun main(args: Array) { } templates.writeTo(File(outDir, "_Iterables.kt")) { - if (iteratorSignatures contains signature.flat()) "" else buildFor(Iterables, "") + if (iteratorSignatures contains erasedSignature.flat()) "" else buildFor(Iterables, "") } templates.writeTo(File(outDir, "_IteratorsCommon.kt")) { - if (iteratorSignatures contains signature.flat()) "" else buildFor(Iterators, "") + if (iteratorSignatures contains erasedSignature.flat()) "" else buildFor(Iterators, "") } templates.writeTo(File(outDir, "_Collections.kt")) { - if (iteratorSignatures contains signature.flat()) buildFor(Collections, "") else "" + if (iteratorSignatures contains erasedSignature.flat()) buildFor(Collections, "") else "" } generateDownTos(File(outDir, "_DownTo.kt"), "package kotlin") diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Collections.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Collections.kt index b56bcbadfda..733c6b54511 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Collections.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Collections.kt @@ -179,7 +179,7 @@ fun collections() { } } - f("flatMap(transform: (T)-> Iterable)") { + f("flatMap(transform: (T)-> Iterable)", "flatMap(Function1)") { doc = "Returns the result of transforming each element to one or more values which are concatenated together into a single list" typeParam("R") returns("List") @@ -581,4 +581,4 @@ fun collections() { """ } } -} +} \ No newline at end of file diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Engine.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Engine.kt index 60e41d2d261..63f12f8020d 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Engine.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Engine.kt @@ -15,7 +15,7 @@ enum class Family { PrimitiveArrays } -class GenericFunction(val signature : String) { +class GenericFunction(val signature : String, val erasedSignature: String) { var doc : String = "" var toNullableT : Boolean = false val isInline : Boolean = true; @@ -151,8 +151,8 @@ fun String.trimTrailingSpaces() : String { val templates = ArrayList() -fun f(signature : String, init : GenericFunction.() -> Unit) { - val gf = GenericFunction(signature) +fun f(signature : String, erasedSignature: String = signature, init : GenericFunction.() -> Unit) { + val gf = GenericFunction(signature, erasedSignature) gf.init() templates.add(gf) } diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Iterators.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Iterators.kt index 533f99f5888..eba1e68ed14 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Iterators.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Iterators.kt @@ -40,7 +40,7 @@ fun iterators() { } } - f("flatMap(transform: (T) -> Iterator)") { + f("flatMap(transform: (T) -> Iterator)", "flatMap(Function1)") { doc = "Returns an iterator over the concatenated results of transforming each element to one or more values" typeParam("R") returns("Iterator")