diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromObject.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromObject.java deleted file mode 100644 index 226749c5bbd5cc..00000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromObject.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.bridge; - -import androidx.annotation.Nullable; -import com.facebook.common.logging.FLog; -import com.facebook.react.common.ReactConstants; - -/** Implementation of Dynamic wrapping a ReadableArray. */ -public class DynamicFromObject implements Dynamic { - private @Nullable Object mObject; - - public DynamicFromObject(@Nullable Object obj) { - mObject = obj; - } - - @Override - public void recycle() { - // Noop - nothing to recycle since there is no pooling - } - - @Override - public boolean isNull() { - return mObject == null; - } - - @Override - public boolean asBoolean() { - return (boolean) mObject; - } - - @Override - public double asDouble() { - return (double) mObject; - } - - @Override - public int asInt() { - // Numbers from JS are always Doubles - return ((Double) mObject).intValue(); - } - - @Override - public String asString() { - return (String) mObject; - } - - @Override - public ReadableArray asArray() { - return (ReadableArray) mObject; - } - - @Override - public ReadableMap asMap() { - return (ReadableMap) mObject; - } - - @Override - public ReadableType getType() { - if (isNull()) { - return ReadableType.Null; - } - if (mObject instanceof Boolean) { - return ReadableType.Boolean; - } - if (mObject instanceof Number) { - return ReadableType.Number; - } - if (mObject instanceof String) { - return ReadableType.String; - } - if (mObject instanceof ReadableMap) { - return ReadableType.Map; - } - if (mObject instanceof ReadableArray) { - return ReadableType.Array; - } - FLog.e( - ReactConstants.TAG, - "Unmapped object type " - + (mObject == null ? "" : mObject.getClass().getName())); - return ReadableType.Null; - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromObject.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromObject.kt new file mode 100644 index 00000000000000..f2cc0716c8df14 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromObject.kt @@ -0,0 +1,85 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.bridge + +import androidx.annotation.Nullable +import com.facebook.common.logging.FLog +import com.facebook.react.common.ReactConstants + +/** Implementation of Dynamic wrapping a ReadableArray. */ +class DynamicFromObject(@Nullable private var mObject: Any?) : Dynamic { + + override fun recycle() { + // Noop - nothing to recycle since there is no pooling + } + + override fun isNull(): Boolean { + return mObject == null + } + + override fun asBoolean(): Boolean { + if (mObject !is Boolean) { + throw ClassCastException("Dynamic value from Object is not a boolean") + } + return mObject as Boolean + } + + override fun asDouble(): Double { + if (mObject !is Number) { + throw ClassCastException("Dynamic value from Object is not a number") + } + return (mObject as Number).toDouble() + } + + override fun asInt(): Int { + if (mObject !is Number) { + throw ClassCastException("Dynamic value from Object is not a number") + } + // Numbers from JS are always Doubles + return (mObject as Double).toInt() + } + + override fun asString(): String { + if (mObject !is String) { + throw ClassCastException("Dynamic value from Object is not a string") + } + return mObject as String + } + + override fun asArray(): ReadableArray { + if (mObject !is ReadableArray) { + throw ClassCastException("Dynamic value from Object is not a ReadableArray") + } + return mObject as ReadableArray + } + + override fun asMap(): ReadableMap { + if (mObject !is ReadableMap) { + throw ClassCastException("Dynamic value from Object is not a ReadableMap") + } + return mObject as ReadableMap + } + + override fun getType(): ReadableType { + return when { + isNull() -> ReadableType.Null + mObject is Boolean -> ReadableType.Boolean + mObject is Number -> ReadableType.Number + mObject is String -> ReadableType.String + mObject is ReadableMap -> ReadableType.Map + mObject is ReadableArray -> ReadableType.Array + else -> { + FLog.e( + ReactConstants.TAG, + "Unmapped object type " + (mObject?.javaClass?.name ?: "") + ) + ReadableType.Null + } + } + } +}