diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index a48184db..74f4a98c 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -32,7 +32,7 @@ public class YogaNative { // YGNode related static native long jni_YGNodeNewJNI(); static native long jni_YGNodeNewWithConfigJNI(long configPointer); - static native void jni_YGNodeFreeJNI(long nativePointer); + static native void jni_YGNodeDeallocateJNI(long nativePointer); static native void jni_YGNodeResetJNI(long nativePointer); static native void jni_YGNodeInsertChildJNI(long nativePointer, long childPointer, int index); static native void jni_YGNodeSwapChildJNI(long nativePointer, long childPointer, int index); diff --git a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java index 424006e9..ab617c7f 100644 --- a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java @@ -29,7 +29,7 @@ public class YogaNodeJNIFinalizer extends YogaNodeJNIBase { if (mNativePointer != 0) { long nativePointer = mNativePointer; mNativePointer = 0; - YogaNative.jni_YGNodeFreeJNI(nativePointer); + YogaNative.jni_YGNodeDeallocateJNI(nativePointer); } } } diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index e32f14b1..c4dedb85 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -199,7 +199,10 @@ static void jni_YGConfigSetLoggerJNI( } } -static void jni_YGNodeFreeJNI(JNIEnv* env, jobject obj, jlong nativePointer) { +static void jni_YGNodeDeallocateJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer) { if (nativePointer == 0) { return; } @@ -769,7 +772,7 @@ static JNINativeMethod methods[] = { (void*) jni_YGConfigSetLoggerJNI}, {"jni_YGNodeNewJNI", "()J", (void*) jni_YGNodeNewJNI}, {"jni_YGNodeNewWithConfigJNI", "(J)J", (void*) jni_YGNodeNewWithConfigJNI}, - {"jni_YGNodeFreeJNI", "(J)V", (void*) jni_YGNodeFreeJNI}, + {"jni_YGNodeDeallocateJNI", "(J)V", (void*) jni_YGNodeDeallocateJNI}, {"jni_YGNodeResetJNI", "(J)V", (void*) jni_YGNodeResetJNI}, {"jni_YGNodeInsertChildJNI", "(JJI)V", (void*) jni_YGNodeInsertChildJNI}, {"jni_YGNodeSwapChildJNI", "(JJI)V", (void*) jni_YGNodeSwapChildJNI}, diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index 6f60e4e1..5c5f11c7 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -27,6 +27,10 @@ void YGNodeCalculateLayoutWithContext( YGDirection ownerDirection, void* layoutContext); +// Deallocates a Yoga Node. Unlike YGNodeFree, does not remove the node from +// its parent or children. +void YGNodeDeallocate(YGNodeRef node); + YG_EXTERN_C_END namespace facebook { diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 8e2fdb4d..bf30d41c 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -230,6 +230,10 @@ YOGA_EXPORT void YGNodeFree(const YGNodeRef node) { } node->clearChildren(); + YGNodeDeallocate(node); +} + +YOGA_EXPORT void YGNodeDeallocate(const YGNodeRef node) { Event::publish(node, {node->getConfig()}); delete node; }