diff --git a/js/js.libraries/src/core/collections/AbstractMutableCollection.kt b/js/js.libraries/src/core/collections/AbstractMutableCollection.kt index b64026da511..1ec443bcc37 100644 --- a/js/js.libraries/src/core/collections/AbstractMutableCollection.kt +++ b/js/js.libraries/src/core/collections/AbstractMutableCollection.kt @@ -19,7 +19,7 @@ package kotlin.collections public abstract class AbstractMutableCollection protected constructor() : AbstractCollection(), MutableCollection { - override fun add(element: E): Boolean = throw UnsupportedOperationException("Add not supported on this collection") + abstract override fun add(element: E): Boolean override fun remove(element: E): Boolean { val iterator = iterator() diff --git a/js/js.libraries/src/core/collections/AbstractMutableList.kt b/js/js.libraries/src/core/collections/AbstractMutableList.kt index 5646e5929e2..e2b0f2c74c5 100644 --- a/js/js.libraries/src/core/collections/AbstractMutableList.kt +++ b/js/js.libraries/src/core/collections/AbstractMutableList.kt @@ -24,9 +24,9 @@ package kotlin.collections public abstract class AbstractMutableList protected constructor() : AbstractMutableCollection(), MutableList { protected var modCount: Int = 0 - override fun add(index: Int, element: E): Unit = throw UnsupportedOperationException("Add not supported on this list") - override fun removeAt(index: Int): E = throw UnsupportedOperationException("Remove not supported on this list") - override fun set(index: Int, element: E): E = throw UnsupportedOperationException("Set not supported on this list") + abstract override fun add(index: Int, element: E): Unit + abstract override fun removeAt(index: Int): E + abstract override fun set(index: Int, element: E): E override fun add(element: E): Boolean { add(size, element) diff --git a/js/js.libraries/src/core/collections/AbstractMutableMap.kt b/js/js.libraries/src/core/collections/AbstractMutableMap.kt index fb73d13faf7..1e935455de3 100644 --- a/js/js.libraries/src/core/collections/AbstractMutableMap.kt +++ b/js/js.libraries/src/core/collections/AbstractMutableMap.kt @@ -52,6 +52,7 @@ public abstract class AbstractMutableMap protected constructor() : Abstrac override val keys: MutableSet get() { if (_keys == null) { _keys = object : AbstractMutableSet() { + override fun add(element: K): Boolean = throw UnsupportedOperationException("Add is not supported on keys") override fun clear() { this@AbstractMutableMap.clear() } @@ -81,9 +82,7 @@ public abstract class AbstractMutableMap protected constructor() : Abstrac return _keys!! } - override fun put(key: K, value: V): V? { - throw UnsupportedOperationException("Put not supported on this map") - } + abstract override fun put(key: K, value: V): V? override fun putAll(from: Map) { for ((key, value) in from) { @@ -95,6 +94,7 @@ public abstract class AbstractMutableMap protected constructor() : Abstrac override val values: MutableCollection get() { if (_values == null) { _values = object : AbstractMutableCollection() { + override fun add(element: V): Boolean = throw UnsupportedOperationException("Add is not supported on values") override fun clear() = this@AbstractMutableMap.clear() override operator fun contains(element: V): Boolean = containsValue(element) diff --git a/js/js.libraries/src/core/collections/HashMap.kt b/js/js.libraries/src/core/collections/HashMap.kt index bcfb5195d8a..b0b0132e94e 100644 --- a/js/js.libraries/src/core/collections/HashMap.kt +++ b/js/js.libraries/src/core/collections/HashMap.kt @@ -27,6 +27,7 @@ public open class HashMap : AbstractMutableMap { private inner class EntrySet : AbstractMutableSet>() { + override fun add(element: MutableEntry): Boolean = throw UnsupportedOperationException("Add is not supported on entries") override fun clear() { this@HashMap.clear() } diff --git a/js/js.libraries/src/core/collections/LinkedHashMap.kt b/js/js.libraries/src/core/collections/LinkedHashMap.kt index b1ff86c4cf1..937868e1e1a 100644 --- a/js/js.libraries/src/core/collections/LinkedHashMap.kt +++ b/js/js.libraries/src/core/collections/LinkedHashMap.kt @@ -80,6 +80,7 @@ public open class LinkedHashMap : HashMap, Map { } } + override fun add(element: MutableEntry): Boolean = throw UnsupportedOperationException("Add is not supported on entries") override fun clear() { this@LinkedHashMap.clear() } diff --git a/libraries/stdlib/src/kotlin/collections/AbstractMutableCollection.kt b/libraries/stdlib/src/kotlin/collections/AbstractMutableCollection.kt new file mode 100644 index 00000000000..3a254603c3b --- /dev/null +++ b/libraries/stdlib/src/kotlin/collections/AbstractMutableCollection.kt @@ -0,0 +1,8 @@ +@file:JvmVersion +package kotlin.collections + +import java.util.AbstractCollection + +public abstract class AbstractMutableCollection protected constructor() : AbstractCollection() { + abstract override fun add(element: E): Boolean +} \ No newline at end of file diff --git a/libraries/stdlib/src/kotlin/collections/AbstractMutableList.kt b/libraries/stdlib/src/kotlin/collections/AbstractMutableList.kt new file mode 100644 index 00000000000..95fd960d282 --- /dev/null +++ b/libraries/stdlib/src/kotlin/collections/AbstractMutableList.kt @@ -0,0 +1,10 @@ +@file:JvmVersion +package kotlin.collections + +import java.util.AbstractList + +public abstract class AbstractMutableList protected constructor() : AbstractList() { + abstract override fun set(index: Int, element: E): E + abstract override fun removeAt(index: Int): E + abstract override fun add(index: Int, element: E) +} \ No newline at end of file diff --git a/libraries/stdlib/src/kotlin/collections/AbstractMutableMap.kt b/libraries/stdlib/src/kotlin/collections/AbstractMutableMap.kt new file mode 100644 index 00000000000..fec910b1660 --- /dev/null +++ b/libraries/stdlib/src/kotlin/collections/AbstractMutableMap.kt @@ -0,0 +1,8 @@ +@file:JvmVersion +package kotlin.collections + +import java.util.AbstractMap + +public abstract class AbstractMutableMap protected constructor() : AbstractMap() { + abstract override fun put(key: K, value: V): V? +} \ No newline at end of file diff --git a/libraries/stdlib/src/kotlin/collections/AbstractMutableSet.kt b/libraries/stdlib/src/kotlin/collections/AbstractMutableSet.kt new file mode 100644 index 00000000000..532e5e21787 --- /dev/null +++ b/libraries/stdlib/src/kotlin/collections/AbstractMutableSet.kt @@ -0,0 +1,8 @@ +@file:JvmVersion +package kotlin.collections + +import java.util.AbstractSet + +public abstract class AbstractMutableSet protected constructor() : AbstractSet() { + // nothing to make abstract, maybe leave it typealias then? +} \ No newline at end of file diff --git a/libraries/stdlib/src/kotlin/collections/TypeAliases.kt b/libraries/stdlib/src/kotlin/collections/TypeAliases.kt deleted file mode 100644 index 0e5f12efadd..00000000000 --- a/libraries/stdlib/src/kotlin/collections/TypeAliases.kt +++ /dev/null @@ -1,7 +0,0 @@ -@file:JvmVersion -package kotlin.collections - -public typealias AbstractMutableCollection = java.util.AbstractCollection -public typealias AbstractMutableList = java.util.AbstractList -public typealias AbstractMutableSet = java.util.AbstractSet -public typealias AbstractMutableMap = java.util.AbstractMap \ No newline at end of file diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib.txt index 1898076611e..b9faee8202b 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib.txt @@ -149,6 +149,42 @@ public abstract class kotlin/collections/AbstractMap : java/util/Map, kotlin/jvm public final fun values ()Ljava/util/Collection; } +public abstract class kotlin/collections/AbstractMutableCollection : java/util/AbstractCollection { + protected fun ()V + public abstract fun add (Ljava/lang/Object;)Z + public abstract fun getSize ()I + public final fun size ()I +} + +public abstract class kotlin/collections/AbstractMutableList : java/util/AbstractList { + protected fun ()V + public abstract fun add (ILjava/lang/Object;)V + public abstract fun getSize ()I + public final fun remove (I)Ljava/lang/Object; + public abstract fun removeAt (I)Ljava/lang/Object; + public abstract fun set (ILjava/lang/Object;)Ljava/lang/Object; + public final fun size ()I +} + +public abstract class kotlin/collections/AbstractMutableMap : java/util/AbstractMap { + protected fun ()V + public final fun entrySet ()Ljava/util/Set; + public abstract fun getEntries ()Ljava/util/Set; + public fun getKeys ()Ljava/util/Set; + public fun getSize ()I + public fun getValues ()Ljava/util/Collection; + public final fun keySet ()Ljava/util/Set; + public abstract fun put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + public final fun size ()I + public final fun values ()Ljava/util/Collection; +} + +public abstract class kotlin/collections/AbstractMutableSet : java/util/AbstractSet { + protected fun ()V + public abstract fun getSize ()I + public final fun size ()I +} + public abstract class kotlin/collections/AbstractSet : kotlin/collections/AbstractCollection, java/util/Set, kotlin/jvm/internal/markers/KMappedMarker { public static final field Companion Lkotlin/collections/AbstractSet$Companion; protected fun ()V