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
This commit is contained in:
Gijs Weterings
2025-04-07 06:33:09 -07:00
committed by Facebook GitHub Bot
parent 4664db138f
commit 419b68f38a
@@ -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<String> 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<String> 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;
}