From 24bfa463a7f1b4eac666d038c9d0f919d0cc404f Mon Sep 17 00:00:00 2001 From: Aditya Sharat Date: Tue, 30 Mar 2021 05:41:22 -0700 Subject: [PATCH] Refactor YogaNode.Inputs freeze API Summary: `InternalNode` will eventually not have a pointer to its parent. This diff removes one of the usages of the `InternalNode#getParent()` API. `InternalNode` will also not host the `YogaNode` eventually; so this diff also removes one of the usages of the `InternalNode#getYogaNode()` api. Now the `Inputs#freeze` api will pass the parent's `YogaNode` and the `YogaNode` of the node (this) being measured. Changelog: [Internal] Passes The YogaNode and parent YogaNode in the Inputs.freeze API Reviewed By: SidharthGuglani Differential Revision: D27240229 fbshipit-source-id: efc4ec3249a963c3181111f9b989d8ed9e17feb4 --- .../src/main/java/com/facebook/yoga/YogaNode.java | 2 +- .../main/java/com/facebook/yoga/YogaNodeJNIBase.java | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java index 542d36bf765889..109172eefc3567 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java @@ -15,7 +15,7 @@ public abstract class YogaNode implements YogaProps { public interface Inputs { /** Requests the data object to disable mutations of its inputs. */ - void freeze(); + void freeze(final YogaNode node, final @Nullable YogaNode parent); } public abstract void reset(); diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java index 0335455656645d..7efb8ce1dac2df 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -197,15 +197,16 @@ public void calculateLayout(float width, float height) { long[] nativePointers = null; YogaNodeJNIBase[] nodes = null; - freeze(); + freeze(null); ArrayList n = new ArrayList<>(); n.add(this); for (int i = 0; i < n.size(); ++i) { - List children = n.get(i).mChildren; + final YogaNodeJNIBase parent = n.get(i); + List children = parent.mChildren; if (children != null) { for (YogaNodeJNIBase child : children) { - child.freeze(); + child.freeze(parent); n.add(child); } } @@ -220,10 +221,10 @@ public void calculateLayout(float width, float height) { YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes); } - private void freeze() { + private void freeze(YogaNode parent) { Object data = getData(); if (data instanceof Inputs) { - ((Inputs) data).freeze(); + ((Inputs) data).freeze(this, parent); } }