Prevent class loading for lazy native modules

Summary:
When native modules use `LazyReactPackage`, the modules themselves are not initialized. However, they still use the class names, causing the classes to load. This diff removes the need to perform any class loads. Any properties of the classes that are required are now populated in the `ReactModuleInfo` of that class.

Note that this diff itself does not prevent class loading since any references to `*.class` in `LazyReactpackage` needs to be removed in a consequent diff

Reviewed By: achen1

Differential Revision: D8950025

fbshipit-source-id: 80ddf7e1f33bf2af0db1bd262069795de77ec611
This commit is contained in:
Ram N
2018-07-27 23:30:39 -07:00
committed by Facebook Github Bot
parent d891ee1dee
commit c8e000b19a
9 changed files with 94 additions and 44 deletions
@@ -25,6 +25,7 @@ public class ModuleSpec {
private final @Nullable Class<? extends NativeModule> mType;
private final Provider<? extends NativeModule> mProvider;
private final String mClassName;
/**
* Simple spec for modules with a default constructor.
@@ -66,19 +67,28 @@ public class ModuleSpec {
public static ModuleSpec nativeModuleSpec(
Class<? extends NativeModule> type, Provider<? extends NativeModule> provider) {
return new ModuleSpec(type, provider);
return new ModuleSpec(provider, type.getName());
}
private ModuleSpec(
@Nullable Class<? extends NativeModule> type, Provider<? extends NativeModule> provider) {
mType = type;
mProvider = provider;
mClassName = type == null ? null : type.getName();
}
public ModuleSpec(Provider<? extends NativeModule> provider, String name) {
mType = null;
mProvider = provider;
mClassName = name;
}
public @Nullable Class<? extends NativeModule> getType() {
return mType;
}
public String getClassName(){return mClassName;}
public Provider<? extends NativeModule> getProvider() {
return mProvider;
}