From ce18521c9ead89666be253679a98a6ea39dd571b Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Thu, 16 Jan 2020 13:35:59 -0800 Subject: [PATCH] Ensure TurboModuleManager.getModule also queries CxxModuleWrappers Summary: We should also call `TurboModuleManager.getLegacyCxxModule('foo')` when we call `TurboModuleManager.getModule('foo')` is called. This fixes a Marketplace crash. See: D19432594 Changelog: [Android][Fixed] - Ensure TMM.getModule also queries CxxModuleWrappers Reviewed By: ejanzer Differential Revision: D19434549 fbshipit-source-id: cff741cf1587d2a0dbcdc5eb95016c8aa283b727 --- .../turbomodule/core/TurboModuleManager.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java index 467a7e394d6..fab7cd0f11b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java @@ -10,6 +10,7 @@ package com.facebook.react.turbomodule.core; import androidx.annotation.Nullable; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.react.bridge.CxxModuleWrapper; import com.facebook.react.bridge.JSIModule; import com.facebook.react.bridge.JavaScriptContextHolder; import com.facebook.react.bridge.NativeModule; @@ -55,9 +56,8 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { return mTurbomoduleManagerDelegate.getEagerInitModuleNames(); } - @DoNotStrip @Nullable - protected TurboModule getJavaModule(String name) { + private TurboModule getJavaModule(String name) { if (!mTurboModules.containsKey(name)) { final TurboModule turboModule = mTurbomoduleManagerDelegate.getModule(name); @@ -75,9 +75,33 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { return mTurboModules.get(name); } + @DoNotStrip + @Nullable + private TurboModule getLegacyCxxModule(String name) { + if (!mTurboModules.containsKey(name)) { + final CxxModuleWrapper turboModule = mTurbomoduleManagerDelegate.getLegacyCxxModule(name); + + if (turboModule instanceof TurboModule) { + /** + * TurboModuleManager is initialized after ReactApplicationContext has been setup. + * Therefore, it's safe to call initialize on the TurboModule. + */ + ((NativeModule) turboModule).initialize(); + + mTurboModules.put(name, (TurboModule) turboModule); + } + } + + return mTurboModules.get(name); + } + @Nullable public TurboModule getModule(String name) { - return getJavaModule(name); + TurboModule javaModule = getJavaModule(name); + if (javaModule != null) { + return javaModule; + } + return getLegacyCxxModule(name); } public Collection getModules() {