diff --git a/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackage.java b/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackage.java index d6c13684e01..9450719098e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackage.java +++ b/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackage.java @@ -8,6 +8,8 @@ package com.facebook.react; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.module.model.ReactModuleInfo; +import com.facebook.react.module.model.ReactModuleInfoProvider; import com.facebook.react.uimanager.ViewManager; import java.util.ArrayList; import java.util.Collections; @@ -18,6 +20,7 @@ import java.util.ListIterator; import java.util.Map; import java.util.Set; import javax.annotation.Nullable; +import com.facebook.react.TurboReactPackage; /** * {@code CompositeReactPackage} allows to create a single package composed of views and modules @@ -46,6 +49,25 @@ public class CompositeReactPackage implements ViewManagerOnDemandReactPackage, R // This is for backward compatibility. final Map moduleMap = new HashMap<>(); for (ReactPackage reactPackage : mChildReactPackages) { + /** + * For now, we eagerly initialize the NativeModules inside TurboReactPackages. + * Ultimately, we should turn CompositeReactPackage into a TurboReactPackage + * and remove this eager initialization. + * + * TODO: T45627020 + */ + if (reactPackage instanceof TurboReactPackage) { + TurboReactPackage turboReactPackage = (TurboReactPackage)reactPackage; + ReactModuleInfoProvider moduleInfoProvider = turboReactPackage.getReactModuleInfoProvider(); + Map moduleInfos = moduleInfoProvider.getReactModuleInfos(); + + for (final String moduleName : moduleInfos.keySet()) { + moduleMap.put(moduleName, turboReactPackage.getModule(moduleName, reactContext)); + } + + continue; + } + for (NativeModule nativeModule : reactPackage.createNativeModules(reactContext)) { moduleMap.put(nativeModule.getName(), nativeModule); }