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 } } 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 { 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(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/module/model/ReactModuleInfo.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/module/model/ReactModuleInfo.java index ae4a56bbc3a9..4c88ec8d5077 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/module/model/ReactModuleInfo.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/module/model/ReactModuleInfo.java @@ -7,10 +7,13 @@ package com.facebook.react.module.model; +import com.facebook.infer.annotation.Nullsafe; + /** * Data holder class holding native module specifications. {@link ReactModuleSpecProcessor} creates * these so Java modules don't have to be instantiated at React Native start up. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class ReactModuleInfo { private final String mName; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java index 4dece29d17fc..39d8f4932935 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java @@ -13,12 +13,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatDelegate; import com.facebook.fbreact.specs.NativeAppearanceSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.WritableMap; import com.facebook.react.module.annotations.ReactModule; /** Module that exposes the user's preferred color scheme. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeAppearanceSpec.NAME) public class AppearanceModule extends NativeAppearanceSpec { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.java index 393a21890eae..0af51dc3b409 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.java @@ -8,6 +8,7 @@ package com.facebook.react.modules.appstate; import com.facebook.fbreact.specs.NativeAppStateSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.LifecycleEventListener; @@ -20,6 +21,7 @@ import java.util.Map; import javax.annotation.Nullable; +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeAppStateSpec.NAME) public class AppStateModule extends NativeAppStateSpec implements LifecycleEventListener, WindowFocusChangeListener { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.java index 51881ebc4a5e..b97e8f9feb6d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.java @@ -7,11 +7,13 @@ package com.facebook.react.modules.blob; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.JavaScriptContextHolder; import com.facebook.react.bridge.ReactContext; import com.facebook.soloader.SoLoader; -/* package */ class BlobCollector { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class BlobCollector { static { SoLoader.loadLibrary("reactnativeblob"); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/common/ModuleDataCleaner.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/common/ModuleDataCleaner.java index fda3e7cbb511..3415ae530629 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/common/ModuleDataCleaner.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/common/ModuleDataCleaner.java @@ -8,6 +8,7 @@ package com.facebook.react.modules.common; import com.facebook.common.logging.FLog; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.CatalystInstance; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactContext; @@ -18,6 +19,7 @@ * Cleans sensitive user data from native modules that implement the {@code Cleanable} interface. * This is useful e.g. when a user logs out from an app. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class ModuleDataCleaner { /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/ChoreographerCompat.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/ChoreographerCompat.java index f9f4f00453c0..122680292385 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/ChoreographerCompat.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/ChoreographerCompat.java @@ -8,7 +8,9 @@ package com.facebook.react.modules.core; import android.view.Choreographer; +import com.facebook.infer.annotation.Nullsafe; +@Nullsafe(Nullsafe.Mode.LOCAL) public class ChoreographerCompat { /** @deprecated Use Choreographer.FrameCallback instead */ @Deprecated diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.java index e8ba782cb568..fc00c00ed2ca 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.java @@ -11,6 +11,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.facebook.fbreact.specs.NativeDeviceEventManagerSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.JavaScriptModule; @@ -20,6 +21,7 @@ import com.facebook.react.module.annotations.ReactModule; /** Native module that handles device hardware events like hardware back presses. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeDeviceEventManagerSpec.NAME) public class DeviceEventManagerModule extends NativeDeviceEventManagerSpec { @DoNotStrip diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/HeadlessJsTaskSupportModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/HeadlessJsTaskSupportModule.java index 2f64909db921..17fdd96d9dd1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/HeadlessJsTaskSupportModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/HeadlessJsTaskSupportModule.java @@ -9,6 +9,7 @@ import com.facebook.common.logging.FLog; import com.facebook.fbreact.specs.NativeHeadlessJsTaskSupportSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.jstasks.HeadlessJsTaskContext; @@ -18,6 +19,7 @@ * Simple native module that allows JS to notify native of having completed some task work, so that * it can e.g. release any resources, stop timers etc. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeHeadlessJsTaskSupportSpec.NAME) public class HeadlessJsTaskSupportModule extends NativeHeadlessJsTaskSupportSpec { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java index 73149ef73742..2fbd8e985af7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java @@ -8,6 +8,7 @@ package com.facebook.react.modules.core; import com.facebook.fbreact.specs.NativeTimingSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.WritableArray; @@ -18,6 +19,7 @@ import com.facebook.react.module.annotations.ReactModule; /** Native module for JS timer execution. Timers fire on frame boundaries. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeTimingSpec.NAME) public final class TimingModule extends NativeTimingSpec implements LifecycleEventListener, HeadlessJsTaskEventListener { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/AnimationsDebugModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/AnimationsDebugModule.java index 95b24e3de2de..17467a5e9b72 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/AnimationsDebugModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/AnimationsDebugModule.java @@ -11,6 +11,7 @@ import androidx.annotation.Nullable; import com.facebook.common.logging.FLog; import com.facebook.fbreact.specs.NativeAnimationsDebugModuleSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.JSApplicationCausedNativeException; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.common.ReactConstants; @@ -22,6 +23,7 @@ * Module that records debug information during transitions (animated navigation events such as * going from one screen to another). */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeAnimationsDebugModuleSpec.NAME) class AnimationsDebugModule extends NativeAnimationsDebugModuleSpec { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DevSettingsModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DevSettingsModule.java index ede03d57abe1..d83c70560712 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DevSettingsModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DevSettingsModule.java @@ -8,6 +8,7 @@ package com.facebook.react.modules.debug; import com.facebook.fbreact.specs.NativeDevSettingsSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.UiThreadUtil; @@ -19,6 +20,7 @@ /** * Module that exposes the URL to the source code map (used for exception stack trace parsing) to JS */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeDevSettingsSpec.NAME) public class DevSettingsModule extends NativeDevSettingsSpec { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DidJSUpdateUiDuringFrameDetector.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DidJSUpdateUiDuringFrameDetector.java index bda0972fae0e..75ad58dd81ef 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DidJSUpdateUiDuringFrameDetector.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DidJSUpdateUiDuringFrameDetector.java @@ -8,6 +8,7 @@ package com.facebook.react.modules.debug; import android.view.Choreographer; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.NotThreadSafeBridgeIdleDebugListener; import com.facebook.react.bridge.ReactBridge; import com.facebook.react.common.LongArray; @@ -20,6 +21,7 @@ * a {@link ReactBridge} and a {@link UIManagerModule}, {@link #getDidJSHitFrameAndCleanup} should * be called once per frame via a {@link Choreographer.FrameCallback}. */ +@Nullsafe(Nullsafe.Mode.LOCAL) class DidJSUpdateUiDuringFrameDetector implements NotThreadSafeBridgeIdleDebugListener, NotThreadSafeViewHierarchyUpdateDebugListener { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/SourceCodeModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/SourceCodeModule.java index 137791b0ecbc..bef68b878954 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/SourceCodeModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/debug/SourceCodeModule.java @@ -9,6 +9,7 @@ import com.facebook.fbreact.specs.NativeSourceCodeSpec; import com.facebook.infer.annotation.Assertions; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.module.annotations.ReactModule; import java.util.HashMap; @@ -17,6 +18,7 @@ /** * Module that exposes the URL to the source code map (used for exception stack trace parsing) to JS */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeSourceCodeSpec.NAME) public class SourceCodeModule extends NativeSourceCodeSpec { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolssettings/DevToolsSettingsManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolssettings/DevToolsSettingsManagerModule.java index 00e56e2ad362..91a15f841789 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolssettings/DevToolsSettingsManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolssettings/DevToolsSettingsManagerModule.java @@ -12,9 +12,11 @@ import android.content.SharedPreferences.Editor; import androidx.annotation.Nullable; import com.facebook.fbreact.specs.NativeDevToolsSettingsManagerSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.module.annotations.ReactModule; +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeDevToolsSettingsManagerSpec.NAME) public class DevToolsSettingsManagerModule extends NativeDevToolsSettingsManagerSpec { private static final String SHARED_PREFERENCES_PREFIX = "ReactNative__DevToolsSettings"; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.java index 34f9fd7121b0..771c91e3e82a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.java @@ -14,6 +14,7 @@ import com.facebook.imagepipeline.core.ImagePipeline; import com.facebook.imagepipeline.core.ImagePipelineConfig; import com.facebook.imagepipeline.listener.RequestListener; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; @@ -34,6 +35,7 @@ * *

Does not expose any methods to JavaScript code. For initialization and cleanup only. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = FrescoModule.NAME, needsEagerInit = true) public class FrescoModule extends ReactContextBaseJavaModule implements ModuleDataCleaner.Cleanable, LifecycleEventListener, TurboModule { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/ReactNetworkImageRequest.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/ReactNetworkImageRequest.java index e36c378e4ee6..6744de8c3e40 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/ReactNetworkImageRequest.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/ReactNetworkImageRequest.java @@ -9,9 +9,11 @@ import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReadableMap; /** Extended ImageRequest with request headers */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class ReactNetworkImageRequest extends ImageRequest { /** Headers for the request */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CountingOutputStream.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CountingOutputStream.java index 833feca9753d..2c238bf63709 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CountingOutputStream.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CountingOutputStream.java @@ -16,6 +16,7 @@ package com.facebook.react.modules.network; +import com.facebook.infer.annotation.Nullsafe; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -26,6 +27,7 @@ * @author Chris Nokleberg * @since 1.0 */ +@Nullsafe(Nullsafe.Mode.LOCAL) class CountingOutputStream extends FilterOutputStream { private long mCount; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java index 75255ca79a8a..20b065a16ee9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java @@ -10,6 +10,7 @@ import android.text.TextUtils; import android.webkit.CookieManager; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactContext; import java.io.IOException; @@ -25,6 +26,7 @@ *

This class relies on CookieManager to persist cookies to disk so cookies may be lost if the * application is terminated before it syncs. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class ForwardingCookieHandler extends CookieHandler { private static final String VERSION_ZERO_HEADER = "Set-cookie"; private static final String VERSION_ONE_HEADER = "Set-cookie2"; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/HeaderUtil.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/HeaderUtil.java index f57b3756d917..b3d767294e67 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/HeaderUtil.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/HeaderUtil.java @@ -7,12 +7,15 @@ package com.facebook.react.modules.network; +import com.facebook.infer.annotation.Nullsafe; + /** * The class purpose is to weaken too strict OkHttp restriction on http headers. See: * https://github.com/square/okhttp/issues/2016 Auth headers might have an Authentication * information. It is better to get 401 from the server in this case, rather than non descriptive * error as 401 could be handled to invalidate the wrong token in the client code. */ +@Nullsafe(Nullsafe.Mode.LOCAL) class HeaderUtil { public static String stripHeaderName(String name) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/OkHttpClientProvider.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/OkHttpClientProvider.java index 291f4c6c8a7f..4a8efb1d38d1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/OkHttpClientProvider.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/OkHttpClientProvider.java @@ -9,6 +9,7 @@ import android.content.Context; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; import java.io.File; import java.util.concurrent.TimeUnit; import okhttp3.Cache; @@ -18,6 +19,7 @@ * Helper class that provides the same OkHttpClient instance that will be used for all networking * requests. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class OkHttpClientProvider { // Centralized OkHttpClient for all networking requests. diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.java index e5d36a8d30ee..7bc5f03c6c11 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.java @@ -8,6 +8,7 @@ package com.facebook.react.modules.network; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -17,6 +18,7 @@ import okhttp3.HttpUrl; /** Basic okhttp3 CookieJar container */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class ReactCookieJarContainer implements CookieJarContainer { @Nullable private CookieJar cookieJar = null; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ResponseUtil.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ResponseUtil.java index 003b54e6120d..a3d2d8ffda31 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ResponseUtil.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ResponseUtil.java @@ -8,6 +8,7 @@ package com.facebook.react.modules.network; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.WritableArray; @@ -15,6 +16,7 @@ import java.net.SocketTimeoutException; /** Util methods to send network responses to JS. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class ResponseUtil { public static void onDataSend( @Nullable ReactApplicationContext reactContext, int requestId, long progress, long total) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java index 7bd6dc90ed43..95b57cb92c60 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java @@ -13,6 +13,7 @@ import android.util.SparseArray; import com.facebook.common.logging.FLog; import com.facebook.fbreact.specs.NativePermissionsAndroidSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; @@ -25,6 +26,7 @@ import java.util.ArrayList; /** Module that exposes the Android M Permission system to JS. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativePermissionsAndroidSpec.NAME) public class PermissionsModule extends NativePermissionsAndroidSpec implements PermissionListener { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.java index 67792f900d24..8f93ddc5e26b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.java @@ -10,11 +10,13 @@ import android.content.Context; import android.media.AudioManager; import com.facebook.fbreact.specs.NativeSoundManagerSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.module.annotations.ReactModule; /** {@link NativeModule} that allows Playing device sounds from JS. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeSoundManagerSpec.NAME) public class SoundManagerModule extends NativeSoundManagerSpec { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.java index 779861273a82..2ad1b2e65e9b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.java @@ -10,6 +10,7 @@ import android.view.Gravity; import android.widget.Toast; import com.facebook.fbreact.specs.NativeToastAndroidSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.UiThreadUtil; @@ -18,6 +19,7 @@ import java.util.Map; /** {@link NativeModule} that allows JS to show an Android Toast. */ +@Nullsafe(Nullsafe.Mode.LOCAL) @ReactModule(name = NativeToastAndroidSpec.NAME) public class ToastModule extends NativeToastAndroidSpec { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.java index 1ffc35800a5f..bedc8bea78cb 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.java @@ -13,10 +13,12 @@ import android.os.VibrationEffect; import android.os.Vibrator; import com.facebook.fbreact.specs.NativeVibrationSpec; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.module.annotations.ReactModule; +@Nullsafe(Nullsafe.Mode.LOCAL) @SuppressLint("MissingPermission") @ReactModule(name = NativeVibrationSpec.NAME) public class VibrationModule extends NativeVibrationSpec { 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(); 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; 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 { 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; 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"; 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"; 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<>();