From 5f16fb2e4d45b971ae285117ab1ea4c87dc43a4d Mon Sep 17 00:00:00 2001 From: Abduqodiri Qurbonzoda Date: Fri, 12 Jan 2024 18:36:17 +0500 Subject: [PATCH] Introduce Common protected property AbstractMutableList.modCount #KT-57150 --- .../src/kotlin/collections/AbstractMutableList.kt | 14 ++++++++++++++ .../src/kotlin/collections/AbstractMutableList.kt | 12 +++++++++++- .../src/kotlin/collections/AbstractMutableList.kt | 2 +- .../src/kotlin/collections/AbstractMutableList.kt | 2 +- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/libraries/stdlib/common/src/kotlin/collections/AbstractMutableList.kt b/libraries/stdlib/common/src/kotlin/collections/AbstractMutableList.kt index 494b0b21ece..0be29a22e5a 100644 --- a/libraries/stdlib/common/src/kotlin/collections/AbstractMutableList.kt +++ b/libraries/stdlib/common/src/kotlin/collections/AbstractMutableList.kt @@ -11,6 +11,20 @@ package kotlin.collections * @param E the type of elements contained in the list. The list is invariant in its element type. */ public expect abstract class AbstractMutableList : MutableList { + /** + * The number of times this list is structurally modified. + * + * A modification is considered to be structural if it changes the list size, + * or otherwise changes it in a way that iterations in progress may return incorrect results. + * + * This value can be used by iterators returned by [iterator] and [listIterator] + * to provide fail-fast behavoir when a concurrent modification is detected during iteration. + * [ConcurrentModificationException] will be thrown in this case. + */ + // TODO: Should be @SinceKotlin("2.0"), see KT-64904 + @SinceKotlin("1.9") + protected var modCount: Int + protected constructor() /** diff --git a/libraries/stdlib/js/src/kotlin/collections/AbstractMutableList.kt b/libraries/stdlib/js/src/kotlin/collections/AbstractMutableList.kt index fff0be233fd..24592da55f0 100644 --- a/libraries/stdlib/js/src/kotlin/collections/AbstractMutableList.kt +++ b/libraries/stdlib/js/src/kotlin/collections/AbstractMutableList.kt @@ -18,7 +18,17 @@ package kotlin.collections * @param E the type of elements contained in the list. The list is invariant in its element type. */ public actual abstract class AbstractMutableList protected actual constructor() : AbstractMutableCollection(), MutableList { - protected var modCount: Int = 0 + /** + * The number of times this list is structurally modified. + * + * A modification is considered to be structural if it changes the list size, + * or otherwise changes it in a way that iterations in progress may return incorrect results. + * + * This value can be used by iterators returned by [iterator] and [listIterator] + * to provide fail-fast behavoir when a concurrent modification is detected during iteration. + * [ConcurrentModificationException] will be thrown in this case. + */ + protected actual var modCount: Int = 0 abstract override fun add(index: Int, element: E): Unit abstract override fun removeAt(index: Int): E diff --git a/libraries/stdlib/jvm/src/kotlin/collections/AbstractMutableList.kt b/libraries/stdlib/jvm/src/kotlin/collections/AbstractMutableList.kt index 3522845336a..4adec323113 100644 --- a/libraries/stdlib/jvm/src/kotlin/collections/AbstractMutableList.kt +++ b/libraries/stdlib/jvm/src/kotlin/collections/AbstractMutableList.kt @@ -13,7 +13,7 @@ import java.util.AbstractList * @param E the type of elements contained in the list. The list is invariant in its element type. */ @SinceKotlin("1.1") -// removeRange: Kotlin `protected` visibility is different from Java +// removeRange, modCount: Kotlin `protected` visibility is different from Java @Suppress("NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS") public actual abstract class AbstractMutableList protected actual constructor() : MutableList, AbstractList() { /** diff --git a/libraries/stdlib/native-wasm/src/kotlin/collections/AbstractMutableList.kt b/libraries/stdlib/native-wasm/src/kotlin/collections/AbstractMutableList.kt index 0590336eafc..2b41ce2fbcc 100644 --- a/libraries/stdlib/native-wasm/src/kotlin/collections/AbstractMutableList.kt +++ b/libraries/stdlib/native-wasm/src/kotlin/collections/AbstractMutableList.kt @@ -28,7 +28,7 @@ public actual abstract class AbstractMutableList protected actual constructor * to provide fail-fast behavoir when a concurrent modification is detected during iteration. * [ConcurrentModificationException] will be thrown in this case. */ - protected var modCount: Int = 0 + protected actual var modCount: Int = 0 abstract override fun add(index: Int, element: E): Unit abstract override fun removeAt(index: Int): E