From 9d00b9bd9ed4c28d029768c636718383f408a73e Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 01/11] Fix nullability in DefaultTurboModuleManagerDelegate Summary: HybridData can not be null, fixing nullability in DefaultTurboModuleManagerDelegate changelog: [internal] internal Differential Revision: D53393139 fbshipit-source-id: 248115e7ef36bf4826f2e1ec39129249449c6798 --- .../react/defaults/DefaultTurboModuleManagerDelegate.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt index c6f9446ada5b..2c664ba97b9f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt @@ -30,7 +30,7 @@ private constructor( cxxReactPackages: List, ) : ReactPackageTurboModuleManagerDelegate(context, packages, initHybrid(cxxReactPackages)) { - override fun initHybrid(): HybridData? { + override fun initHybrid(): HybridData { throw UnsupportedOperationException( "DefaultTurboModuleManagerDelegate.initHybrid() must never be called!") } @@ -72,6 +72,6 @@ private constructor( @DoNotStrip @JvmStatic - external fun initHybrid(cxxReactPackages: List): HybridData? + external fun initHybrid(cxxReactPackages: List): HybridData } } From a6229284dfd4f5b11aff5f6a4b20c361a67b2137 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 02/11] Mark classes of package internal as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393140 fbshipit-source-id: 7ee1fb8086b54bf9826013bb1ff6db6f34f09b4c --- .../facebook/react/internal/AndroidChoreographerProvider.java | 2 ++ .../internal/turbomodule/core/TurboModuleManagerDelegate.java | 2 ++ .../react/internal/turbomodule/core/TurboModulePerfLogger.java | 2 ++ 3 files changed, 6 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.java index a3b3de670d9d..745be44af60b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.java @@ -7,9 +7,11 @@ package com.facebook.react.internal; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.UiThreadUtil; /** An implementation of ChoreographerProvider that directly uses android.view.Choreographer. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public final class AndroidChoreographerProvider implements ChoreographerProvider { public static final class AndroidChoreographer implements ChoreographerProvider.Choreographer { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java index c80bd0e6e10a..9fe0fdb630d3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java @@ -8,6 +8,7 @@ package com.facebook.react.internal.turbomodule.core; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.NativeModule; @@ -15,6 +16,7 @@ import java.util.ArrayList; import java.util.List; +@Nullsafe(Nullsafe.Mode.LOCAL) public abstract class TurboModuleManagerDelegate { @DoNotStrip @SuppressWarnings("unused") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModulePerfLogger.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModulePerfLogger.java index e1c512cc3eac..9a9f198ba624 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModulePerfLogger.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModulePerfLogger.java @@ -7,10 +7,12 @@ package com.facebook.react.internal.turbomodule.core; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.perflogger.NativeModulePerfLogger; import javax.annotation.Nullable; +@Nullsafe(Nullsafe.Mode.LOCAL) @DoNotStrip class TurboModulePerfLogger { From 31c7f269b287ff5367aa538b16628f66e831c291 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 03/11] Mark classes of package jstasks as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393137 fbshipit-source-id: e1b227f0808e0f0eeb4ed623f56cf9e25cd5c21c --- .../com/facebook/react/jstasks/LinearCountingRetryPolicy.java | 3 +++ .../main/java/com/facebook/react/jstasks/NoRetryPolicy.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jstasks/LinearCountingRetryPolicy.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jstasks/LinearCountingRetryPolicy.java index eadbe5bfaabf..a008a5aa0f8f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jstasks/LinearCountingRetryPolicy.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jstasks/LinearCountingRetryPolicy.java @@ -7,6 +7,9 @@ package com.facebook.react.jstasks; +import com.facebook.infer.annotation.Nullsafe; + +@Nullsafe(Nullsafe.Mode.LOCAL) public class LinearCountingRetryPolicy implements HeadlessJsTaskRetryPolicy { private final int mRetryAttempts; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jstasks/NoRetryPolicy.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jstasks/NoRetryPolicy.java index 4c9caca462dd..df4ca841fd51 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jstasks/NoRetryPolicy.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/jstasks/NoRetryPolicy.java @@ -7,6 +7,9 @@ package com.facebook.react.jstasks; +import com.facebook.infer.annotation.Nullsafe; + +@Nullsafe(Nullsafe.Mode.LOCAL) class NoRetryPolicy implements HeadlessJsTaskRetryPolicy { public static final NoRetryPolicy INSTANCE = new NoRetryPolicy(); From 81c968961126b1bcee80c672dbc32bec845c8ad5 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 04/11] Mark classes of packages packagerconnection as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393141 fbshipit-source-id: 1b3238b4f5e7c39b617695124e5543e5ed06a38d --- .../com/facebook/react/packagerconnection/FileIoHandler.java | 2 ++ .../react/packagerconnection/NotificationOnlyHandler.java | 2 ++ .../react/packagerconnection/PackagerConnectionSettings.java | 2 ++ .../facebook/react/packagerconnection/RequestOnlyHandler.java | 2 ++ 4 files changed, 8 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/FileIoHandler.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/FileIoHandler.java index 50dff8ff5486..bc938e2cc9c1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/FileIoHandler.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/FileIoHandler.java @@ -12,6 +12,7 @@ import android.util.Base64; import androidx.annotation.Nullable; import com.facebook.common.logging.FLog; +import com.facebook.infer.annotation.Nullsafe; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; @@ -20,6 +21,7 @@ import java.util.Map; import org.json.JSONObject; +@Nullsafe(Nullsafe.Mode.LOCAL) public class FileIoHandler implements Runnable { private static final String TAG = JSPackagerClient.class.getSimpleName(); private static final long FILE_TTL = 30 * 1000; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/NotificationOnlyHandler.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/NotificationOnlyHandler.java index e7366fd2ddba..bbfe4400dd0f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/NotificationOnlyHandler.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/NotificationOnlyHandler.java @@ -9,7 +9,9 @@ import androidx.annotation.Nullable; import com.facebook.common.logging.FLog; +import com.facebook.infer.annotation.Nullsafe; +@Nullsafe(Nullsafe.Mode.LOCAL) public abstract class NotificationOnlyHandler implements RequestHandler { private static final String TAG = JSPackagerClient.class.getSimpleName(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/PackagerConnectionSettings.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/PackagerConnectionSettings.java index 94572ae9ba99..ae9dc75e2b93 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/PackagerConnectionSettings.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/PackagerConnectionSettings.java @@ -14,8 +14,10 @@ import androidx.annotation.Nullable; import com.facebook.common.logging.FLog; import com.facebook.infer.annotation.Assertions; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.modules.systeminfo.AndroidInfoHelpers; +@Nullsafe(Nullsafe.Mode.LOCAL) public class PackagerConnectionSettings { private static final String TAG = PackagerConnectionSettings.class.getSimpleName(); private static final String PREFS_DEBUG_SERVER_HOST_KEY = "debug_http_host"; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/RequestOnlyHandler.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/RequestOnlyHandler.java index 7edf0f404b7b..ef66ca2519cb 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/RequestOnlyHandler.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/RequestOnlyHandler.java @@ -9,7 +9,9 @@ import androidx.annotation.Nullable; import com.facebook.common.logging.FLog; +import com.facebook.infer.annotation.Nullsafe; +@Nullsafe(Nullsafe.Mode.LOCAL) public abstract class RequestOnlyHandler implements RequestHandler { private static final String TAG = JSPackagerClient.class.getSimpleName(); From eb74c262da919cc0a10333d416196404e081f102 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 05/11] Mark classes of packages reactperflogger as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393136 fbshipit-source-id: 2b3b5be101a67fe48d6e8731aba72cf9b389425b --- .../facebook/react/reactperflogger/NativeModulePerfLogger.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.java index 266eb927e818..7c7f9c438c13 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.java @@ -7,9 +7,11 @@ package com.facebook.react.perflogger; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.jni.HybridData; import com.facebook.soloader.SoLoader; +@Nullsafe(Nullsafe.Mode.LOCAL) public abstract class NativeModulePerfLogger { private final HybridData mHybridData; From a347414a9eee86259f3f7638939055227d8a9290 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 06/11] Mark classes of packages turbmodules as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393135 fbshipit-source-id: 6fa91854ed6edcaae01a50532fa753a18607fa35 --- .../facebook/react/turbomodule/core/CallInvokerHolderImpl.java | 2 ++ .../turbomodule/core/NativeMethodCallInvokerHolderImpl.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.java index 99e5e80c399e..455eeb840773 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.java @@ -7,6 +7,7 @@ package com.facebook.react.turbomodule.core; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.common.annotations.FrameworkAPI; @@ -18,6 +19,7 @@ * TurboModuleManager. Therefore, we need to wrap JSCallInvoker within a hybrid class so that we may * pass it from CatalystInstance, through Java, to TurboModuleManager::initHybrid. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @FrameworkAPI public class CallInvokerHolderImpl implements CallInvokerHolder { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/NativeMethodCallInvokerHolderImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/NativeMethodCallInvokerHolderImpl.java index 96cc9761832d..c68b5a69aab2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/NativeMethodCallInvokerHolderImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/NativeMethodCallInvokerHolderImpl.java @@ -7,6 +7,7 @@ package com.facebook.react.turbomodule.core; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.common.annotations.FrameworkAPI; @@ -19,6 +20,7 @@ * class so that we may pass it from CatalystInstance, through Java, to * TurboModuleManager::initHybrid. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @FrameworkAPI public class NativeMethodCallInvokerHolderImpl implements NativeMethodCallInvokerHolder { From c0e74243e36138ccc937915b526ae3f67f9fe6bc Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 07/11] Mark classes of package uimanager/common as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393476 fbshipit-source-id: 596c0827ba8ddfb887ed5c44dab431be62138795 --- .../java/com/facebook/react/uimanager/common/ViewUtil.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.java index 086afd06ac7c..2c20907f6f2c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.java @@ -10,6 +10,9 @@ import static com.facebook.react.uimanager.common.UIManagerType.DEFAULT; import static com.facebook.react.uimanager.common.UIManagerType.FABRIC; +import com.facebook.infer.annotation.Nullsafe; + +@Nullsafe(Nullsafe.Mode.LOCAL) public class ViewUtil { public static final int NO_SURFACE_ID = -1; From ea5c9edfc96d55ae96c01f4cfd13b74f2f07ef65 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 08/11] Mark classes of package uimanager/util as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393474 fbshipit-source-id: 3bc9e58b18a071e2c1a93736159eeb0cd82147a5 --- .../com/facebook/react/uimanager/util/ReactFindViewUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/util/ReactFindViewUtil.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/util/ReactFindViewUtil.java index 3b5d448815f1..ccfd1fa655a3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/util/ReactFindViewUtil.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/util/ReactFindViewUtil.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.R; import java.util.ArrayList; import java.util.HashMap; @@ -19,6 +20,7 @@ import java.util.Set; /** Finds views in React Native view hierarchies */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class ReactFindViewUtil { private static final List mOnViewFoundListeners = new ArrayList<>(); From 5581d4927375b3c9c8326c5d485b5136395785e1 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 09/11] Mark classes of package uimanager/layoutanimation as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393472 fbshipit-source-id: 4fc4f5e8d73fc30efa81dd28f18cf5468c84646c --- .../uimanager/layoutanimation/AnimatedPropertyType.java | 5 ++++- .../react/uimanager/layoutanimation/BaseLayoutAnimation.java | 4 +++- .../react/uimanager/layoutanimation/InterpolatorType.java | 4 +++- .../react/uimanager/layoutanimation/LayoutAnimationType.java | 5 ++++- .../uimanager/layoutanimation/LayoutCreateAnimation.java | 5 ++++- .../uimanager/layoutanimation/LayoutDeleteAnimation.java | 5 ++++- .../uimanager/layoutanimation/LayoutUpdateAnimation.java | 4 +++- .../react/uimanager/layoutanimation/OpacityAnimation.java | 4 +++- .../uimanager/layoutanimation/PositionAndSizeAnimation.java | 4 +++- .../uimanager/layoutanimation/SimpleSpringInterpolator.java | 4 +++- 10 files changed, 34 insertions(+), 10 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.java index 6eaa564362e8..15005421e13f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.java @@ -7,11 +7,14 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; + /** * Enum representing the different view properties that can be used when animating layout for view * creation. */ -/* package */ enum AnimatedPropertyType { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +enum AnimatedPropertyType { OPACITY, SCALE_X, SCALE_Y, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.java index 551690dc55a5..3507a8b66cc5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.java @@ -10,10 +10,12 @@ import android.view.View; import android.view.animation.Animation; import android.view.animation.ScaleAnimation; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.uimanager.IllegalViewOperationException; /** Class responsible for default layout animation, i.e animation of view creation and deletion. */ -/* package */ abstract class BaseLayoutAnimation extends AbstractLayoutAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +abstract class BaseLayoutAnimation extends AbstractLayoutAnimation { abstract boolean isReverse(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.java index ec4c866c2e37..c05d2378cfcf 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.java @@ -7,12 +7,14 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; import java.util.Locale; /** * Enum representing the different interpolators that can be used in layout animation configuration. */ -/* package */ enum InterpolatorType { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +enum InterpolatorType { LINEAR, EASE_IN, EASE_OUT, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.java index b12335f51863..865999979539 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.java @@ -7,10 +7,13 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; + /** * Enum representing the different animation type that can be specified in layout animation config. */ -/* package */ enum LayoutAnimationType { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +enum LayoutAnimationType { CREATE, UPDATE, DELETE; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.java index e2d062e3f161..f103cc69ac0c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.java @@ -7,11 +7,14 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; + /** * Class responsible for handling layout view creation animation, applied to view whenever a valid * config was supplied for the layout animation of CREATE type. */ -/* package */ class LayoutCreateAnimation extends BaseLayoutAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class LayoutCreateAnimation extends BaseLayoutAnimation { @Override boolean isReverse() { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.java index 6da804add622..1550cb642534 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.java @@ -7,11 +7,14 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; + /** * Class responsible for handling layout view deletion animation, applied to view whenever a valid * config was supplied for the layout animation of DELETE type. */ -/* package */ class LayoutDeleteAnimation extends BaseLayoutAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class LayoutDeleteAnimation extends BaseLayoutAnimation { @Override boolean isReverse() { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.java index b4757cf44d86..2802c063a227 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.java @@ -11,12 +11,14 @@ import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; /** * Class responsible for handling layout update animation, applied to view whenever a valid config * was supplied for the layout animation of UPDATE type. */ -/* package */ class LayoutUpdateAnimation extends AbstractLayoutAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class LayoutUpdateAnimation extends AbstractLayoutAnimation { // We are currently not enabling translation GPU-accelerated animated, as it creates odd // artifacts with native react scrollview. This needs to be investigated. diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java index 6d1c350a3a09..6114b0de687c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java @@ -10,12 +10,14 @@ import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; +import com.facebook.infer.annotation.Nullsafe; /** * Animation responsible for updating opacity of a view. It should ideally use hardware texture to * optimize rendering performances. */ -/* package */ class OpacityAnimation extends Animation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class OpacityAnimation extends Animation { static class OpacityAnimationListener implements Animation.AnimationListener { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.java index 26789ecbbadb..f1a285dc3795 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; +import com.facebook.infer.annotation.Nullsafe; /** * Animation responsible for updating size and position of a view. We can't use scaling as view @@ -17,7 +18,8 @@ * passes occurring on every frame. What we might want to try to do instead is use a combined * ScaleAnimation and TranslateAnimation. */ -/* package */ class PositionAndSizeAnimation extends Animation implements LayoutHandlingAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class PositionAndSizeAnimation extends Animation implements LayoutHandlingAnimation { private final View mView; private float mStartX, mStartY, mDeltaX, mDeltaY; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.java index 57304103e2e0..84cbe2ae9ca5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.java @@ -8,12 +8,14 @@ package com.facebook.react.uimanager.layoutanimation; import android.view.animation.Interpolator; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableType; /** Simple spring interpolator */ // TODO(7613736): Improve spring interpolator with friction and damping variable support -/* package */ class SimpleSpringInterpolator implements Interpolator { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class SimpleSpringInterpolator implements Interpolator { private static final float FACTOR = 0.5f; public static final String PARAM_SPRING_DAMPING = "springDamping"; From 0be2658d5966368cca08e0ec1120fe731f83b553 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 4 Feb 2024 19:04:02 -0800 Subject: [PATCH 10/11] Mark classes of package uimanager as @Nullsafe Summary: All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Differential Revision: D53393473 fbshipit-source-id: a9d644a92becdc004d31dacd5f7771c066f5a94a --- .../react/uimanager/events/BlackHoleEventDispatcher.java | 2 ++ .../react/uimanager/events/ContentSizeChangeEvent.java | 2 ++ .../main/java/com/facebook/react/uimanager/events/Event.java | 2 ++ .../facebook/react/uimanager/events/EventDispatcherImpl.java | 2 ++ .../facebook/react/uimanager/events/FabricEventDispatcher.java | 2 ++ .../com/facebook/react/uimanager/events/NativeGestureUtil.java | 2 ++ .../facebook/react/uimanager/events/PointerEventHelper.java | 2 ++ .../java/com/facebook/react/uimanager/events/TouchEvent.java | 2 ++ .../react/uimanager/events/TouchEventCoalescingKeyHelper.java | 2 ++ .../com/facebook/react/uimanager/events/TouchEventType.java | 3 +++ .../com/facebook/react/uimanager/events/TouchesHelper.java | 2 ++ 11 files changed, 23 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/BlackHoleEventDispatcher.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/BlackHoleEventDispatcher.java index 44ea8002acec..8b7a36d85b5f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/BlackHoleEventDispatcher.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/BlackHoleEventDispatcher.java @@ -8,11 +8,13 @@ package com.facebook.react.uimanager.events; import com.facebook.common.logging.FLog; +import com.facebook.infer.annotation.Nullsafe; /** * A singleton class that overrides {@link EventDispatcher} with no-op methods, to be used by * callers that expect an EventDispatcher when the instance doesn't exist. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class BlackHoleEventDispatcher implements EventDispatcher { private static final EventDispatcher sEventDispatcher = new BlackHoleEventDispatcher(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java index a76fb2e04d54..09870620d04b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java @@ -7,6 +7,7 @@ package com.facebook.react.uimanager.events; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.PixelUtil; @@ -16,6 +17,7 @@ * * @deprecated Please define your own event for custom components */ +@Nullsafe(Nullsafe.Mode.LOCAL) @Deprecated public class ContentSizeChangeEvent extends Event { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java index ba933b49f4ee..0605f3e1c290 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java @@ -8,6 +8,7 @@ package com.facebook.react.uimanager.events; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.WritableMap; import com.facebook.react.common.SystemClock; @@ -27,6 +28,7 @@ * surfaceId. Fabric will work without surfaceId - making {@code Event} backwards-compatible - but * Events without SurfaceId are slightly slower to propagate. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public abstract class Event { private static int sUniqueID = 0; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcherImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcherImpl.java index 91ec4d2e0fd0..b97726ce69ae 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcherImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcherImpl.java @@ -10,6 +10,7 @@ import android.util.LongSparseArray; import android.view.Choreographer; import com.facebook.infer.annotation.Assertions; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.UiThreadUtil; @@ -55,6 +56,7 @@ *

Event Cookie Composition: VIEW_TAG_MASK = 0x00000000ffffffff EVENT_TYPE_ID_MASK = * 0x0000ffff00000000 COALESCING_KEY_MASK = 0xffff000000000000 */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class EventDispatcherImpl implements EventDispatcher, LifecycleEventListener { private static final Comparator EVENT_COMPARATOR = diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java index 4a3650f2debc..3c0a47ffbcd4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java @@ -8,6 +8,7 @@ package com.facebook.react.uimanager.events; import android.view.Choreographer; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.UiThreadUtil; @@ -21,6 +22,7 @@ * A singleton class that overrides {@link EventDispatcher} with no-op methods, to be used by * callers that expect an EventDispatcher when the instance doesn't exist. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class FabricEventDispatcher implements EventDispatcher, LifecycleEventListener { private final ReactEventEmitter mReactEventEmitter; private final ReactApplicationContext mReactContext; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/NativeGestureUtil.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/NativeGestureUtil.java index d39a9511591e..b0dd28a34b75 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/NativeGestureUtil.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/NativeGestureUtil.java @@ -9,10 +9,12 @@ import android.view.MotionEvent; import android.view.View; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.uimanager.RootView; import com.facebook.react.uimanager.RootViewUtil; /** Utilities for native Views that interpret native gestures (e.g. ScrollView, ViewPager, etc.). */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class NativeGestureUtil { /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java index 787c9ed117c4..e80353c5a57d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java @@ -11,9 +11,11 @@ import android.view.MotionEvent; import android.view.View; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.R; /** Class responsible for generating catalyst touch events based on android {@link MotionEvent}. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class PointerEventHelper { public static final String POINTER_TYPE_TOUCH = "touch"; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java index 16aceaf3ef6e..9dc211add289 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java @@ -11,6 +11,7 @@ import androidx.annotation.Nullable; import androidx.core.util.Pools; import com.facebook.infer.annotation.Assertions; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReactSoftExceptionLogger; import com.facebook.react.bridge.SoftAssertions; @@ -22,6 +23,7 @@ * and coalescing key. See {@link TouchEventCoalescingKeyHelper} for more information about how * these coalescing keys are determined. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class TouchEvent extends Event { private static final String TAG = TouchEvent.class.getSimpleName(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventCoalescingKeyHelper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventCoalescingKeyHelper.java index 39ffadabd222..c5769fc4b41a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventCoalescingKeyHelper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventCoalescingKeyHelper.java @@ -8,6 +8,7 @@ package com.facebook.react.uimanager.events; import android.util.SparseIntArray; +import com.facebook.infer.annotation.Nullsafe; /** * Utility for determining coalescing keys for TouchEvents. To preserve proper ordering of events, @@ -41,6 +42,7 @@ * *

NB: this class should only be used from the UI thread. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class TouchEventCoalescingKeyHelper { private final SparseIntArray mDownTimeToCoalescingKey = new SparseIntArray(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventType.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventType.java index 04c08c935aa4..9e789a08e908 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventType.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventType.java @@ -7,7 +7,10 @@ package com.facebook.react.uimanager.events; +import com.facebook.infer.annotation.Nullsafe; + /** Touch event types that JS module RCTEventEmitter can understand */ +@Nullsafe(Nullsafe.Mode.LOCAL) public enum TouchEventType { START("topTouchStart"), END("topTouchEnd"), diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java index 922b15ce4fac..71a8b3e737ab 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java @@ -8,6 +8,7 @@ package com.facebook.react.uimanager.events; import android.view.MotionEvent; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactSoftExceptionLogger; import com.facebook.react.bridge.WritableArray; @@ -16,6 +17,7 @@ import com.facebook.systrace.Systrace; /** Class responsible for generating catalyst touch events based on android {@link MotionEvent}. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class TouchesHelper { @Deprecated public static final String TARGET_KEY = "target"; From 376add7e8593c1ec40c8312dc1d52737c1782a2e Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sun, 4 Feb 2024 19:07:17 -0800 Subject: [PATCH 11/11] Mark nullability of RNLog class Summary: Mark nullability of RNLog class changelog: [internal] internal Differential Revision: D53393953 fbshipit-source-id: 3cb31b9969454afc20fef938c2324ca979c833aa --- .../main/java/com/facebook/react/util/RNLog.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/util/RNLog.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/util/RNLog.java index 8469879f2120..1bf7acdd5d1c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/util/RNLog.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/util/RNLog.java @@ -11,6 +11,7 @@ import com.facebook.common.logging.FLog; import com.facebook.react.bridge.ReactContext; import com.facebook.react.common.ReactConstants; +import javax.annotation.Nullable; /** Logging wrapper for FLog with LogBox support. */ public class RNLog { @@ -31,7 +32,7 @@ public class RNLog { * * @param message The message to log. */ - public static void l(String message) { + public static void l(@Nullable String message) { FLog.i(ReactConstants.TAG, message); } @@ -40,7 +41,7 @@ public static void l(String message) { * * @param message The message to log. */ - public static void t(String message) { + public static void t(@Nullable String message) { FLog.i(ReactConstants.TAG, message); } @@ -50,7 +51,7 @@ public static void t(String message) { * * @param message The message to log. */ - public static void a(String message) { + public static void a(@Nullable String message) { FLog.w(ReactConstants.TAG, "(ADVICE)" + message); } @@ -60,7 +61,7 @@ public static void a(String message) { * @param context The React context of the application use to display the warning. * @param message The message to log. */ - public static void w(ReactContext context, String message) { + public static void w(@Nullable ReactContext context, @Nullable String message) { logInternal(context, message, WARN); FLog.w(ReactConstants.TAG, message); } @@ -71,7 +72,7 @@ public static void w(ReactContext context, String message) { * @param context The React context of the application use to display the error. * @param message The message to log. */ - public static void e(ReactContext context, String message) { + public static void e(@Nullable ReactContext context, @Nullable String message) { logInternal(context, message, ERROR); FLog.e(ReactConstants.TAG, message); } @@ -82,11 +83,11 @@ public static void e(ReactContext context, String message) { * * @param message The message to log. */ - public static void e(String message) { + public static void e(@Nullable String message) { FLog.e(ReactConstants.TAG, message); } - private static void logInternal(ReactContext context, String message, int level) { + private static void logInternal(@Nullable ReactContext context, @Nullable String message, int level) { if (level >= MINIMUM_LEVEL_FOR_UI) { if (context != null && context.hasActiveReactInstance() && message != null) { context.getJSModule(RCTLog.class).logIfNoNativeHook(levelToString(level), message);