refactor JSI module initialization

Reviewed By: fkgozali

Differential Revision: D8111636

fbshipit-source-id: 6e32703b077144962519485002adff8c9f6084ad
This commit is contained in:
David Vacca
2018-06-01 17:47:34 -07:00
committed by Facebook Github Bot
parent e0db8ee645
commit 6c989fe7c6
12 changed files with 108 additions and 81 deletions
@@ -1,37 +1,28 @@
package com.facebook.react.bridge;
import com.facebook.infer.annotation.Assertions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JSIModuleRegistry {
private final List<JSIModuleHolder> mModuleList = new ArrayList<>();
private final Map<Class, JSIModule> mModules = new HashMap<>();
private volatile boolean mIsInitialized = false;
private final Map<Class, JSIModuleHolder> mModules = new HashMap<>();
public JSIModuleRegistry() { }
public <T extends JSIModule> T getModule(Class<T> moduleClass) {
JSIModule jsiModule = mModules.get(moduleClass);
if (jsiModule == null) {
initModules();
JSIModuleHolder jsiModuleHolder = mModules.get(moduleClass);
if (jsiModuleHolder == null) {
throw new IllegalArgumentException("Unable to find JSIModule for class " + moduleClass);
}
return (T) Assertions.assertNotNull(mModules.get(moduleClass));
return (T) Assertions.assertNotNull(jsiModuleHolder.getJSIModule());
}
public void registerModules(List<JSIModuleHolder> jsiModules) {
mModuleList.addAll(jsiModules);
}
public synchronized void initModules() {
if (!mIsInitialized) {
for (JSIModuleHolder holder : mModuleList) {
mModules.put(holder.getJSIModuleClass(), holder.getJSIModule());
}
mIsInitialized = true;
public void registerModules(List<JSIModuleSpec> jsiModules) {
for (JSIModuleSpec spec : jsiModules) {
mModules.put(spec.getJSIModuleClass(), new JSIModuleHolder(spec));
}
}
}