diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java index 28aacb95d..f85b9cf69 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java @@ -52,6 +52,7 @@ public interface CatalystInstance extends MemoryPressureListener { T getJSModule(Class jsInterface); T getJSModule(ExecutorToken executorToken, Class jsInterface); + boolean hasNativeModule(Class nativeModuleInterface); T getNativeModule(Class nativeModuleInterface); Collection getNativeModules(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index dfd79b9df..702b7759d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -290,6 +290,11 @@ public class CatalystInstanceImpl implements CatalystInstance { return Assertions.assertNotNull(mJSModuleRegistry).getJavaScriptModule(executorToken, jsInterface); } + @Override + public boolean hasNativeModule(Class nativeModuleInterface) { + return mJavaRegistry.hasModule(nativeModuleInterface); + } + @Override public T getNativeModule(Class nativeModuleInterface) { return mJavaRegistry.getModule(nativeModuleInterface); diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java index 2179a4b7a..e6e0f80a2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java @@ -144,6 +144,10 @@ public class NativeModuleRegistry { } } + public boolean hasModule(Class moduleInterface) { + return mModuleInstances.containsKey(moduleInterface); + } + public T getModule(Class moduleInterface) { return (T) Assertions.assertNotNull(mModuleInstances.get(moduleInterface)); } 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 05d312360..60f59f52d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java @@ -104,12 +104,21 @@ public class ReactContext extends ContextWrapper { return mCatalystInstance.getJSModule(executorToken, jsInterface); } + public boolean hasNativeModule(Class nativeModuleInterface) { + if (mCatalystInstance == null) { + throw new RuntimeException( + "Trying to call native module before CatalystInstance has been set!"); + } + return mCatalystInstance.hasNativeModule(nativeModuleInterface); + } + /** * @return the instance of the specified module interface associated with this ReactContext. */ public T getNativeModule(Class nativeModuleInterface) { if (mCatalystInstance == null) { - throw new RuntimeException("Trying to invoke JS before CatalystInstance has been set!"); + throw new RuntimeException( + "Trying to call native module before CatalystInstance has been set!"); } return mCatalystInstance.getNativeModule(nativeModuleInterface); }