diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java index de18fad93e..307caf3c01 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java @@ -262,7 +262,7 @@ public class ReactAppTestActivity extends FragmentActivity @Override public FabricUIManager getJSIModule() { List viewManagers = - getReactInstanceManager().getOrCreateViewManagers(reactApplicationContext); + getReactInstanceManager().getOrCreateViewManagers(reactApplicationContext); FabricUIManager fabricUIManager = new FabricUIManager( reactApplicationContext, new ViewManagerRegistry(viewManagers)); diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 24a57c759b..9687065e25 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -85,7 +85,6 @@ import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper; import com.facebook.soloader.SoLoader; import com.facebook.systrace.Systrace; import com.facebook.systrace.SystraceMessage; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index a0f4438330..0b6454086a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -281,6 +281,6 @@ public class ReactInstanceManagerBuilder { mDevBundleDownloadListener, mMinNumShakes, mMinTimeLeftInFrameForNonBatchedOperationMs, - mJSIModulesProvider); + mJSIModulesProvider); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/JSIModuleRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/JSIModuleRegistry.java index 913aae68bc..7d4e1141bc 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/JSIModuleRegistry.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/JSIModuleRegistry.java @@ -1,23 +1,37 @@ 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; -import com.facebook.infer.annotation.Assertions; public class JSIModuleRegistry { + private final List mModuleList = new ArrayList<>(); private final Map mModules = new HashMap<>(); + private volatile boolean mIsInitialized = false; public JSIModuleRegistry() { } public T getModule(Class moduleClass) { + JSIModule jsiModule = mModules.get(moduleClass); + if (jsiModule == null) { + initModules(); + } return (T) Assertions.assertNotNull(mModules.get(moduleClass)); } public void registerModules(List jsiModules) { - for (JSIModuleHolder holder : jsiModules) { - mModules.put(holder.getJSIModuleClass(), holder.getJSIModule()); + mModuleList.addAll(jsiModules); + } + + public synchronized void initModules() { + if (!mIsInitialized) { + for (JSIModuleHolder holder : mModuleList) { + mModules.put(holder.getJSIModuleClass(), holder.getJSIModule()); + } + mIsInitialized = true; } } }