From 531958cd66827c80ec656c4ef678224f136313f3 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Fri, 23 Feb 2024 01:14:57 -0800 Subject: [PATCH 1/2] Validate textAttributeProps is created with a non-null textAttributes map (#42932) Summary: Validate textAttributeProps is created with a non-null textAttributes map changelog: [internal] internal Reviewed By: rshest Differential Revision: D53558784 --- .../react/views/text/fragments/BridgeTextFragment.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/fragments/BridgeTextFragment.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/fragments/BridgeTextFragment.kt index 53d1105e6ea8..45ae17b05a8e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/fragments/BridgeTextFragment.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/fragments/BridgeTextFragment.kt @@ -15,8 +15,12 @@ import com.facebook.react.views.text.TextAttributeProps /** A [TextFragment] implementation backed by a a [ReadableMap] */ internal class BridgeTextFragment(private val fragment: ReadableMap) : TextFragment { override val textAttributeProps: TextAttributeProps - get() = - TextAttributeProps.fromReadableMap(ReactStylesDiffMap(fragment.getMap("textAttributes"))) + get() { + val textAttributesMap = + fragment.getMap("textAttributes") + ?: throw IllegalStateException("Missing required field `textAttributes`") + return TextAttributeProps.fromReadableMap(ReactStylesDiffMap(textAttributesMap)) + } override val string: String? get() = fragment.getString("string") From 5f7c572c999877713ae7c45ab589d51a68cd9fe9 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Fri, 23 Feb 2024 01:14:57 -0800 Subject: [PATCH 2/2] Mark classes of package uimanager as @Nullsafe (#43155) Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Reviewed By: arushikesarwani94 Differential Revision: D54027178 --- .../facebook/react/uimanager/ComponentNameResolverManager.java | 2 ++ .../com/facebook/react/uimanager/FabricViewStateManager.java | 2 ++ .../src/main/java/com/facebook/react/uimanager/FloatUtil.java | 3 +++ 3 files changed, 7 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverManager.java index 75463b8c43ba..ac97b95c3c7e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverManager.java @@ -7,12 +7,14 @@ package com.facebook.react.uimanager; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.proguard.annotations.DoNotStripAny; import com.facebook.react.bridge.RuntimeExecutor; import com.facebook.soloader.SoLoader; +@Nullsafe(Nullsafe.Mode.LOCAL) @DoNotStripAny public class ComponentNameResolverManager { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java index 02ea431f7f48..6792a8cb9c7a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java @@ -9,6 +9,7 @@ import androidx.annotation.Nullable; import com.facebook.common.logging.FLog; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableMap; @@ -24,6 +25,7 @@ * retrying the UpdateState call until it succeeds; or you call setState again; or the View layer is * updated with a newer StateWrapper. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @Deprecated( since = "Deprecated class since v0.73.0, please use com.facebook.react.uimanager.StateWrapper instead.", diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FloatUtil.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FloatUtil.java index 94add5350e3d..1d1a5d56a56b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FloatUtil.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/FloatUtil.java @@ -7,6 +7,9 @@ package com.facebook.react.uimanager; +import com.facebook.infer.annotation.Nullsafe; + +@Nullsafe(Nullsafe.Mode.LOCAL) public class FloatUtil { private static final float EPSILON = .00001f;