diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CallbackImpl.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CallbackImpl.java index a7bc85802..7ba988a95 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CallbackImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CallbackImpl.java @@ -17,15 +17,23 @@ public final class CallbackImpl implements Callback { private final CatalystInstance mCatalystInstance; private final ExecutorToken mExecutorToken; private final int mCallbackId; + private boolean mInvoked; public CallbackImpl(CatalystInstance bridge, ExecutorToken executorToken, int callbackId) { mCatalystInstance = bridge; mExecutorToken = executorToken; mCallbackId = callbackId; + mInvoked = false; } @Override public void invoke(Object... args) { + if (mInvoked) { + throw new RuntimeException("Illegal callback invocation from native "+ + "module. This callback type only permits a single invocation from "+ + "native code."); + } mCatalystInstance.invokeCallback(mExecutorToken, mCallbackId, Arguments.fromJavaArgs(args)); + mInvoked = true; } }