mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add ReactPackage support to TurboModule system
Summary: Make the TurboModule system understand ReactPackages. **Note:** The TurboModule system can only create TurboModules in LazyReactPackages. Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D43255701 fbshipit-source-id: 74d034732d0a6fb32197b15bb54cac9161abc294
This commit is contained in:
committed by
Facebook GitHub Bot
parent
1c5ba299b3
commit
a09a6d4d44
+50
@@ -15,6 +15,7 @@ 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.annotations.ReactModule;
|
||||
import com.facebook.react.module.model.ReactModuleInfo;
|
||||
import com.facebook.react.turbomodule.core.TurboModuleManagerDelegate;
|
||||
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
||||
@@ -77,6 +78,55 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
|
||||
moduleProvider, lazyPkg.getReactModuleInfoProvider().getReactModuleInfos());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (shouldSupportLegacyPackages()) {
|
||||
// TODO(T145105887): Output warnings that ReactPackage was used
|
||||
|
||||
final List<NativeModule> nativeModules =
|
||||
reactPackage.createNativeModules(reactApplicationContext);
|
||||
|
||||
final Map<String, NativeModule> moduleMap = new HashMap<>();
|
||||
final Map<String, ReactModuleInfo> reactModuleInfoMap = new HashMap<>();
|
||||
|
||||
for (final NativeModule module : nativeModules) {
|
||||
final Class<? extends NativeModule> moduleClass = module.getClass();
|
||||
final @Nullable ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class);
|
||||
|
||||
final String moduleName = reactModule != null ? reactModule.name() : module.getName();
|
||||
|
||||
final ReactModuleInfo moduleInfo =
|
||||
reactModule != null
|
||||
? new ReactModuleInfo(
|
||||
moduleName,
|
||||
moduleClass.getName(),
|
||||
reactModule.canOverrideExistingModule(),
|
||||
true,
|
||||
reactModule.hasConstants(),
|
||||
reactModule.isCxxModule(),
|
||||
TurboModule.class.isAssignableFrom(moduleClass))
|
||||
: new ReactModuleInfo(
|
||||
moduleName,
|
||||
moduleClass.getName(),
|
||||
module.canOverrideExistingModule(),
|
||||
true,
|
||||
true,
|
||||
CxxModuleWrapper.class.isAssignableFrom(moduleClass),
|
||||
TurboModule.class.isAssignableFrom(moduleClass));
|
||||
|
||||
reactModuleInfoMap.put(moduleName, moduleInfo);
|
||||
moduleMap.put(moduleName, module);
|
||||
}
|
||||
|
||||
final ModuleProvider moduleProvider =
|
||||
new ModuleProvider() {
|
||||
public NativeModule getModule(String moduleName) {
|
||||
return moduleMap.get(moduleName);
|
||||
}
|
||||
};
|
||||
|
||||
mModuleProviders.add(moduleProvider);
|
||||
mPackageModuleInfos.put(moduleProvider, reactModuleInfoMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user