From 50643a300c25a1076366cc41f7c187e666d3c975 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Thu, 11 Jul 2024 14:54:13 -0700 Subject: [PATCH] Undo breaking change for ReadableMap.entryIterator for Kotlin consumers. (#45388) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/45388 This undos a breaking change we're about to ship in 0.75, where Kotlin users where forced to update this callsite to be `.getEntryIterator`. This re-introduces a `entryIterator` val so both Kotlin and Java compatibility are retained. Changelog: [Android] [Fixed] - Undo breaking change for ReadableMap.entryIterator for Kotlin consumers Reviewed By: alanleedev Differential Revision: D59637925 fbshipit-source-id: b674df86e056f17791d9cabe28557529886f1c93 --- .../com/facebook/react/bridge/ReadableMap.kt | 4 +- .../react/bridge/ReadableNativeMap.kt | 46 +++++++++---------- .../facebook/react/uimanager/FilterHelper.kt | 6 +-- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableMap.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableMap.kt index a71a91119f3..a8319fcecae 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableMap.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableMap.kt @@ -16,6 +16,8 @@ import kotlin.collections.Map * Kotlin. */ public interface ReadableMap { + public val entryIterator: Iterator> + public fun getArray(name: String): ReadableArray? public fun getBoolean(name: String): Boolean @@ -24,8 +26,6 @@ public interface ReadableMap { public fun getDynamic(name: String): Dynamic - public fun getEntryIterator(): Iterator> - public fun getInt(name: String): Int public fun getLong(name: String): Long diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.kt index 1ea1177e02b..700088f1093 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.kt @@ -110,36 +110,36 @@ public open class ReadableNativeMap protected constructor(hybridData: HybridData override fun getDynamic(name: String): Dynamic = DynamicFromMap.create(this, name) - override fun getEntryIterator(): Iterator> { - synchronized(this) { - val iteratorKeys = keys - val iteratorValues = importValues() - jniPassCounter++ - return object : Iterator> { - var currentIndex = 0 + override val entryIterator: Iterator> + get() = + synchronized(this) { + val iteratorKeys = keys + val iteratorValues = importValues() + jniPassCounter++ + return object : Iterator> { + var currentIndex = 0 - override fun hasNext(): Boolean { - return currentIndex < iteratorKeys.size - } + override fun hasNext(): Boolean { + return currentIndex < iteratorKeys.size + } - override fun next(): Map.Entry { - val index = currentIndex++ - return object : MutableMap.MutableEntry { - override val key: String - get() = iteratorKeys[index] + override fun next(): Map.Entry { + val index = currentIndex++ + return object : MutableMap.MutableEntry { + override val key: String + get() = iteratorKeys[index] - override val value: Any - get() = iteratorValues[index] + override val value: Any + get() = iteratorValues[index] - override fun setValue(newValue: Any): Any { - throw UnsupportedOperationException( - "Can't set a value while iterating over a ReadableNativeMap") + override fun setValue(newValue: Any): Any { + throw UnsupportedOperationException( + "Can't set a value while iterating over a ReadableNativeMap") + } + } } } } - } - } - } override fun keySetIterator(): ReadableMapKeySetIterator { val iteratorKeys = keys diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt index c7cca54c52d..78552ef8c7a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt @@ -24,7 +24,7 @@ internal object FilterHelper { filters ?: return null var chainedEffects: RenderEffect? = null for (i in 0 until filters.size()) { - val filter = filters.getMap(i).getEntryIterator().next() + val filter = filters.getMap(i).entryIterator.next() val filterName = filter.key val amount = (filter.value as Double).toFloat() @@ -51,7 +51,7 @@ internal object FilterHelper { // New ColorMatrix objects represent the identity matrix val resultColorMatrix = ColorMatrix() for (i in 0 until filters.size()) { - val filter = filters.getMap(i).getEntryIterator().next() + val filter = filters.getMap(i).entryIterator.next() val filterName = filter.key val amount = (filter.value as Double).toFloat() @@ -78,7 +78,7 @@ internal object FilterHelper { public fun isOnlyColorMatrixFilters(filters: ReadableArray?): Boolean { filters ?: return false for (i in 0 until filters.size()) { - val filter = filters.getMap(i).getEntryIterator().next() + val filter = filters.getMap(i).entryIterator.next() val filterName = filter.key if (filterName == "blur") { return false