From 073f49d0d0299a2aca0b890b202262e87629f4f0 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 2 Dec 2019 05:21:56 -0800 Subject: [PATCH] Use YogaJniException in jni call exception handling Summary: ##Changelog: [Internal][Yoga] Use YogaJniException in jni call exception handling Reviewed By: astreet Differential Revision: D18745615 fbshipit-source-id: 5fcf4c31f04fade94ef98a5349782ed3d43805b0 --- java/jni/YGJNIVanilla.cpp | 8 ++++++-- java/jni/corefunctions.cpp | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 3ac88ac1..b9b590ac 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -15,6 +15,7 @@ #include #include #include +#include "YogaJniException.h" using namespace facebook::yoga::vanillajni; using facebook::yoga::detail::Log; @@ -372,8 +373,11 @@ static void jni_YGNodeCalculateLayoutJNI( YGNodeStyleGetDirection(_jlong2YGNodeRef(nativePointer)), layoutContext); YGTransferLayoutOutputsRecursive(env, obj, root, layoutContext); - } catch (jthrowable throwable) { - env->Throw(throwable); + } catch (const YogaJniException& jniException) { + ScopedLocalRef throwable = jniException.getThrowable(); + if (throwable.get()) { + env->Throw(throwable.get()); + } } } diff --git a/java/jni/corefunctions.cpp b/java/jni/corefunctions.cpp index 04435724..4b03919c 100644 --- a/java/jni/corefunctions.cpp +++ b/java/jni/corefunctions.cpp @@ -7,6 +7,7 @@ #include "corefunctions.h" #include "macros.h" +#include "YogaJniException.h" namespace facebook { namespace yoga { @@ -72,7 +73,7 @@ void assertNoPendingJniException(JNIEnv* env) { logErrorMessageAndDie("Unable to get pending JNI exception."); } env->ExceptionClear(); - throw throwable; + throw YogaJniException(throwable); } } // namespace vanillajni