From b978308519f71c6c7fda4b38a842aa219a349275 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Fri, 1 Apr 2022 21:14:22 -0700 Subject: [PATCH] Introduce ReactContext.getNativeModules() Summary: ## Rationale The CatalystInstance exposes a public API that returns a list of all instantiated NativeModules: [CatalystInstance.getNativeModules()](https://www.internalfb.com/code/fbsource/[d9cd2e5dd41fc3e3022bfb777c8b31c92af8c537]/xplat/js/react-native-github/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java?lines=73). This enables a use-case: process all NativeModules that conform to a particular interface, to, for example, remove sensitive data before logging out. ## Changes This diff moves that CatalystInstance.getNativeModules() API into the ReactContext. This allows us to migrate NativeModules leveraging this use-case off of ReactContext.getCatalystInstance(), which makes them bridgeless-mode compatible. Changelog: [Android][Added] Introduce ReactContext.getNativeModules() Reviewed By: sshic Differential Revision: D35286940 fbshipit-source-id: 1b64351aa3f65ee59e6438a7a95974e219ccc69c --- .../main/java/com/facebook/react/bridge/ReactContext.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java index 59cbfb9ec62..332a2849bd1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java @@ -24,6 +24,7 @@ import com.facebook.react.bridge.queue.ReactQueueConfiguration; import com.facebook.react.common.LifecycleState; import com.facebook.react.common.ReactConstants; import java.lang.ref.WeakReference; +import java.util.Collection; import java.util.concurrent.CopyOnWriteArraySet; /** @@ -167,6 +168,13 @@ public class ReactContext extends ContextWrapper { return mCatalystInstance.hasNativeModule(nativeModuleInterface); } + public Collection getNativeModules() { + if (mCatalystInstance == null) { + raiseCatalystInstanceMissingException(); + } + return mCatalystInstance.getNativeModules(); + } + /** @return the instance of the specified module interface associated with this ReactContext. */ @Nullable public T getNativeModule(Class nativeModuleInterface) {