diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 542d36bf..109172ee 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/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/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 03354556..7efb8ce1 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -197,15 +197,16 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { 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 abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { 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); } }