Introduce RandomAccess to JS.
Make EmptyList support RandomAccess. #KT-10794
This commit is contained in:
@@ -31,6 +31,9 @@ public inline fun <T> Comparator(crossinline comparison: (T, T) -> Int): Compara
|
||||
override fun compare(obj1: T, obj2: T): Int = comparison(obj1, obj2)
|
||||
}
|
||||
|
||||
@library
|
||||
public interface RandomAccess
|
||||
|
||||
@library
|
||||
public abstract class AbstractCollection<E>() : MutableCollection<E> {
|
||||
override fun isEmpty(): Boolean = noImpl
|
||||
@@ -79,7 +82,7 @@ public abstract class AbstractList<E>() : AbstractCollection<E>(), MutableList<E
|
||||
}
|
||||
|
||||
@library
|
||||
public open class ArrayList<E>(capacity: Int = 0) : AbstractList<E>() {
|
||||
public open class ArrayList<E>(capacity: Int = 0) : AbstractList<E>(), RandomAccess {
|
||||
override fun get(index: Int): E = noImpl
|
||||
override val size: Int get() = noImpl
|
||||
}
|
||||
|
||||
+3
-1
@@ -350,6 +350,8 @@
|
||||
}
|
||||
);
|
||||
|
||||
Kotlin.RandomAccess = Kotlin.createTraitNow(null);
|
||||
|
||||
Kotlin.PropertyMetadata = Kotlin.createClassNow(null,
|
||||
function (name) {
|
||||
this.name = name;
|
||||
@@ -566,7 +568,7 @@
|
||||
//TODO: should be JS Array-like (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Predefined_Core_Objects#Working_with_Array-like_objects)
|
||||
lazyInitClasses.ArrayList = Kotlin.createClass(
|
||||
function () {
|
||||
return [Kotlin.AbstractList];
|
||||
return [Kotlin.AbstractList, Kotlin.RandomAccess];
|
||||
},
|
||||
function () {
|
||||
this.array = [];
|
||||
|
||||
@@ -16,7 +16,7 @@ internal object EmptyIterator : ListIterator<Nothing> {
|
||||
override fun previous(): Nothing = throw NoSuchElementException()
|
||||
}
|
||||
|
||||
internal object EmptyList : List<Nothing>, Serializable {
|
||||
internal object EmptyList : List<Nothing>, Serializable, RandomAccess {
|
||||
override fun equals(other: Any?): Boolean = other is List<*> && other.isEmpty()
|
||||
override fun hashCode(): Int = 1
|
||||
override fun toString(): String = "[]"
|
||||
|
||||
@@ -854,4 +854,11 @@ class CollectionTest {
|
||||
// we need toString() inside pattern because of KT-8666
|
||||
assertEquals("[1, a, null, ${Long.MAX_VALUE.toString()}]", listOf(1, "a", null, Long.MAX_VALUE).toString())
|
||||
}
|
||||
|
||||
@test fun randomAccess() {
|
||||
assertTrue(arrayListOf(1) is RandomAccess, "ArrayList is RandomAccess")
|
||||
assertTrue(listOf(1, 2) is RandomAccess, "Default read-only list implementation is RandomAccess")
|
||||
assertTrue(listOf(1) is RandomAccess, "Default singleton list is RandomAccess")
|
||||
assertTrue(emptyList<Int>() is RandomAccess, "Empty list is RandomAccess")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user