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