mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add LazyReactPackage support to TurboModule system
Summary: Make the TurboModule system understand LazyReactPackages. **Note:** The TurboModule system can only create TurboModules in LazyReactPackages. Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D43254982 fbshipit-source-id: 4260cc7dc1d28b1ad6268087720c6e02cfc20d32
This commit is contained in:
committed by
Facebook GitHub Bot
parent
5097763f53
commit
1c5ba299b3
+30
@@ -11,8 +11,10 @@ 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;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.config.ReactFeatureFlags;
|
||||
import com.facebook.react.module.model.ReactModuleInfo;
|
||||
import com.facebook.react.turbomodule.core.TurboModuleManagerDelegate;
|
||||
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
||||
@@ -20,6 +22,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.inject.Provider;
|
||||
|
||||
public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModuleManagerDelegate {
|
||||
interface ModuleProvider {
|
||||
@@ -31,6 +34,11 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
|
||||
private final Map<ModuleProvider, Map<String, ReactModuleInfo>> mPackageModuleInfos =
|
||||
new HashMap<>();
|
||||
|
||||
private static boolean shouldSupportLegacyPackages() {
|
||||
return ReactFeatureFlags.enableBridgelessArchitecture
|
||||
&& ReactFeatureFlags.unstable_useTurboModuleInterop;
|
||||
}
|
||||
|
||||
protected ReactPackageTurboModuleManagerDelegate(
|
||||
ReactApplicationContext reactApplicationContext, List<ReactPackage> packages) {
|
||||
super();
|
||||
@@ -46,6 +54,28 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
|
||||
mModuleProviders.add(moduleProvider);
|
||||
mPackageModuleInfos.put(
|
||||
moduleProvider, turboPkg.getReactModuleInfoProvider().getReactModuleInfos());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (shouldSupportLegacyPackages() && reactPackage instanceof LazyReactPackage) {
|
||||
// TODO(T145105887): Output warnings that LazyReactPackage was used
|
||||
final LazyReactPackage lazyPkg = ((LazyReactPackage) reactPackage);
|
||||
final List<ModuleSpec> moduleSpecs = lazyPkg.getNativeModules(reactApplicationContext);
|
||||
final Map<String, Provider<? extends NativeModule>> moduleSpecProviderMap = new HashMap<>();
|
||||
for (final ModuleSpec moduleSpec : moduleSpecs) {
|
||||
moduleSpecProviderMap.put(moduleSpec.getName(), moduleSpec.getProvider());
|
||||
}
|
||||
|
||||
final ModuleProvider moduleProvider =
|
||||
(name) -> {
|
||||
Provider<? extends NativeModule> provider = moduleSpecProviderMap.get(name);
|
||||
return provider != null ? provider.get() : null;
|
||||
};
|
||||
|
||||
mModuleProviders.add(moduleProvider);
|
||||
mPackageModuleInfos.put(
|
||||
moduleProvider, lazyPkg.getReactModuleInfoProvider().getReactModuleInfos());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user