From dcb2dbb2c383c27f3e5ba83adcd40f2e77e0009c Mon Sep 17 00:00:00 2001 From: Gijs Weterings Date: Wed, 9 Apr 2025 09:07:30 -0700 Subject: [PATCH] fix nullsafe FIXMEs for DynamicFromMap.java and mark nullsafe Summary: Gone trough all the FIXMEs added in the previous diff by the nullsafe tool, marked the class as nullsafe and ensured no remaining violations. Changelog: [Android][Fixed] Made DynamicFromMap.java nullsafe Reviewed By: alanleedev Differential Revision: D72384077 fbshipit-source-id: 70fb921fed06e9f89eb69c558692d1d7705fe2e5 --- .../facebook/react/bridge/DynamicFromMap.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromMap.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromMap.java index 9013581e444..d2a166a8eb6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromMap.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromMap.java @@ -9,9 +9,11 @@ package com.facebook.react.bridge; import androidx.annotation.Nullable; import androidx.core.util.Pools.SimplePool; +import com.facebook.infer.annotation.Nullsafe; import java.util.Objects; /** Implementation of Dynamic wrapping a ReadableMap. */ +@Nullsafe(Nullsafe.Mode.LOCAL) class DynamicFromMap implements Dynamic { private static final ThreadLocal> sPool = new ThreadLocal>() { @@ -28,8 +30,11 @@ class DynamicFromMap implements Dynamic { private DynamicFromMap() {} public static DynamicFromMap create(ReadableMap map, String name) { - // NULLSAFE_FIXME[Nullable Dereference] - DynamicFromMap dynamic = sPool.get().acquire(); + SimplePool poolValueHolder = sPool.get(); + DynamicFromMap dynamic = null; + if (poolValueHolder != null) { + dynamic = poolValueHolder.acquire(); + } if (dynamic == null) { dynamic = new DynamicFromMap(); } @@ -42,8 +47,10 @@ class DynamicFromMap implements Dynamic { public void recycle() { mMap = null; mName = null; - // NULLSAFE_FIXME[Nullable Dereference] - sPool.get().release(this); + SimplePool poolValueHolder = sPool.get(); + if (poolValueHolder != null) { + poolValueHolder.release(this); + } } @Override @@ -79,20 +86,18 @@ class DynamicFromMap implements Dynamic { } @Override - public String asString() { + public @Nullable String asString() { if (mMap == null || mName == null) { throw new IllegalStateException("This dynamic value has been recycled"); } - // NULLSAFE_FIXME[Return Not Nullable] return mMap.getString(mName); } @Override - public ReadableArray asArray() { + public @Nullable ReadableArray asArray() { if (mMap == null || mName == null) { throw new IllegalStateException("This dynamic value has been recycled"); } - // NULLSAFE_FIXME[Return Not Nullable] return mMap.getArray(mName); }