Turn FBMainReactPackage into a TurboReactPackage

Summary: `ReactTurboModuleManagerDelegate` only understands `TurboReactPackage`s. So, we need to convert `FBMainReactPackage` and all its dependent packages into `TurboReactPackage`.

Reviewed By: fkgozali

Differential Revision: D15711546

fbshipit-source-id: df626d542a6477b116c867299219156423c6364a
This commit is contained in:
Ramanpreet Nara
2019-06-09 15:24:09 -07:00
committed by Facebook Github Bot
parent e5c96a85fc
commit 9c76e14b07
4 changed files with 176 additions and 212 deletions
@@ -63,7 +63,14 @@ import com.facebook.react.views.viewpager.ReactViewPagerManager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Nullable;
import javax.inject.Provider;
import com.facebook.react.TurboReactPackage;
import com.facebook.react.ViewManagerOnDemandReactPackage;
import java.util.Map;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.module.annotations.ReactModule;
import java.util.HashMap;
/**
* Package defining basic modules and view managers.
@@ -93,9 +100,8 @@ import javax.inject.Provider;
ToastModule.class,
VibrationModule.class,
WebSocketModule.class,
})
public class MainReactPackage extends LazyReactPackage {
public class MainReactPackage extends TurboReactPackage {
private MainPackageConfig mConfig;
@@ -110,201 +116,60 @@ public class MainReactPackage extends LazyReactPackage {
}
@Override
public List<ModuleSpec> getNativeModules(final ReactApplicationContext context) {
return Arrays.asList(
ModuleSpec.nativeModuleSpec(
AccessibilityInfoModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new AccessibilityInfoModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
AppStateModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new AppStateModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
BlobModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new BlobModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
FileReaderModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new FileReaderModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
AsyncStorageModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new AsyncStorageModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
CameraRollManager.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new CameraRollManager(context);
}
}),
ModuleSpec.nativeModuleSpec(
ClipboardModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ClipboardModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
DatePickerDialogModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new DatePickerDialogModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
DialogModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new DialogModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
FrescoModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new FrescoModule(
context, true, mConfig != null ? mConfig.getFrescoConfig() : null);
}
}),
ModuleSpec.nativeModuleSpec(
I18nManagerModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new I18nManagerModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
ImageEditingManager.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ImageEditingManager(context);
}
}),
ModuleSpec.nativeModuleSpec(
ImageLoaderModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ImageLoaderModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
ImageStoreManager.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ImageStoreManager(context);
}
}),
ModuleSpec.nativeModuleSpec(
IntentModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new IntentModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
NativeAnimatedModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new NativeAnimatedModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
NetworkingModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new NetworkingModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
PermissionsModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new PermissionsModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
ShareModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ShareModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
StatusBarModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new StatusBarModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
TimePickerDialogModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new TimePickerDialogModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
ToastModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ToastModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
VibrationModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new VibrationModule(context);
}
}),
ModuleSpec.nativeModuleSpec(
WebSocketModule.class,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new WebSocketModule(context);
}
}));
public @Nullable NativeModule getModule(String name, ReactApplicationContext context) {
switch (name) {
case AccessibilityInfoModule.NAME:
return new AccessibilityInfoModule(context);
case AppStateModule.NAME:
return new AppStateModule(context);
case BlobModule.NAME:
return new BlobModule(context);
case FileReaderModule.NAME:
return new FileReaderModule(context);
case AsyncStorageModule.NAME:
return new AsyncStorageModule(context);
case CameraRollManager.NAME:
return new CameraRollManager(context);
case ClipboardModule.NAME:
return new ClipboardModule(context);
case DatePickerDialogModule.FRAGMENT_TAG:
return new DatePickerDialogModule(context);
case DialogModule.NAME:
return new DialogModule(context);
case FrescoModule.NAME:
return new FrescoModule(
context, true, mConfig != null ? mConfig.getFrescoConfig() : null);
case I18nManagerModule.NAME:
return new I18nManagerModule(context);
case ImageEditingManager.NAME:
return new ImageEditingManager(context);
case ImageLoaderModule.NAME:
return new ImageLoaderModule(context);
case ImageStoreManager.NAME:
return new ImageStoreManager(context);
case IntentModule.NAME:
return new IntentModule(context);
case NativeAnimatedModule.NAME:
return new NativeAnimatedModule(context);
case NetworkingModule.NAME:
return new NetworkingModule(context);
case PermissionsModule.NAME:
return new PermissionsModule(context);
case ShareModule.NAME:
return new ShareModule(context);
case StatusBarModule.NAME:
return new StatusBarModule(context);
case TimePickerDialogModule.FRAGMENT_TAG:
return new TimePickerDialogModule(context);
case ToastModule.NAME:
return new ToastModule(context);
case VibrationModule.NAME:
return new VibrationModule(context);
case WebSocketModule.NAME:
return new WebSocketModule(context);
default:
return null;
}
}
@Override
@@ -343,7 +208,68 @@ public class MainReactPackage extends LazyReactPackage {
@Override
public ReactModuleInfoProvider getReactModuleInfoProvider() {
// This has to be done via reflection or we break open source.
return LazyReactPackage.getReactModuleInfoProviderViaReflection(this);
try {
Class<?> reactModuleInfoProviderClass =
Class.forName("com.facebook.react.MainReactPackage$$ReactModuleInfoProvider");
return (ReactModuleInfoProvider) reactModuleInfoProviderClass.newInstance();
} catch (ClassNotFoundException e) {
// In OSS case, the annotation processor does not run. We fall back on creating this byhand
Class<? extends NativeModule>[] moduleList =
new Class[] {
AccessibilityInfoModule.class,
AppStateModule.class,
BlobModule.class,
FileReaderModule.class,
AsyncStorageModule.class,
CameraRollManager.class,
ClipboardModule.class,
DatePickerDialogModule.class,
DialogModule.class,
FrescoModule.class,
I18nManagerModule.class,
ImageEditingManager.class,
ImageLoaderModule.class,
ImageStoreManager.class,
IntentModule.class,
NativeAnimatedModule.class,
NetworkingModule.class,
PermissionsModule.class,
ShareModule.class,
StatusBarModule.class,
TimePickerDialogModule.class,
ToastModule.class,
VibrationModule.class,
WebSocketModule.class
};
final Map<String, ReactModuleInfo> reactModuleInfoMap = new HashMap<>();
for (Class<? extends NativeModule> moduleClass : moduleList) {
ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class);
reactModuleInfoMap.put(
reactModule.name(),
new ReactModuleInfo(
reactModule.name(),
moduleClass.getName(),
reactModule.canOverrideExistingModule(),
reactModule.needsEagerInit(),
reactModule.hasConstants(),
reactModule.isCxxModule(),
false));
}
return new ReactModuleInfoProvider() {
@Override
public Map<String, ReactModuleInfo> getReactModuleInfos() {
return reactModuleInfoMap;
}
};
} catch (InstantiationException e) {
throw new RuntimeException(
"No ReactModuleInfoProvider for CoreModulesPackage$$ReactModuleInfoProvider", e);
} catch (IllegalAccessException e) {
throw new RuntimeException(
"No ReactModuleInfoProvider for CoreModulesPackage$$ReactModuleInfoProvider", e);
}
}
}