Skip to content

Commit 145c72f

Browse files
javachefacebook-github-bot
authored andcommitted
Convert com.facebook.react.bridge.ReadableNativeArray to Kotlin (#47484)
Summary: Pull Request resolved: #47484 Small change to types in the base class: all non-primitives return optional from ReadableArray, which matches the semantics in ReadableMap. We already rely on this in some cases, but the current nullability annotations were incorrect, and null values from the array would be passed through from `getMap` and `getArray`. Changelog: [Android][Breaking] ReadableArray non-primitive getters are now correctly typed as optional Reviewed By: Abbondanzo Differential Revision: D65596278 fbshipit-source-id: 5574e9000b07de292bd0da5f1b071aac0eb331d6
1 parent 3575e21 commit 145c72f

File tree

21 files changed

+139
-228
lines changed

21 files changed

+139
-228
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1482,7 +1482,7 @@ public class com/facebook/react/bridge/ReadableNativeArray : com/facebook/react/
14821482
public fun getDouble (I)D
14831483
public fun getDynamic (I)Lcom/facebook/react/bridge/Dynamic;
14841484
public fun getInt (I)I
1485-
public static fun getJNIPassCounter ()I
1485+
public static final fun getJNIPassCounter ()I
14861486
public fun getLong (I)J
14871487
public synthetic fun getMap (I)Lcom/facebook/react/bridge/ReadableMap;
14881488
public fun getMap (I)Lcom/facebook/react/bridge/ReadableNativeMap;

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public class InterpolationAnimatedNode(config: ReadableMap) : ValueAnimatedNode(
130130
val outputRange = arrayOfNulls<DoubleArray>(size)
131131

132132
// Match the first pattern into a List, since we don't know its length yet
133-
var m = numericPattern.matcher(array.getString(0))
133+
var m = numericPattern.matcher(array.getString(0) ?: "")
134134
val firstOutputRange: MutableList<Double> = ArrayList()
135135
while (m.find()) {
136136
firstOutputRange.add(m.group().toDouble())
@@ -143,7 +143,7 @@ public class InterpolationAnimatedNode(config: ReadableMap) : ValueAnimatedNode(
143143
for (i in 1 until size) {
144144
val outputArr = DoubleArray(firstOutputRangeArr.size)
145145
var j = 0
146-
m = numericPattern.matcher(array.getString(i))
146+
m = numericPattern.matcher(array.getString(i) ?: "")
147147
while (m.find() && j < firstOutputRangeArr.size) {
148148
outputArr[j++] = m.group().toDouble()
149149
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/ObjectAnimatedNode.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ internal class ObjectAnimatedNode(
4545
ReadableType.String -> result.pushString(source.getString(i))
4646
ReadableType.Map -> {
4747
val map = source.getMap(i)
48-
if (map.hasKey(NODE_TAG_KEY) && map.getType(NODE_TAG_KEY) == ReadableType.Number) {
48+
if (map != null &&
49+
map.hasKey(NODE_TAG_KEY) &&
50+
map.getType(NODE_TAG_KEY) == ReadableType.Number) {
4951
val node = nativeAnimatedNodesManager.getNodeById(map.getInt(NODE_TAG_KEY))
5052
requireNotNull(node) { "Mapped value node does not exist" }
5153
if (node is ValueAnimatedNode) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/TransformAnimatedNode.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ internal class TransformAnimatedNode(
1919
config: ReadableMap,
2020
private val nativeAnimatedNodesManager: NativeAnimatedNodesManager
2121
) : AnimatedNode() {
22-
private val transformConfigs: MutableList<TransformConfig>
22+
private val transformConfigs: List<TransformConfig>
2323

2424
init {
2525
val transforms = config.getArray("transforms")
2626
transformConfigs =
27-
if (transforms == null) mutableListOf()
27+
if (transforms == null) emptyList()
2828
else
29-
MutableList<TransformConfig>(transforms.size()) { i ->
30-
val transformConfigMap = transforms.getMap(i)
29+
List<TransformConfig>(transforms.size()) { i ->
30+
val transformConfigMap = checkNotNull(transforms.getMap(i))
3131
val property = transformConfigMap.getString("property")
3232
val type = transformConfigMap.getString("type")
3333
if (type == "animated") {
@@ -46,7 +46,7 @@ internal class TransformAnimatedNode(
4646

4747
public fun collectViewUpdates(propsMap: JavaOnlyMap) {
4848
val transforms =
49-
MutableList<JavaOnlyMap>(transformConfigs.size) { i ->
49+
List<JavaOnlyMap>(transformConfigs.size) { i ->
5050
val transformConfig = transformConfigs[i]
5151
val transform =
5252
if (transformConfig is AnimatedTransformConfig) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ColorPropConverter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ private static boolean supportWideGamut() {
3434
private static final String ATTR_SEGMENT = "attr/";
3535

3636
@Nullable
37-
private static Integer getColorInteger(Object value, Context context) {
37+
private static Integer getColorInteger(@Nullable Object value, Context context) {
3838
if (value == null) {
3939
return null;
4040
}
@@ -84,7 +84,7 @@ private static Integer getColorInteger(Object value, Context context) {
8484
}
8585

8686
@Nullable
87-
public static Color getColorInstance(Object value, Context context) {
87+
public static Color getColorInstance(@Nullable Object value, Context context) {
8888
if (value == null) {
8989
return null;
9090
}
@@ -136,7 +136,7 @@ public static Color getColorInstance(Object value, Context context) {
136136
"ColorValue: the value must be a number or Object.");
137137
}
138138

139-
public static Integer getColor(Object value, Context context) {
139+
public static Integer getColor(@Nullable Object value, Context context) {
140140
try {
141141
if (supportWideGamut()) {
142142
Color color = getColorInstance(value, context);
@@ -150,7 +150,7 @@ public static Integer getColor(Object value, Context context) {
150150
return getColorInteger(value, context);
151151
}
152152

153-
public static Integer getColor(Object value, Context context, int defaultInt) {
153+
public static Integer getColor(@Nullable Object value, Context context, int defaultInt) {
154154
try {
155155
return getColor(value, context);
156156
} catch (JSApplicationCausedNativeException e) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ public class JavaOnlyArray : ReadableArray, WritableArray {
7373

7474
override fun getLong(index: Int): Long = (backingList[index] as Number).toLong()
7575

76-
override fun getString(index: Int): String = backingList[index] as String
76+
override fun getString(index: Int): String? = backingList[index] as String?
7777

78-
override fun getArray(index: Int): ReadableArray = backingList[index] as ReadableArray
78+
override fun getArray(index: Int): ReadableArray? = backingList[index] as ReadableArray?
7979

8080
override fun getBoolean(index: Int): Boolean = backingList[index] as Boolean
8181

82-
override fun getMap(index: Int): ReadableMap = backingList[index] as ReadableMap
82+
override fun getMap(index: Int): ReadableMap? = backingList[index] as ReadableMap?
8383

8484
override fun getDynamic(index: Int): Dynamic = DynamicFromArray.create(this, index)
8585

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableArray.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import java.util.ArrayList
1414
* to Kotlin.
1515
*/
1616
public interface ReadableArray {
17-
public fun getArray(index: Int): ReadableArray
17+
public fun getArray(index: Int): ReadableArray?
1818

1919
public fun getBoolean(index: Int): Boolean
2020

@@ -26,9 +26,9 @@ public interface ReadableArray {
2626

2727
public fun getLong(index: Int): Long
2828

29-
public fun getMap(index: Int): ReadableMap
29+
public fun getMap(index: Int): ReadableMap?
3030

31-
public fun getString(index: Int): String
31+
public fun getString(index: Int): String?
3232

3333
public fun getType(index: Int): ReadableType
3434

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.java

Lines changed: 0 additions & 171 deletions
This file was deleted.

0 commit comments

Comments
 (0)