From 419b68f38aa31d1d7d2de939a47516143adaafdf Mon Sep 17 00:00:00 2001 From: Gijs Weterings Date: Mon, 7 Apr 2025 06:33:09 -0700 Subject: [PATCH] Fix nullsafe FIXMEs for TurboModuleManager and mark nullsafe (#50370) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/50370 Gone trough all the FIXMEs added in the previous diff by the nullsafe tool, marked the class as nullsafe and ensured no remaining violations. Changelog: [Android][Fixed] Made TurboModuleManager.java nullsafe Reviewed By: cortinico Differential Revision: D71979605 fbshipit-source-id: b8da8f1ad12f5f6d63e7bd876d7c4912d69a4c4d --- .../turbomodule/core/TurboModuleManager.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java index 2a75b742b73..361af5448d7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java @@ -8,10 +8,10 @@ package com.facebook.react.internal.turbomodule.core; import androidx.annotation.GuardedBy; -import androidx.annotation.NonNull; 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.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.CxxModuleWrapper; @@ -36,13 +36,14 @@ import java.util.Map; * has a C++ counterpart This class installs the JSI bindings. It also implements the method to get * a Java module, that the C++ counterpart calls. */ +@Nullsafe(Nullsafe.Mode.LOCAL) public class TurboModuleManager implements TurboModuleRegistry { private static final String TAG = "TurboModuleManager"; private final List mEagerInitModuleNames; private final ModuleProvider mTurboModuleProvider; private final ModuleProvider mLegacyModuleProvider; - private final TurboModuleManagerDelegate mDelegate; + private final @Nullable TurboModuleManagerDelegate mDelegate; static { SoLoader.loadLibrary("turbomodulejsijni"); @@ -67,14 +68,12 @@ public class TurboModuleManager implements TurboModuleRegistry { @Nullable final TurboModuleManagerDelegate delegate, CallInvokerHolder jsCallInvokerHolder, NativeMethodCallInvokerHolder nativeMethodCallInvokerHolder) { - // NULLSAFE_FIXME[Field Not Nullable] mDelegate = delegate; mHybridData = initHybrid( runtimeExecutor, (CallInvokerHolderImpl) jsCallInvokerHolder, (NativeMethodCallInvokerHolderImpl) nativeMethodCallInvokerHolder, - // NULLSAFE_FIXME[Parameter Not Nullable] delegate); installJSIBindings(shouldEnableLegacyModuleInterop()); @@ -117,7 +116,6 @@ public class TurboModuleManager implements TurboModuleRegistry { } @Override - @NonNull public List getEagerInitModuleNames() { return mEagerInitModuleNames; } @@ -242,16 +240,17 @@ public class TurboModuleManager implements TurboModuleRegistry { moduleHolder = mModuleHolders.get(moduleName); } - // NULLSAFE_FIXME[Nullable Dereference] + if (moduleHolder == null) { + FLog.e(TAG, "getModule(): Tried to get module \"%s\", but moduleHolder was null", moduleName); + return null; + } + TurboModulePerfLogger.moduleCreateStart(moduleName, moduleHolder.getModuleId()); - // NULLSAFE_FIXME[Parameter Not Nullable] NativeModule module = getOrCreateModule(moduleName, moduleHolder, true); if (module != null) { - // NULLSAFE_FIXME[Nullable Dereference] TurboModulePerfLogger.moduleCreateEnd(moduleName, moduleHolder.getModuleId()); } else { - // NULLSAFE_FIXME[Nullable Dereference] TurboModulePerfLogger.moduleCreateFail(moduleName, moduleHolder.getModuleId()); } @@ -266,7 +265,7 @@ public class TurboModuleManager implements TurboModuleRegistry { */ @Nullable private NativeModule getOrCreateModule( - String moduleName, @NonNull ModuleHolder moduleHolder, boolean shouldPerfLog) { + String moduleName, ModuleHolder moduleHolder, boolean shouldPerfLog) { boolean shouldCreateModule = false; synchronized (moduleHolder) { @@ -390,7 +389,7 @@ public class TurboModuleManager implements TurboModuleRegistry { RuntimeExecutor runtimeExecutor, CallInvokerHolderImpl jsCallInvokerHolder, NativeMethodCallInvokerHolderImpl nativeMethodCallInvoker, - TurboModuleManagerDelegate tmmDelegate); + @Nullable TurboModuleManagerDelegate tmmDelegate); private native void installJSIBindings(boolean shouldCreateLegacyModules); @@ -432,8 +431,7 @@ public class TurboModuleManager implements TurboModuleRegistry { } private static class ModuleHolder { - // NULLSAFE_FIXME[Field Not Nullable] - private volatile NativeModule mModule = null; + private volatile @Nullable NativeModule mModule = null; private volatile boolean mIsTryingToCreate = false; private volatile boolean mIsDoneCreatingModule = false; private static volatile int sHolderCount = 0; @@ -448,7 +446,7 @@ public class TurboModuleManager implements TurboModuleRegistry { return mModuleId; } - void setModule(@NonNull NativeModule module) { + void setModule(NativeModule module) { mModule = module; }