From ca6d7e643ecfadf014a46edd4ff210c08ff049d2 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Tue, 14 Aug 2012 15:24:13 +0400 Subject: [PATCH] use kotlin Iterable/Iterator instead of java Iterable/Iterator in Kotlin code in library --- libraries/stdlib/src/kotlin/Iterators.kt | 36 ++++++------- libraries/stdlib/src/kotlin/IteratorsJVM.kt | 4 +- libraries/stdlib/src/kotlin/JLangIterables.kt | 52 +++++++++---------- .../stdlib/src/kotlin/JLangIterablesJVM.kt | 2 +- .../stdlib/src/kotlin/JLangIterablesLazy.kt | 22 ++++---- .../src/kotlin/JLangIterablesSpecial.kt | 14 ++--- .../src/kotlin/JLangIterablesSpecialJVM.kt | 2 +- libraries/stdlib/src/kotlin/JUtil.kt | 4 +- libraries/stdlib/src/kotlin/JUtilMaps.kt | 2 +- libraries/stdlib/src/kotlin/Standard.kt | 17 ++---- libraries/stdlib/src/kotlin/StandardJVM.kt | 6 --- libraries/stdlib/src/kotlin/dom/Dom.kt | 3 +- libraries/stdlib/src/kotlin/dom/DomJVM.kt | 1 + .../src/kotlin/support/AbstractIterator.kt | 12 ++--- libraries/stdlib/test/CollectionApiCheck.kt | 2 +- libraries/stdlib/test/CollectionJVMTest.kt | 2 +- libraries/stdlib/test/CollectionTest.kt | 7 +-- .../stdlib/test/iterators/IteratorsTest.kt | 2 +- .../stdlib/test/regressions/Kt2495Test.kt | 2 +- 19 files changed, 88 insertions(+), 104 deletions(-) diff --git a/libraries/stdlib/src/kotlin/Iterators.kt b/libraries/stdlib/src/kotlin/Iterators.kt index 507ef5d71d0..269362aa01a 100644 --- a/libraries/stdlib/src/kotlin/Iterators.kt +++ b/libraries/stdlib/src/kotlin/Iterators.kt @@ -8,16 +8,16 @@ import java.util.Collections * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt fibonacci */ -public inline fun iterate(nextFunction: () -> T?) : java.util.Iterator = FunctionIterator(nextFunction) +public inline fun iterate(nextFunction: () -> T?) : Iterator = FunctionIterator(nextFunction) /** * Returns an iterator over elements which match the given *predicate* * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt filterAndTakeWhileExtractTheElementsWithinRange */ -public inline fun java.util.Iterator.filter(predicate: (T) -> Boolean) : java.util.Iterator = FilterIterator(this, predicate) +public inline fun Iterator.filter(predicate: (T) -> Boolean) : Iterator = FilterIterator(this, predicate) -private class FilterIterator(val iterator : java.util.Iterator, val predicate: (T)-> Boolean) : AbstractIterator() { +private class FilterIterator(val iterator : Iterator, val predicate: (T)-> Boolean) : AbstractIterator() { override protected fun computeNext(): Unit { while (iterator.hasNext()) { val next = iterator.next() @@ -31,12 +31,12 @@ private class FilterIterator(val iterator : java.util.Iterator, val predic } /** Returns an iterator over elements which do not match the given *predicate* */ -public inline fun java.util.Iterator.filterNot(predicate: (T) -> Boolean) : java.util.Iterator = filter { !predicate(it) } +public inline fun Iterator.filterNot(predicate: (T) -> Boolean) : Iterator = filter { !predicate(it) } /** Returns an iterator over non-*null* elements */ -public inline fun java.util.Iterator?.filterNotNull() : java.util.Iterator = FilterNotNullIterator(this) +public inline fun Iterator?.filterNotNull() : Iterator = FilterNotNullIterator(this) -private class FilterNotNullIterator(val iterator : java.util.Iterator?) : AbstractIterator() { +private class FilterNotNullIterator(val iterator : Iterator?) : AbstractIterator() { override protected fun computeNext(): Unit { if (iterator != null) { while (iterator.hasNext()) { @@ -56,9 +56,9 @@ private class FilterNotNullIterator(val iterator : java.util.Iterator?) : * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt mapAndTakeWhileExtractTheTransformedElements */ -public inline fun java.util.Iterator.map(transform: (T) -> R): java.util.Iterator = MapIterator(this, transform) +public inline fun Iterator.map(transform: (T) -> R): Iterator = MapIterator(this, transform) -private class MapIterator(val iterator : java.util.Iterator, val transform: (T) -> R) : AbstractIterator() { +private class MapIterator(val iterator : Iterator, val transform: (T) -> R) : AbstractIterator() { override protected fun computeNext() : Unit { if (iterator.hasNext()) { setNext((transform)(iterator.next())) @@ -73,10 +73,10 @@ private class MapIterator(val iterator : java.util.Iterator, val transf * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt flatMapAndTakeExtractTheTransformedElements */ -public inline fun java.util.Iterator.flatMap(transform: (T) -> java.util.Iterator): java.util.Iterator = FlatMapIterator(this, transform) +public inline fun Iterator.flatMap(transform: (T) -> Iterator): Iterator = FlatMapIterator(this, transform) -private class FlatMapIterator(val iterator : java.util.Iterator, val transform: (T) -> java.util.Iterator) : AbstractIterator() { - var transformed: java.util.Iterator = iterate { null } +private class FlatMapIterator(val iterator : Iterator, val transform: (T) -> Iterator) : AbstractIterator() { + var transformed: Iterator = iterate { null } override protected fun computeNext() : Unit { while (true) { @@ -99,7 +99,7 @@ private class FlatMapIterator(val iterator : java.util.Iterator, val tr * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt plus */ -public inline fun java.util.Iterator.plus(element: T): java.util.Iterator { +public inline fun Iterator.plus(element: T): Iterator { return CompositeIterator(this, SingleIterator(element)) } @@ -109,7 +109,7 @@ public inline fun java.util.Iterator.plus(element: T): java.util.Itera * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt plusCollection */ -public inline fun java.util.Iterator.plus(iterator: java.util.Iterator): java.util.Iterator { +public inline fun Iterator.plus(iterator: Iterator): Iterator { return CompositeIterator(this, iterator) } @@ -118,7 +118,7 @@ public inline fun java.util.Iterator.plus(iterator: java.util.Iterator * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt plusCollection */ -public inline fun java.util.Iterator.plus(collection: java.lang.Iterable): java.util.Iterator = plus(collection.iterator()) +public inline fun Iterator.plus(collection: Iterable): Iterator = plus(collection.iterator()) /** * Returns an iterator containing all the non-*null* elements, lazily throwing an [[IllegalArgumentException]] @@ -126,7 +126,7 @@ public inline fun java.util.Iterator.plus(collection: java.lang.Iterab * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt requireNoNulls */ -public inline fun java.util.Iterator.requireNoNulls(): java.util.Iterator { +public inline fun Iterator.requireNoNulls(): Iterator { return map{ if (it == null) throw IllegalArgumentException("null element in iterator $this") else it } @@ -138,7 +138,7 @@ public inline fun java.util.Iterator.requireNoNulls(): java.util.Iter * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt takeExtractsTheFirstNElements */ -public inline fun java.util.Iterator.take(n: Int): java.util.Iterator { +public inline fun Iterator.take(n: Int): Iterator { var count = n return takeWhile{ --count >= 0 } } @@ -148,9 +148,9 @@ public inline fun java.util.Iterator.take(n: Int): java.util.Iterator * * @includeFunctionBody ../../test/iterators/IteratorsTest.kt filterAndTakeWhileExtractTheElementsWithinRange */ -public inline fun java.util.Iterator.takeWhile(predicate: (T) -> Boolean): java.util.Iterator = TakeWhileIterator(this, predicate) +public inline fun Iterator.takeWhile(predicate: (T) -> Boolean): Iterator = TakeWhileIterator(this, predicate) -private class TakeWhileIterator(val iterator: java.util.Iterator, val predicate: (T) -> Boolean) : AbstractIterator() { +private class TakeWhileIterator(val iterator: Iterator, val predicate: (T) -> Boolean) : AbstractIterator() { override protected fun computeNext() : Unit { if (iterator.hasNext()) { val item = iterator.next() diff --git a/libraries/stdlib/src/kotlin/IteratorsJVM.kt b/libraries/stdlib/src/kotlin/IteratorsJVM.kt index 7ba4b5dcafb..69abfb30a44 100644 --- a/libraries/stdlib/src/kotlin/IteratorsJVM.kt +++ b/libraries/stdlib/src/kotlin/IteratorsJVM.kt @@ -4,9 +4,9 @@ import kotlin.support.* import java.util.Collections /** Returns an iterator over elements that are instances of a given type *R* which is a subclass of *T* */ -public inline fun java.util.Iterator.filterIsInstance(klass: Class): java.util.Iterator = FilterIsIterator(this, klass) +public inline fun Iterator.filterIsInstance(klass: Class): Iterator = FilterIsIterator(this, klass) -private class FilterIsIterator(val iterator : java.util.Iterator, val klass: Class) : AbstractIterator() { +private class FilterIsIterator(val iterator : Iterator, val klass: Class) : AbstractIterator() { override protected fun computeNext(): Unit { while (iterator.hasNext()) { val next = iterator.next() diff --git a/libraries/stdlib/src/kotlin/JLangIterables.kt b/libraries/stdlib/src/kotlin/JLangIterables.kt index d6f75cc8247..aa50b0a78bc 100644 --- a/libraries/stdlib/src/kotlin/JLangIterables.kt +++ b/libraries/stdlib/src/kotlin/JLangIterables.kt @@ -7,7 +7,7 @@ import java.util.* * * @includeFunctionBody ../../test/CollectionTest.kt all */ -public inline fun java.lang.Iterable.all(predicate: (T) -> Boolean) : Boolean { +public inline fun Iterable.all(predicate: (T) -> Boolean) : Boolean { for (element in this) if (!predicate(element)) return false return true } @@ -17,7 +17,7 @@ public inline fun java.lang.Iterable.all(predicate: (T) -> Boolean) : Boo * * @includeFunctionBody ../../test/CollectionTest.kt any */ -public inline fun java.lang.Iterable.any(predicate: (T) -> Boolean) : Boolean { +public inline fun Iterable.any(predicate: (T) -> Boolean) : Boolean { for (element in this) if (predicate(element)) return true return false } @@ -30,7 +30,7 @@ public inline fun java.lang.Iterable.any(predicate: (T) -> Boolean) : Boo * * @includeFunctionBody ../../test/CollectionTest.kt appendString */ -public inline fun java.lang.Iterable.appendString(buffer: Appendable, separator: String = ", ", prefix: String = "", postfix: String = "", limit: Int = -1, truncated: String = "..."): Unit { +public inline fun Iterable.appendString(buffer: Appendable, separator: String = ", ", prefix: String = "", postfix: String = "", limit: Int = -1, truncated: String = "..."): Unit { buffer.append(prefix) var count = 0 for (element in this) { @@ -49,7 +49,7 @@ public inline fun java.lang.Iterable.appendString(buffer: Appendable, sep * * @includeFunctionBody ../../test/CollectionTest.kt count */ -public inline fun java.lang.Iterable.count(predicate: (T) -> Boolean) : Int { +public inline fun Iterable.count(predicate: (T) -> Boolean) : Int { var count = 0 for (element in this) if (predicate(element)) count++ return count @@ -60,7 +60,7 @@ public inline fun java.lang.Iterable.count(predicate: (T) -> Boolean) : I * * @includeFunctionBody ../../test/CollectionTest.kt find */ -public inline fun java.lang.Iterable.find(predicate: (T) -> Boolean) : T? { +public inline fun Iterable.find(predicate: (T) -> Boolean) : T? { for (element in this) if (predicate(element)) return element return null } @@ -70,7 +70,7 @@ public inline fun java.lang.Iterable.find(predicate: (T) -> Boolean) : T? * * @includeFunctionBody ../../test/CollectionTest.kt filterIntoLinkedList */ -public inline fun > java.lang.Iterable.filterTo(result: C, predicate: (T) -> Boolean) : C { +public inline fun > Iterable.filterTo(result: C, predicate: (T) -> Boolean) : C { for (element in this) if (predicate(element)) result.add(element) return result } @@ -80,7 +80,7 @@ public inline fun > java.lang.Iterable.filterTo(result * * @includeFunctionBody ../../test/CollectionTest.kt filterNotIntoLinkedList */ -public inline fun > java.lang.Iterable.filterNotTo(result: C, predicate: (T) -> Boolean) : C { +public inline fun > Iterable.filterNotTo(result: C, predicate: (T) -> Boolean) : C { for (element in this) if (!predicate(element)) result.add(element) return result } @@ -90,7 +90,7 @@ public inline fun > java.lang.Iterable.filterNotTo(res * * @includeFunctionBody ../../test/CollectionTest.kt filterNotNullIntoLinkedList */ -public inline fun > java.lang.Iterable?.filterNotNullTo(result: C) : C { +public inline fun > Iterable?.filterNotNullTo(result: C) : C { if (this != null) { for (element in this) if (element != null) result.add(element) } @@ -102,7 +102,7 @@ public inline fun > java.lang.Iterable?.filterNotNull * * @includeFunctionBody ../../test/CollectionTest.kt flatMap */ -public inline fun java.lang.Iterable.flatMapTo(result: Collection, transform: (T) -> Collection) : Collection { +public inline fun Iterable.flatMapTo(result: Collection, transform: (T) -> Collection) : Collection { for (element in this) { val list = transform(element) if (list != null) { @@ -117,14 +117,14 @@ public inline fun java.lang.Iterable.flatMapTo(result: Collection, * * @includeFunctionBody ../../test/CollectionTest.kt forEach */ -public inline fun java.lang.Iterable.forEach(operation: (T) -> Unit) : Unit = for (element in this) operation(element) +public inline fun Iterable.forEach(operation: (T) -> Unit) : Unit = for (element in this) operation(element) /** * Folds all elements from from left to right with the *initial* value to perform the operation on sequential pairs of elements * * @includeFunctionBody ../../test/CollectionTest.kt fold */ -public inline fun java.lang.Iterable.fold(initial: T, operation: (T, T) -> T): T { +public inline fun Iterable.fold(initial: T, operation: (T, T) -> T): T { var answer = initial for (element in this) answer = operation(answer, element) return answer @@ -135,7 +135,7 @@ public inline fun java.lang.Iterable.fold(initial: T, operation: (T, T) - * * @includeFunctionBody ../../test/CollectionTest.kt foldRight */ -public inline fun java.lang.Iterable.foldRight(initial: T, operation: (T, T) -> T): T = reverse().fold(initial, {x, y -> operation(y, x)}) +public inline fun Iterable.foldRight(initial: T, operation: (T, T) -> T): T = reverse().fold(initial, {x, y -> operation(y, x)}) /** @@ -144,7 +144,7 @@ public inline fun java.lang.Iterable.foldRight(initial: T, operation: (T, * * @includeFunctionBody ../../test/CollectionTest.kt reduce */ -public inline fun java.lang.Iterable.reduce(operation: (T, T) -> T): T { +public inline fun Iterable.reduce(operation: (T, T) -> T): T { val iterator = this.iterator().sure() if (!iterator.hasNext()) { throw UnsupportedOperationException("Empty iterable can't be reduced") @@ -164,7 +164,7 @@ public inline fun java.lang.Iterable.reduce(operation: (T, T) -> T): T { * * @includeFunctionBody ../../test/CollectionTest.kt reduceRight */ -public inline fun java.lang.Iterable.reduceRight(operation: (T, T) -> T): T = reverse().reduce { x, y -> operation(y, x) } +public inline fun Iterable.reduceRight(operation: (T, T) -> T): T = reverse().reduce { x, y -> operation(y, x) } /** @@ -172,14 +172,14 @@ public inline fun java.lang.Iterable.reduceRight(operation: (T, T) -> T): * * @includeFunctionBody ../../test/CollectionTest.kt groupBy */ -public inline fun java.lang.Iterable.groupBy(toKey: (T) -> K) : Map> = groupByTo(HashMap>(), toKey) +public inline fun Iterable.groupBy(toKey: (T) -> K) : Map> = groupByTo(HashMap>(), toKey) /** * Groups the elements in the collection into the given [[Map]] using the supplied *toKey* function to calculate the key to group the elements by * * @includeFunctionBody ../../test/CollectionTest.kt groupBy */ -public inline fun java.lang.Iterable.groupByTo(result: Map>, toKey: (T) -> K) : Map> { +public inline fun Iterable.groupByTo(result: Map>, toKey: (T) -> K) : Map> { for (element in this) { val key = toKey(element) val list = result.getOrPut(key) { ArrayList() } @@ -196,14 +196,14 @@ public inline fun java.lang.Iterable.groupByTo(result: Map> * * @includeFunctionBody ../../test/CollectionTest.kt makeString */ -public inline fun java.lang.Iterable.makeString(separator: String = ", ", prefix: String = "", postfix: String = "", limit: Int = -1, truncated: String = "..."): String { +public inline fun Iterable.makeString(separator: String = ", ", prefix: String = "", postfix: String = "", limit: Int = -1, truncated: String = "..."): String { val buffer = StringBuilder() appendString(buffer, separator, prefix, postfix, limit, truncated) return buffer.toString().sure() } /** Returns a list containing the everything but the first elements that satisfy the given *predicate* */ -public inline fun > java.lang.Iterable.dropWhileTo(result: L, predicate: (T) -> Boolean) : L { +public inline fun > Iterable.dropWhileTo(result: L, predicate: (T) -> Boolean) : L { var start = true for (element in this) { if (start && predicate(element)) { @@ -217,13 +217,13 @@ public inline fun > java.lang.Iterable.dropWhileTo(result: L } /** Returns a list containing the first elements that satisfy the given *predicate* */ -public inline fun > java.lang.Iterable.takeWhileTo(result: C, predicate: (T) -> Boolean) : C { +public inline fun > Iterable.takeWhileTo(result: C, predicate: (T) -> Boolean) : C { for (element in this) if (predicate(element)) result.add(element) else break return result } /** Copies all elements into the given collection */ -public inline fun > java.lang.Iterable.toCollection(result: C) : C { +public inline fun > Iterable.toCollection(result: C) : C { for (element in this) result.add(element) return result } @@ -233,27 +233,27 @@ public inline fun > java.lang.Iterable.toCollection * * @includeFunctionBody ../../test/CollectionTest.kt reverse */ -public inline fun java.lang.Iterable.reverse() : List { +public inline fun Iterable.reverse() : List { val list = toList() Collections.reverse(list) return list } /** Copies all elements into a [[LinkedList]] */ -public inline fun java.lang.Iterable.toLinkedList() : LinkedList = toCollection(LinkedList()) +public inline fun Iterable.toLinkedList() : LinkedList = toCollection(LinkedList()) /** Copies all elements into a [[List]] */ -public inline fun java.lang.Iterable.toList() : List = toCollection(ArrayList()) +public inline fun Iterable.toList() : List = toCollection(ArrayList()) /** Copies all elements into a [[List] */ -public inline fun java.lang.Iterable.toCollection() : Collection = toCollection(ArrayList()) +public inline fun Iterable.toCollection() : Collection = toCollection(ArrayList()) /** Copies all elements into a [[Set]] */ -public inline fun java.lang.Iterable.toSet() : Set = toCollection(HashSet()) +public inline fun Iterable.toSet() : Set = toCollection(HashSet()) /** TODO figure out necessary variance/generics ninja stuff... :) -public inline fun java.lang.Iterable.toSortedList(transform: fun(T) : java.lang.Comparable<*>) : List { +public inline fun Iterable.toSortedList(transform: fun(T) : java.lang.Comparable<*>) : List { val answer = this.toList() answer.sort(transform) return answer diff --git a/libraries/stdlib/src/kotlin/JLangIterablesJVM.kt b/libraries/stdlib/src/kotlin/JLangIterablesJVM.kt index 690a90530fb..741986182f8 100644 --- a/libraries/stdlib/src/kotlin/JLangIterablesJVM.kt +++ b/libraries/stdlib/src/kotlin/JLangIterablesJVM.kt @@ -3,5 +3,5 @@ package kotlin import java.util.* /** Copies all elements into a [[SortedSet]] */ -public inline fun java.lang.Iterable.toSortedSet() : SortedSet = toCollection(TreeSet()) +public inline fun Iterable.toSortedSet() : SortedSet = toCollection(TreeSet()) diff --git a/libraries/stdlib/src/kotlin/JLangIterablesLazy.kt b/libraries/stdlib/src/kotlin/JLangIterablesLazy.kt index 4bc0e3c72cc..380d88c582a 100644 --- a/libraries/stdlib/src/kotlin/JLangIterablesLazy.kt +++ b/libraries/stdlib/src/kotlin/JLangIterablesLazy.kt @@ -16,35 +16,35 @@ import java.util.List * * @includeFunctionBody ../../test/CollectionTest.kt filter */ -public inline fun java.lang.Iterable.filter(predicate: (T) -> Boolean) : List = filterTo(ArrayList(), predicate) +public inline fun Iterable.filter(predicate: (T) -> Boolean) : List = filterTo(ArrayList(), predicate) /** * Returns a list containing all elements which do not match the given predicate * * @includeFunctionBody ../../test/CollectionTest.kt filterNot */ -public inline fun java.lang.Iterable.filterNot(predicate: (T)-> Boolean) : List = filterNotTo(ArrayList(), predicate) +public inline fun Iterable.filterNot(predicate: (T)-> Boolean) : List = filterNotTo(ArrayList(), predicate) /** * Returns a list containing all the non-*null* elements * * @includeFunctionBody ../../test/CollectionTest.kt filterNotNull */ -public inline fun java.lang.Iterable?.filterNotNull() : List = filterNotNullTo>(java.util.ArrayList()) +public inline fun Iterable?.filterNotNull() : List = filterNotNullTo>(java.util.ArrayList()) /** * Returns the result of transforming each element to one or more values which are concatenated together into a single collection * * @includeFunctionBody ../../test/CollectionTest.kt flatMap */ -public inline fun java.lang.Iterable.flatMap(transform: (T)-> Collection) : Collection = flatMapTo(ArrayList(), transform) +public inline fun Iterable.flatMap(transform: (T)-> Collection) : Collection = flatMapTo(ArrayList(), transform) /** * Creates a copy of this collection as a [[List]] with the element added at the end * * @includeFunctionBody ../../test/CollectionTest.kt plus */ -public inline fun java.lang.Iterable.plus(element: T): List { +public inline fun Iterable.plus(element: T): List { val list = toCollection(ArrayList()) list.add(element) return list @@ -56,7 +56,7 @@ public inline fun java.lang.Iterable.plus(element: T): List { * * @includeFunctionBody ../../test/CollectionTest.kt plusCollection */ -public inline fun java.lang.Iterable.plus(elements: java.lang.Iterable): List { +public inline fun Iterable.plus(elements: Iterable): List { val list = toCollection(ArrayList()) list.addAll(elements.toCollection()) return list @@ -67,7 +67,7 @@ public inline fun java.lang.Iterable.plus(elements: java.lang.Iterable * * @includeFunctionBody ../../test/CollectionTest.kt requireNoNulls */ -public inline fun java.lang.Iterable?.requireNoNulls() : List { +public inline fun Iterable?.requireNoNulls() : List { val list = ArrayList() for (element in this) { if (element == null) { @@ -84,7 +84,7 @@ public inline fun java.lang.Iterable?.requireNoNulls() : List { * * @includeFunctionBody ../../test/CollectionTest.kt drop */ -public inline fun java.lang.Iterable.drop(n: Int): List { +public inline fun Iterable.drop(n: Int): List { return dropWhile(countTo(n)) } @@ -93,14 +93,14 @@ public inline fun java.lang.Iterable.drop(n: Int): List { * * @includeFunctionBody ../../test/CollectionTest.kt dropWhile */ -public inline fun java.lang.Iterable.dropWhile(predicate: (T) -> Boolean): List = dropWhileTo(ArrayList(), predicate) +public inline fun Iterable.dropWhile(predicate: (T) -> Boolean): List = dropWhileTo(ArrayList(), predicate) /** * Returns a list containing the first *n* elements * * @includeFunctionBody ../../test/CollectionTest.kt take */ -public inline fun java.lang.Iterable.take(n: Int): List { +public inline fun Iterable.take(n: Int): List { return takeWhile(countTo(n)) } @@ -109,4 +109,4 @@ public inline fun java.lang.Iterable.take(n: Int): List { * * @includeFunctionBody ../../test/CollectionTest.kt takeWhile */ -public inline fun java.lang.Iterable.takeWhile(predicate: (T) -> Boolean): List = takeWhileTo(ArrayList(), predicate) +public inline fun Iterable.takeWhile(predicate: (T) -> Boolean): List = takeWhileTo(ArrayList(), predicate) diff --git a/libraries/stdlib/src/kotlin/JLangIterablesSpecial.kt b/libraries/stdlib/src/kotlin/JLangIterablesSpecial.kt index 0a3cd77e2c3..3c61af4e2f5 100644 --- a/libraries/stdlib/src/kotlin/JLangIterablesSpecial.kt +++ b/libraries/stdlib/src/kotlin/JLangIterablesSpecial.kt @@ -14,7 +14,7 @@ import java.util.ArrayList * If base collection implements [[Collection]] interface method [[Collection.size()]] will be used. * Otherwise, this method determines the count by iterating through the all items. */ -public fun java.lang.Iterable.count() : Int { +public fun Iterable.count() : Int { if (this is Collection) { return this.size() } @@ -38,7 +38,7 @@ private fun countTo(n: Int): (T) -> Boolean { * Will throw an exception if there are no elements */ // TODO: Specify type of the exception -public inline fun java.lang.Iterable.first() : T { +public inline fun Iterable.first() : T { if (this is AbstractList) { return this.get(0) } @@ -58,7 +58,7 @@ public inline fun java.lang.Iterable.first() : T { * @includeFunctionBody ../../test/CollectionTest.kt last */ // TODO: Specify type of the exception -public fun java.lang.Iterable.last() : T { +public fun Iterable.last() : T { if (this is List) { return this.get(this.size() - 1); } @@ -80,7 +80,7 @@ public fun java.lang.Iterable.last() : T { * If collection implements [[java.util.AbstractCollection]] an overridden implementation of the contains * method will be used. */ -public fun java.lang.Iterable.contains(item : T) : Boolean { +public fun Iterable.contains(item : T) : Boolean { if (this is java.util.AbstractCollection) { return this.contains(item); } @@ -99,7 +99,7 @@ public fun java.lang.Iterable.contains(item : T) : Boolean { * * @includeFunctionBody ../../test/ListTest.kt withIndices */ -public fun java.lang.Iterable.withIndices(): java.util.List<#(Int, T)> { +public fun Iterable.withIndices(): java.util.List<#(Int, T)> { val answer = ArrayList<#(Int, T)>() var nextIndex = 0 for (e in this) { @@ -109,13 +109,13 @@ public fun java.lang.Iterable.withIndices(): java.util.List<#(Int, T)> { return answer } -public inline fun > java.lang.Iterable.sort() : List { +public inline fun > Iterable.sort() : List { val list = toList() java.util.Collections.sort(list) return list } -public inline fun java.lang.Iterable.sort(comparator: java.util.Comparator) : List { +public inline fun Iterable.sort(comparator: java.util.Comparator) : List { val list = toList() java.util.Collections.sort(list, comparator) return list diff --git a/libraries/stdlib/src/kotlin/JLangIterablesSpecialJVM.kt b/libraries/stdlib/src/kotlin/JLangIterablesSpecialJVM.kt index 5b7f7fac6fe..12a99979287 100644 --- a/libraries/stdlib/src/kotlin/JLangIterablesSpecialJVM.kt +++ b/libraries/stdlib/src/kotlin/JLangIterablesSpecialJVM.kt @@ -15,7 +15,7 @@ import java.util.List * * @includeFunctionBody ../../test/CollectionTest.kt sortBy */ -public inline fun > java.lang.Iterable.sortBy(f: (T) -> R): java.util.List { +public inline fun > Iterable.sortBy(f: (T) -> R): java.util.List { val sortedList = this.toList() val sortBy: Comparator = comparator {(x: T, y: T) -> val xr = f(x) diff --git a/libraries/stdlib/src/kotlin/JUtil.kt b/libraries/stdlib/src/kotlin/JUtil.kt index a6b0cfc5fdf..239b4ed05fe 100644 --- a/libraries/stdlib/src/kotlin/JUtil.kt +++ b/libraries/stdlib/src/kotlin/JUtil.kt @@ -36,9 +36,9 @@ public inline fun java.util.Collection?.orEmpty() : Collection /** TODO these functions don't work when they generate the Array versions when they are in JLIterables */ -public inline fun > java.lang.Iterable.toSortedList() : List = toList().sort() +public inline fun > Iterable.toSortedList() : List = toList().sort() -public inline fun > java.lang.Iterable.toSortedList(comparator: java.util.Comparator) : List = toList().sort(comparator) +public inline fun > Iterable.toSortedList(comparator: java.util.Comparator) : List = toList().sort(comparator) // List APIs diff --git a/libraries/stdlib/src/kotlin/JUtilMaps.kt b/libraries/stdlib/src/kotlin/JUtilMaps.kt index 85a6ae84aa8..ef0ffa60665 100644 --- a/libraries/stdlib/src/kotlin/JUtilMaps.kt +++ b/libraries/stdlib/src/kotlin/JUtilMaps.kt @@ -69,7 +69,7 @@ public inline fun java.util.Map.getOrPut(key: K, defaultValue: ()-> V * * @includeFunctionBody ../../test/MapTest.kt iterateWithProperties */ -public inline fun java.util.Map.iterator(): java.util.Iterator> { +public inline fun java.util.Map.iterator(): Iterator> { val entrySet = this.entrySet()!! return entrySet.iterator()!! } diff --git a/libraries/stdlib/src/kotlin/Standard.kt b/libraries/stdlib/src/kotlin/Standard.kt index b8e8a1c90bc..a144f2d5ee8 100644 --- a/libraries/stdlib/src/kotlin/Standard.kt +++ b/libraries/stdlib/src/kotlin/Standard.kt @@ -5,17 +5,11 @@ import java.util.Collection import java.util.HashSet import java.util.LinkedList -/** -Helper to make java.util.Iterator usable in for -*/ -public inline fun java.util.Iterator.iterator() : java.util.Iterator = this - /** Helper to make java.util.Enumeration usable in for */ public fun java.util.Enumeration.iterator(): Iterator = object: Iterator { - override val hasNext: Boolean - get() = hasMoreElements() + override fun hasNext(): Boolean = hasMoreElements() public override fun next() : T = nextElement().sure() } @@ -27,22 +21,19 @@ public fun java.util.Enumeration.iterator(): Iterator = object: Iterat /** Add iterated elements to given container */ +/* public fun > Iterator.toCollection(container: U) : U { - while(hasNext) + while(hasNext()) container.add(next()) return container } +*/ /** Add iterated elements to java.util.ArrayList */ public inline fun Iterator.toArrayList() : ArrayList = toCollection(ArrayList()) -/** -Add iterated elements to java.util.LinkedList -*/ -public inline fun Iterator.toLinkedList() : LinkedList = toCollection(LinkedList()) - /** Add iterated elements to java.util.HashSet */ diff --git a/libraries/stdlib/src/kotlin/StandardJVM.kt b/libraries/stdlib/src/kotlin/StandardJVM.kt index 6986424b2e8..853481bbcc6 100644 --- a/libraries/stdlib/src/kotlin/StandardJVM.kt +++ b/libraries/stdlib/src/kotlin/StandardJVM.kt @@ -17,12 +17,6 @@ import java.util.concurrent.Callable */ public inline fun Iterator.toLinkedSet() : LinkedHashSet = toCollection(LinkedHashSet()) -/** - * Add iterated elements to [[SortedSet]] to ensure iteration is in the order of the default comparator - * for the type - */ -public inline fun Iterator.toSortedSet() : SortedSet = toCollection(TreeSet()) - /** * Add iterated elements to [[SortedSet]] with the given *comparator* to ensure iteration is in the order of the given comparator */ diff --git a/libraries/stdlib/src/kotlin/dom/Dom.kt b/libraries/stdlib/src/kotlin/dom/Dom.kt index 80dfd5894f9..fa2b9030511 100644 --- a/libraries/stdlib/src/kotlin/dom/Dom.kt +++ b/libraries/stdlib/src/kotlin/dom/Dom.kt @@ -4,6 +4,7 @@ import kotlin.* import kotlin.support.* import java.util.* import org.w3c.dom.* +import jet.Iterator // TODO should not need this - its here for the JS stuff import java.lang.IllegalArgumentException @@ -330,7 +331,7 @@ fun NodeList?.toXmlString(xmlDeclaration: Boolean = false): String { } /** Converts the collection of nodes to an XML String */ -public fun nodesToXmlString(nodes: java.lang.Iterable, xmlDeclaration: Boolean = false): String { +public fun nodesToXmlString(nodes: Iterable, xmlDeclaration: Boolean = false): String { // TODO this should work... // return this.map{it.toXmlString()}.makeString("") val builder = StringBuilder() diff --git a/libraries/stdlib/src/kotlin/dom/DomJVM.kt b/libraries/stdlib/src/kotlin/dom/DomJVM.kt index b4b3a633749..8cf42bf6104 100644 --- a/libraries/stdlib/src/kotlin/dom/DomJVM.kt +++ b/libraries/stdlib/src/kotlin/dom/DomJVM.kt @@ -8,6 +8,7 @@ import java.io.InputStream import java.io.StringWriter import java.io.Writer import java.util.* +import jet.Iterator import javax.xml.parsers.DocumentBuilder import javax.xml.parsers.DocumentBuilderFactory import javax.xml.transform.OutputKeys diff --git a/libraries/stdlib/src/kotlin/support/AbstractIterator.kt b/libraries/stdlib/src/kotlin/support/AbstractIterator.kt index 1884f9fed6c..72983ef1cd3 100644 --- a/libraries/stdlib/src/kotlin/support/AbstractIterator.kt +++ b/libraries/stdlib/src/kotlin/support/AbstractIterator.kt @@ -17,7 +17,7 @@ object State { * A base class to simplify implementing iterators so that implementations only have to implement [[computeNext()]] * to implement the iterator, calling [[done()]] when the iteration is complete. */ -public abstract class AbstractIterator: java.util.Iterator { +public abstract class AbstractIterator: Iterator { private var state = State.NotReady private var next: T? = null @@ -36,10 +36,6 @@ public abstract class AbstractIterator: java.util.Iterator { return next.sure() } - override fun remove() { - throw UnsupportedOperationException() - } - /** Returns the next element in the iteration without advancing the iteration */ fun peek(): T { if (!hasNext()) throw NoSuchElementException() @@ -94,15 +90,15 @@ class FunctionIterator(val nextFunction: () -> T?): AbstractIterator() { } /** An [[Iterator]] which iterates over a number of iterators in sequence */ -class CompositeIterator(vararg iterators: java.util.Iterator): AbstractIterator() { +class CompositeIterator(vararg iterators: Iterator): AbstractIterator() { val iteratorsIter = iterators.iterator() - var currentIter: java.util.Iterator? = null + var currentIter: Iterator? = null override protected fun computeNext(): Unit { while (true) { if (currentIter == null) { - if (iteratorsIter.hasNext) { + if (iteratorsIter.hasNext()) { currentIter = iteratorsIter.next() } else { done() diff --git a/libraries/stdlib/test/CollectionApiCheck.kt b/libraries/stdlib/test/CollectionApiCheck.kt index 4e23ead9e21..615ec8ee36e 100644 --- a/libraries/stdlib/test/CollectionApiCheck.kt +++ b/libraries/stdlib/test/CollectionApiCheck.kt @@ -23,7 +23,7 @@ trait Traversable { fun forEach(operation: (element: T)-> Unit) /** Returns a new collection containing the results of applying the given function to each element in this collection */ - fun java.lang.Iterable.map(transform : (T)-> R) : Collection + fun Iterable.map(transform : (T)-> R) : Collection } /** diff --git a/libraries/stdlib/test/CollectionJVMTest.kt b/libraries/stdlib/test/CollectionJVMTest.kt index e2cc1196226..a2844828ae4 100644 --- a/libraries/stdlib/test/CollectionJVMTest.kt +++ b/libraries/stdlib/test/CollectionJVMTest.kt @@ -116,7 +116,7 @@ class CollectionJVMTest { test fun sortFunctionShouldReturnSortedCopyForIterable() { // TODO fixme Some sort of in/out variance thing - or an issue with Java interop? todo { -// val list : java.lang.Iterable = arrayList(2, 3, 1) +// val list : Iterable = arrayList(2, 3, 1) // expect(arrayList(1, 2, 3)) { list.sort() } // expect(arrayList(2, 3, 1)) { list } } diff --git a/libraries/stdlib/test/CollectionTest.kt b/libraries/stdlib/test/CollectionTest.kt index dbc43e95777..9e8a8ca777e 100644 --- a/libraries/stdlib/test/CollectionTest.kt +++ b/libraries/stdlib/test/CollectionTest.kt @@ -3,6 +3,7 @@ package test.collections import kotlin.test.* import java.util.* +import jet.Iterator import org.junit.Test as test @@ -272,7 +273,7 @@ class CollectionTest { } test fun reverseFunctionShouldReturnReversedCopyForIterable() { - val iterable : java.lang.Iterable = arrayList(2, 3, 1) + val iterable : Iterable = arrayList(2, 3, 1) expect(arrayList(1, 3, 2)) { iterable.reverse() } expect(arrayList(2, 3, 1)) { iterable } } @@ -387,10 +388,10 @@ class CollectionTest { // assertFalse(IterableWrapper(linkedList()).contains(15)) } - class IterableWrapper(collection : java.lang.Iterable) : java.lang.Iterable { + class IterableWrapper(collection : Iterable) : Iterable { private val collection = collection - override fun iterator(): java.util.Iterator { + override fun iterator(): Iterator { return collection.iterator().sure() } } diff --git a/libraries/stdlib/test/iterators/IteratorsTest.kt b/libraries/stdlib/test/iterators/IteratorsTest.kt index eefe4c318cd..09764c9bac7 100644 --- a/libraries/stdlib/test/iterators/IteratorsTest.kt +++ b/libraries/stdlib/test/iterators/IteratorsTest.kt @@ -4,7 +4,7 @@ import kotlin.test.assertEquals import org.junit.Test as test import kotlin.test.failsWith -fun fibonacci(): java.util.Iterator { +fun fibonacci(): Iterator { // fibonacci terms var index = 0; var a = 0; var b = 1 return iterate { when (index++) { 0 -> a; 1 -> b; else -> { val result = a + b; a = b; b = result; result } } } diff --git a/libraries/stdlib/test/regressions/Kt2495Test.kt b/libraries/stdlib/test/regressions/Kt2495Test.kt index 0ced8cb84a1..25da409eb36 100644 --- a/libraries/stdlib/test/regressions/Kt2495Test.kt +++ b/libraries/stdlib/test/regressions/Kt2495Test.kt @@ -3,7 +3,7 @@ package regressions import kotlin.test.assertEquals import org.junit.Test as test -fun f(xs: java.util.Iterator): Int { +fun f(xs: Iterator): Int { var answer = 0 for (x in xs) { answer += x