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 index 4fc60df1458..96d35518bcf 100644 --- 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 @@ -9,9 +9,11 @@ package com.facebook.react.bridge; import androidx.annotation.Nullable; import com.facebook.common.logging.FLog; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.common.ReactConstants; /** Implementation of Dynamic wrapping a ReadableArray. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class DynamicFromObject implements Dynamic { private @Nullable Object mObject; @@ -31,38 +33,50 @@ public class DynamicFromObject implements Dynamic { @Override public boolean asBoolean() { - // NULLSAFE_FIXME[Nullable Dereference] + if (mObject == null || !(mObject instanceof Boolean)) { + throw new ClassCastException("Dynamic value from Object is not a boolean"); + } return (boolean) mObject; } @Override public double asDouble() { - // NULLSAFE_FIXME[Nullable Dereference] + if (mObject == null || !(mObject instanceof Number)) { + throw new ClassCastException("Dynamic value from Object is not a number"); + } return (double) mObject; } @Override public int asInt() { + if (mObject == null || !(mObject instanceof Number)) { + throw new ClassCastException("Dynamic value from Object is not a number"); + } // Numbers from JS are always Doubles - // NULLSAFE_FIXME[Nullable Dereference] return ((Double) mObject).intValue(); } @Override public String asString() { - // NULLSAFE_FIXME[Return Not Nullable] + if (mObject == null || !(mObject instanceof String)) { + throw new ClassCastException("Dynamic value from Object is not a string"); + } return (String) mObject; } @Override public ReadableArray asArray() { - // NULLSAFE_FIXME[Return Not Nullable] + if (mObject == null || !(mObject instanceof ReadableArray)) { + throw new ClassCastException("Dynamic value from Object is not a ReadableArray"); + } return (ReadableArray) mObject; } @Override public ReadableMap asMap() { - // NULLSAFE_FIXME[Return Not Nullable] + if (mObject == null || !(mObject instanceof ReadableMap)) { + throw new ClassCastException("Dynamic value from Object is not a ReadableMap"); + } return (ReadableMap) mObject; }