mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Setup TurboModule interop test in Fb4a (#36669)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36669 The test: Route all TurboModules in Fb4a through the interop layer. So now, instead of using the C++ codegen for method dispatch, TurboModules will instead be using JavaInteropTurboModule, which uses the ReactMethod annotations for method dispatch. MobileConfig actualization diff: D44405316. Changelog: [Internal] Reviewed By: cortinico Differential Revision: D44405336 fbshipit-source-id: 3b00028e26cdcd229e64630eef73409a3264636a
This commit is contained in:
committed by
Facebook GitHub Bot
parent
1f7daf988b
commit
83056947aa
+28
-19
@@ -44,6 +44,12 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
|
||||
&& ReactFeatureFlags.unstable_useTurboModuleInterop;
|
||||
}
|
||||
|
||||
private static boolean shouldRouteTurboModulesThroughInteropLayer() {
|
||||
return ReactFeatureFlags.enableBridgelessArchitecture
|
||||
&& ReactFeatureFlags.unstable_useTurboModuleInterop
|
||||
&& ReactFeatureFlags.unstable_useTurboModuleInteropForAllTurboModules;
|
||||
}
|
||||
|
||||
protected ReactPackageTurboModuleManagerDelegate(
|
||||
ReactApplicationContext reactApplicationContext, List<ReactPackage> packages) {
|
||||
super();
|
||||
@@ -146,22 +152,25 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
|
||||
@Nullable
|
||||
@Override
|
||||
public TurboModule getModule(String moduleName) {
|
||||
if (shouldRouteTurboModulesThroughInteropLayer()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
NativeModule resolvedModule = null;
|
||||
|
||||
for (final ModuleProvider moduleProvider : mModuleProviders) {
|
||||
try {
|
||||
final ReactModuleInfo moduleInfo = mPackageModuleInfos.get(moduleProvider).get(moduleName);
|
||||
if (moduleInfo == null
|
||||
// Skip TurboModule-incompatible modules
|
||||
|| !moduleInfo.isTurboModule()
|
||||
|| resolvedModule != null && !moduleInfo.canOverrideExistingModule()) {
|
||||
continue;
|
||||
if (moduleInfo != null
|
||||
&& moduleInfo.isTurboModule()
|
||||
&& (resolvedModule == null || moduleInfo.canOverrideExistingModule())) {
|
||||
|
||||
final NativeModule module = moduleProvider.getModule(moduleName);
|
||||
if (module != null) {
|
||||
resolvedModule = module;
|
||||
}
|
||||
}
|
||||
|
||||
final NativeModule module = moduleProvider.getModule(moduleName);
|
||||
if (module != null) {
|
||||
resolvedModule = module;
|
||||
}
|
||||
} catch (IllegalArgumentException ex) {
|
||||
/**
|
||||
* TurboReactPackages can throw an IllegalArgumentException when a module isn't found. If
|
||||
@@ -191,17 +200,16 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
|
||||
for (final ModuleProvider moduleProvider : mModuleProviders) {
|
||||
try {
|
||||
final ReactModuleInfo moduleInfo = mPackageModuleInfos.get(moduleProvider).get(moduleName);
|
||||
if (moduleInfo == null
|
||||
// Skip TurboModule-compatible modules
|
||||
|| moduleInfo.isTurboModule()
|
||||
|| resolvedModule != null && !moduleInfo.canOverrideExistingModule()) {
|
||||
continue;
|
||||
if (moduleInfo != null
|
||||
&& (!moduleInfo.isTurboModule() || shouldRouteTurboModulesThroughInteropLayer())
|
||||
&& (resolvedModule == null || moduleInfo.canOverrideExistingModule())) {
|
||||
|
||||
final NativeModule module = moduleProvider.getModule(moduleName);
|
||||
if (module != null) {
|
||||
resolvedModule = module;
|
||||
}
|
||||
}
|
||||
|
||||
final NativeModule module = moduleProvider.getModule(moduleName);
|
||||
if (module != null) {
|
||||
resolvedModule = module;
|
||||
}
|
||||
} catch (IllegalArgumentException ex) {
|
||||
/**
|
||||
* TurboReactPackages can throw an IllegalArgumentException when a module isn't found. If
|
||||
@@ -212,7 +220,8 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
|
||||
}
|
||||
|
||||
// Skip TurboModule-compatible modules
|
||||
if (resolvedModule instanceof TurboModule) {
|
||||
boolean isLegacyModule = !(resolvedModule instanceof TurboModule);
|
||||
if (!(isLegacyModule || shouldRouteTurboModulesThroughInteropLayer())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
+8
@@ -28,6 +28,14 @@ public class ReactFeatureFlags {
|
||||
/** In Bridgeless mode, should legacy NativeModules use the TurboModule system? */
|
||||
public static volatile boolean unstable_useTurboModuleInterop = false;
|
||||
|
||||
/**
|
||||
* Temporary flag that will be used to validate the staibility of the TurboModule interop layer.
|
||||
* Force all Java NativeModules that are TurboModule-compatible (that would have otherwise gone
|
||||
* through the C++ codegen method dispatch path) instead through the TurboModule interop layer
|
||||
* (i.e: the JavaInteropTurboModule method dispatch path).
|
||||
*/
|
||||
public static volatile boolean unstable_useTurboModuleInteropForAllTurboModules = false;
|
||||
|
||||
/**
|
||||
* Should this application use the new (Fabric) Renderer? If yes, all rendering in this app will
|
||||
* use Fabric instead of the legacy renderer.
|
||||
|
||||
+23
-7
@@ -74,7 +74,7 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||
new ModuleProvider<TurboModule>() {
|
||||
@Nullable
|
||||
public TurboModule getModule(String moduleName) {
|
||||
if (delegate == null) {
|
||||
if (delegate == null || shouldRouteTurboModulesThroughInteropLayer()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -104,10 +104,12 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||
|
||||
NativeModule nativeModule = delegate.getLegacyModule(moduleName);
|
||||
if (nativeModule != null) {
|
||||
// TurboModuleManagerDelegate.getLegacyModule must never return a TurboModule
|
||||
Assertions.assertCondition(
|
||||
!(nativeModule instanceof TurboModule),
|
||||
"NativeModule \"" + moduleName + "\" is a TurboModule");
|
||||
if (!shouldRouteTurboModulesThroughInteropLayer()) {
|
||||
// TurboModuleManagerDelegate.getLegacyModule must never return a TurboModule
|
||||
Assertions.assertCondition(
|
||||
!(nativeModule instanceof TurboModule),
|
||||
"NativeModule \"" + moduleName + "\" is a TurboModule");
|
||||
}
|
||||
return nativeModule;
|
||||
}
|
||||
return nativeModule;
|
||||
@@ -120,6 +122,12 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||
&& ReactFeatureFlags.unstable_useTurboModuleInterop;
|
||||
}
|
||||
|
||||
private static boolean shouldRouteTurboModulesThroughInteropLayer() {
|
||||
return ReactFeatureFlags.enableBridgelessArchitecture
|
||||
&& ReactFeatureFlags.unstable_useTurboModuleInterop
|
||||
&& ReactFeatureFlags.unstable_useTurboModuleInteropForAllTurboModules;
|
||||
}
|
||||
|
||||
public List<String> getEagerInitModuleNames() {
|
||||
return mEagerInitModuleNames;
|
||||
}
|
||||
@@ -134,7 +142,8 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||
@Nullable
|
||||
private NativeModule getLegacyJavaModule(String moduleName) {
|
||||
final NativeModule module = getNativeModule(moduleName);
|
||||
return !(module instanceof CxxModuleWrapper) && !(module instanceof TurboModule)
|
||||
return !(module instanceof CxxModuleWrapper)
|
||||
&& (shouldRouteTurboModulesThroughInteropLayer() || !(module instanceof TurboModule))
|
||||
? module
|
||||
: null;
|
||||
}
|
||||
@@ -143,7 +152,8 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||
@Nullable
|
||||
private CxxModuleWrapper getLegacyCxxModule(String moduleName) {
|
||||
final NativeModule module = getNativeModule(moduleName);
|
||||
return module instanceof CxxModuleWrapper && !(module instanceof TurboModule)
|
||||
return module instanceof CxxModuleWrapper
|
||||
&& (shouldRouteTurboModulesThroughInteropLayer() || !(module instanceof TurboModule))
|
||||
? (CxxModuleWrapper) module
|
||||
: null;
|
||||
}
|
||||
@@ -151,6 +161,9 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||
@DoNotStrip
|
||||
@Nullable
|
||||
private CxxModuleWrapper getTurboLegacyCxxModule(String moduleName) {
|
||||
if (shouldRouteTurboModulesThroughInteropLayer()) {
|
||||
return null;
|
||||
}
|
||||
final NativeModule module = getNativeModule(moduleName);
|
||||
return module instanceof CxxModuleWrapper && module instanceof TurboModule
|
||||
? (CxxModuleWrapper) module
|
||||
@@ -160,6 +173,9 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry {
|
||||
@DoNotStrip
|
||||
@Nullable
|
||||
private TurboModule getTurboJavaModule(String moduleName) {
|
||||
if (shouldRouteTurboModulesThroughInteropLayer()) {
|
||||
return null;
|
||||
}
|
||||
final NativeModule module = getNativeModule(moduleName);
|
||||
return !(module instanceof CxxModuleWrapper) && module instanceof TurboModule
|
||||
? (TurboModule) module
|
||||
|
||||
Reference in New Issue
Block a user