Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

import androidx.annotation.Nullable;
import com.facebook.infer.annotation.Assertions;
import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.bridge.CxxModuleWrapper;
import com.facebook.react.bridge.ModuleSpec;
import com.facebook.react.bridge.NativeModule;
Expand Down Expand Up @@ -142,36 +141,6 @@ public NativeModule getModule(String moduleName) {
@Nullable
@Override
public TurboModule getModule(String moduleName) {
TurboModule module = resolveModule(moduleName);
if (module == null) {
return null;
}

if (module instanceof CxxModuleWrapper) {
return null;
}

return module;
}

@Nullable
@Override
@DoNotStrip
public CxxModuleWrapper getLegacyCxxModule(String moduleName) {
TurboModule module = resolveModule(moduleName);
if (module == null) {
return null;
}

if (!(module instanceof CxxModuleWrapper)) {
return null;
}

return (CxxModuleWrapper) module;
}

@Nullable
private TurboModule resolveModule(String moduleName) {
NativeModule resolvedModule = null;

for (final ModuleProvider moduleProvider : mModuleProviders) {
Expand Down Expand Up @@ -203,6 +172,13 @@ private TurboModule resolveModule(String moduleName) {
return null;
}

@Deprecated
@Nullable
@Override
public CxxModuleWrapper getLegacyCxxModule(String moduleName) {
return null;
}

@Override
public List<String> getEagerInitModuleNames() {
List<String> moduleNames = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.react.module.annotations.ReactModule;
import com.facebook.react.turbomodule.core.CallInvokerHolderImpl;
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
import com.facebook.react.turbomodule.core.interfaces.TurboModuleRegistry;
import com.facebook.systrace.Systrace;
import com.facebook.systrace.TraceListener;
Expand Down Expand Up @@ -458,7 +457,7 @@ public <T extends JavaScriptModule> T getJSModule(Class<T> jsInterface) {
@Override
public <T extends NativeModule> boolean hasNativeModule(Class<T> nativeModuleInterface) {
String moduleName = getNameFromAnnotation(nativeModuleInterface);
return getTurboModuleRegistry() != null && getTurboModuleRegistry().hasModule(moduleName)
return getTurboModuleRegistry() != null && getTurboModuleRegistry().hasNativeModule(moduleName)
? true
: mNativeModuleRegistry.hasModule(moduleName);
}
Expand All @@ -483,9 +482,9 @@ private TurboModuleRegistry getTurboModuleRegistry() {
@Nullable
public NativeModule getNativeModule(String moduleName) {
if (getTurboModuleRegistry() != null) {
TurboModule turboModule = getTurboModuleRegistry().getModule(moduleName);
if (turboModule != null) {
return (NativeModule) turboModule;
NativeModule module = getTurboModuleRegistry().getNativeModule(moduleName);
if (module != null) {
return module;
}
}

Expand All @@ -510,8 +509,8 @@ public Collection<NativeModule> getNativeModules() {
nativeModules.addAll(mNativeModuleRegistry.getAllModules());

if (getTurboModuleRegistry() != null) {
for (TurboModule turboModule : getTurboModuleRegistry().getModules()) {
nativeModules.add((NativeModule) turboModule);
for (NativeModule module : getTurboModuleRegistry().getNativeModules()) {
nativeModules.add(module);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@
public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
private static volatile boolean sIsSoLibraryLoaded;
private final List<String> mEagerInitModuleNames;
private final ModuleProvider<TurboModule> mJavaModuleProvider;
private final ModuleProvider<TurboModule> mCxxModuleProvider;
private final ModuleProvider<TurboModule> mModuleProvider;

// Prevents the creation of new TurboModules once cleanup as been initiated.
private final Object mModuleCleanupLock = new Object();
Expand Down Expand Up @@ -65,35 +64,27 @@ public TurboModuleManager(
mEagerInitModuleNames =
delegate == null ? new ArrayList<String>() : delegate.getEagerInitModuleNames();

mJavaModuleProvider =
mModuleProvider =
new ModuleProvider<TurboModule>() {
@Nullable
public TurboModule getModule(String moduleName) {
if (delegate == null) {
return null;
}

return delegate.getModule(moduleName);
}
};

mCxxModuleProvider =
new ModuleProvider<TurboModule>() {
@Nullable
public TurboModule getModule(String moduleName) {
if (delegate == null) {
return null;
}

CxxModuleWrapper nativeModule = delegate.getLegacyCxxModule(moduleName);
if (nativeModule != null) {
// TurboModuleManagerDelegate must always return TurboModules
Assertions.assertCondition(
nativeModule instanceof TurboModule,
"CxxModuleWrapper \"" + moduleName + "\" is not a TurboModule");
return (TurboModule) nativeModule;
TurboModule module = delegate.getModule(moduleName);
if (module == null) {
CxxModuleWrapper legacyCxxModule = delegate.getLegacyCxxModule(moduleName);

if (legacyCxxModule != null) {
// TurboModuleManagerDelegate.getLegacyCxxModule() must always return TurboModules
Assertions.assertCondition(
legacyCxxModule instanceof TurboModule,
"CxxModuleWrapper \"" + moduleName + "\" is not a TurboModule");
module = (TurboModule) legacyCxxModule;
}
}
return null;
return module;
}
};
}
Expand All @@ -105,39 +96,39 @@ public List<String> getEagerInitModuleNames() {
@DoNotStrip
@Nullable
private CxxModuleWrapper getLegacyCxxModule(String moduleName) {
final TurboModule turboModule = getModule(moduleName);
if (!(turboModule instanceof CxxModuleWrapper)) {
return null;
}

return (CxxModuleWrapper) turboModule;
final NativeModule module = getNativeModule(moduleName);
return module instanceof CxxModuleWrapper ? (CxxModuleWrapper) module : null;
}

@DoNotStrip
@Nullable
private TurboModule getJavaModule(String moduleName) {
final TurboModule turboModule = getModule(moduleName);
if (turboModule instanceof CxxModuleWrapper) {
return null;
}
final NativeModule module = getNativeModule(moduleName);
return !(module instanceof CxxModuleWrapper) && module instanceof TurboModule
? (TurboModule) module
: null;
}

return turboModule;
@Deprecated
public TurboModule getModule(String moduleName) {
NativeModule module = getNativeModule(moduleName);
return module instanceof TurboModule ? (TurboModule) module : null;
}

/**
* Return the TurboModule instance that corresponds to the provided moduleName.
* Return the NativeModule instance that corresponds to the provided moduleName.
*
* <p>This method: - Creates and initializes the module if it doesn't already exist. - Returns
* null after TurboModuleManager has been torn down.
*/
@Nullable
public TurboModule getModule(String moduleName) {
public NativeModule getNativeModule(String moduleName) {
ModuleHolder moduleHolder;

synchronized (mModuleCleanupLock) {
if (mModuleCleanupStarted) {
/*
* Always return null after cleanup has started, so that getModule(moduleName) returns null.
* Always return null after cleanup has started, so that getNativeModule(moduleName) returns null.
*/
return null;
}
Expand All @@ -154,7 +145,7 @@ public TurboModule getModule(String moduleName) {
}

TurboModulePerfLogger.moduleCreateStart(moduleName, moduleHolder.getModuleId());
TurboModule module = (TurboModule) getOrCreateModule(moduleName, moduleHolder, true);
NativeModule module = getOrCreateNativeModule(moduleName, moduleHolder, true);

if (module != null) {
TurboModulePerfLogger.moduleCreateEnd(moduleName, moduleHolder.getModuleId());
Expand All @@ -172,7 +163,7 @@ public TurboModule getModule(String moduleName) {
* first thread creates x. All n - 1 other threads wait until the x is created and initialized.
*/
@Nullable
private NativeModule getOrCreateModule(
private NativeModule getOrCreateNativeModule(
String moduleName, @NonNull ModuleHolder moduleHolder, boolean shouldPerfLog) {
boolean shouldCreateModule = false;

Expand All @@ -194,11 +185,7 @@ private NativeModule getOrCreateModule(

if (shouldCreateModule) {
TurboModulePerfLogger.moduleCreateConstructStart(moduleName, moduleHolder.getModuleId());
NativeModule nativeModule = (NativeModule) mJavaModuleProvider.getModule(moduleName);

if (nativeModule == null) {
nativeModule = (NativeModule) mCxxModuleProvider.getModule(moduleName);
}
NativeModule nativeModule = (NativeModule) mModuleProvider.getModule(moduleName);

TurboModulePerfLogger.moduleCreateConstructEnd(moduleName, moduleHolder.getModuleId());
TurboModulePerfLogger.moduleCreateSetUpStart(moduleName, moduleHolder.getModuleId());
Expand Down Expand Up @@ -249,32 +236,63 @@ private NativeModule getOrCreateModule(
}
}

/** Which TurboModules have been created? */
@Deprecated
public Collection<TurboModule> getModules() {
final Collection<TurboModule> modules = new ArrayList<>();

for (final NativeModule module : getNativeModules()) {
if (module instanceof TurboModule) {
modules.add((TurboModule) module);
}
}

return modules;
}

/** Which NativeModules have been created? */
public Collection<NativeModule> getNativeModules() {
final List<ModuleHolder> moduleHolders = new ArrayList<>();
synchronized (mModuleCleanupLock) {
moduleHolders.addAll(mModuleHolders.values());
}

final List<TurboModule> turboModules = new ArrayList<>();
final List<NativeModule> modules = new ArrayList<>();
for (final ModuleHolder moduleHolder : moduleHolders) {
synchronized (moduleHolder) {
// No need to wait for the TurboModule to finish being created and initialized
if (moduleHolder.getModule() != null) {
turboModules.add((TurboModule) moduleHolder.getModule());
modules.add(moduleHolder.getModule());
}
}
}

return turboModules;
return modules;
}

@Deprecated
public boolean hasModule(String moduleName) {
ModuleHolder moduleHolder;
synchronized (mModuleCleanupLock) {
moduleHolder = mModuleHolders.get(moduleName);
}

if (moduleHolder != null) {
synchronized (moduleHolder) {
if (moduleHolder.getModule() instanceof TurboModule) {
return true;
}
}
}

return false;
}

public boolean hasNativeModule(String moduleName) {
ModuleHolder moduleHolder;
synchronized (mModuleCleanupLock) {
moduleHolder = mModuleHolders.get(moduleName);
}

if (moduleHolder != null) {
synchronized (moduleHolder) {
if (moduleHolder.getModule() != null) {
Expand Down Expand Up @@ -321,7 +339,7 @@ public void onCatalystInstanceDestroy() {
* initialized. In this case, we should wait for initialization to complete, before destroying
* the TurboModule.
*/
final NativeModule nativeModule = getOrCreateModule(moduleName, moduleHolder, false);
final NativeModule nativeModule = getOrCreateNativeModule(moduleName, moduleHolder, false);

if (nativeModule != null) {
nativeModule.invalidate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,12 @@ protected TurboModuleManagerDelegate() {
public abstract TurboModule getModule(String moduleName);

/**
* Create an return a CxxModuleWrapper NativeModule with name `moduleName`. If `moduleName` isn't
* a CxxModule, return null.
* Create and return a CxxModuleWrapper NativeModule with name `moduleName`. If `moduleName` isn't
* a CxxModule, return null. CxxModuleWrapper must implement TurboModule.
*
* <p>Deprecated. Please just return your CxxModuleWrappers from getModule.
*/
@Deprecated
@Nullable
public abstract CxxModuleWrapper getLegacyCxxModule(String moduleName);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "rn_android_library")
load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "react_native_target", "rn_android_library")

rn_android_library(
name = "interfaces",
Expand All @@ -15,6 +15,7 @@ rn_android_library(
"PUBLIC",
],
deps = [
react_native_target("java/com/facebook/react/bridge:interfaces"),
react_native_dep("third-party/android/androidx:annotation"),
react_native_dep("third-party/java/jsr-305:jsr-305"),
],
Expand Down
Loading