mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
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:
committed by
Facebook Github Bot
parent
d891ee1dee
commit
c8e000b19a
@@ -22,12 +22,12 @@ import com.facebook.systrace.Systrace;
|
||||
public class NativeModuleRegistry {
|
||||
|
||||
private final ReactApplicationContext mReactApplicationContext;
|
||||
private final Map<Class<? extends NativeModule>, ModuleHolder> mModules;
|
||||
private final Map<String, ModuleHolder> mModules;
|
||||
private final ArrayList<ModuleHolder> mBatchCompleteListenerModules;
|
||||
|
||||
public NativeModuleRegistry(
|
||||
ReactApplicationContext reactApplicationContext,
|
||||
Map<Class<? extends NativeModule>, ModuleHolder> modules,
|
||||
Map<String, ModuleHolder> modules,
|
||||
ArrayList<ModuleHolder> batchCompleteListenerModules) {
|
||||
mReactApplicationContext = reactApplicationContext;
|
||||
mModules = modules;
|
||||
@@ -37,7 +37,7 @@ public class NativeModuleRegistry {
|
||||
/**
|
||||
* Private getters for combining NativeModuleRegistrys
|
||||
*/
|
||||
private Map<Class<? extends NativeModule>, ModuleHolder> getModuleMap() {
|
||||
private Map<String, ModuleHolder> getModuleMap() {
|
||||
return mModules;
|
||||
}
|
||||
|
||||
@@ -52,9 +52,10 @@ public class NativeModuleRegistry {
|
||||
/* package */ Collection<JavaModuleWrapper> getJavaModules(
|
||||
JSInstance jsInstance) {
|
||||
ArrayList<JavaModuleWrapper> javaModules = new ArrayList<>();
|
||||
for (Map.Entry<Class<? extends NativeModule>, ModuleHolder> entry : mModules.entrySet()) {
|
||||
Class<? extends NativeModule> type = entry.getKey();
|
||||
if (!CxxModuleWrapperBase.class.isAssignableFrom(type)) {
|
||||
for (Map.Entry<String, ModuleHolder> entry : mModules.entrySet()) {
|
||||
String type = entry.getKey();
|
||||
if (!entry.getValue().isCxxModule()) {
|
||||
//if (!CxxModuleWrapperBase.class.isAssignableFrom(entry.getValue().getModule().getClass())) {
|
||||
javaModules.add(new JavaModuleWrapper(jsInstance, type, entry.getValue()));
|
||||
}
|
||||
}
|
||||
@@ -63,9 +64,8 @@ public class NativeModuleRegistry {
|
||||
|
||||
/* package */ Collection<ModuleHolder> getCxxModules() {
|
||||
ArrayList<ModuleHolder> cxxModules = new ArrayList<>();
|
||||
for (Map.Entry<Class<? extends NativeModule>, ModuleHolder> entry : mModules.entrySet()) {
|
||||
Class<?> type = entry.getKey();
|
||||
if (CxxModuleWrapperBase.class.isAssignableFrom(type)) {
|
||||
for (Map.Entry<String, ModuleHolder> entry : mModules.entrySet()) {
|
||||
if (entry.getValue().isCxxModule()) {
|
||||
cxxModules.add(entry.getValue());
|
||||
}
|
||||
}
|
||||
@@ -80,11 +80,11 @@ public class NativeModuleRegistry {
|
||||
Assertions.assertCondition(mReactApplicationContext.equals(newRegister.getReactApplicationContext()),
|
||||
"Extending native modules with non-matching application contexts.");
|
||||
|
||||
Map<Class<? extends NativeModule>, ModuleHolder> newModules = newRegister.getModuleMap();
|
||||
Map<String, ModuleHolder> newModules = newRegister.getModuleMap();
|
||||
ArrayList<ModuleHolder> batchCompleteListeners = newRegister.getBatchCompleteListenerModules();
|
||||
|
||||
for (Map.Entry<Class<? extends NativeModule>, ModuleHolder> entry : newModules.entrySet()) {
|
||||
Class<? extends NativeModule> key = entry.getKey();
|
||||
for (Map.Entry<String, ModuleHolder> entry : newModules.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
if (!mModules.containsKey(key)) {
|
||||
ModuleHolder value = entry.getValue();
|
||||
if (batchCompleteListeners.contains(value)) {
|
||||
@@ -137,12 +137,12 @@ public class NativeModuleRegistry {
|
||||
}
|
||||
|
||||
public <T extends NativeModule> boolean hasModule(Class<T> moduleInterface) {
|
||||
return mModules.containsKey(moduleInterface);
|
||||
return mModules.containsKey(moduleInterface.getName());
|
||||
}
|
||||
|
||||
public <T extends NativeModule> T getModule(Class<T> moduleInterface) {
|
||||
return (T) Assertions.assertNotNull(
|
||||
mModules.get(moduleInterface), moduleInterface.getSimpleName()).getModule();
|
||||
mModules.get(moduleInterface.getName()), moduleInterface.getSimpleName()).getModule();
|
||||
}
|
||||
|
||||
public List<NativeModule> getAllModules() {
|
||||
|
||||
Reference in New Issue
Block a user