From f57b0caaa4452c64006c159cd28a1a562b332c21 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Fri, 6 Dec 2019 16:03:02 -0800 Subject: [PATCH] Support nullable returns NativeModule methods returning Boxed Primitives Summary: Returning null from a NativeModule method that has a return type of `java.lang.Double` causes the program to crash. This diff instead makes that method call return `null` to JS. TurboModules already has this behaviour. Changelog: [Android][Fixed] - Support nullable returns NativeModule methods returning Boxed Primitives Reviewed By: PeteTheHeat Differential Revision: D18866872 fbshipit-source-id: 6049c4df6908f1d276c5674b7e06eb5e002a7976 --- ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp b/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp index 4c66abac09e..6a1e4365a08 100644 --- a/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp +++ b/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp @@ -223,6 +223,9 @@ MethodCallResult MethodInvoker::invoke(std::weak_ptr& instance, alias_ #define OBJECT_CASE(JNI_CLASS, ACTIONS) { \ auto jobject = env->CallObjectMethodA(module.get(), method_, args); \ throwPendingJniExceptionAsCppException(); \ + if (!jobject) { \ + return folly::dynamic(nullptr); \ + } \ auto result = adopt_local(static_cast(jobject)); \ return folly::dynamic(result->ACTIONS()); \ } @@ -230,6 +233,9 @@ MethodCallResult MethodInvoker::invoke(std::weak_ptr& instance, alias_ #define OBJECT_CASE_CASTING(JNI_CLASS, ACTIONS, RESULT_TYPE) { \ auto jobject = env->CallObjectMethodA(module.get(), method_, args); \ throwPendingJniExceptionAsCppException(); \ + if (!jobject) { \ + return folly::dynamic(nullptr); \ + } \ auto result = adopt_local(static_cast(jobject)); \ return folly::dynamic(static_cast(result->ACTIONS())); \ }