From 16bed9e6e50508c99e9666cb2fb5a06b0b534bf6 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sat, 7 Apr 2018 00:50:38 -0700 Subject: [PATCH] Support cloning of virtual ReactShadowNodes Reviewed By: achen1 Differential Revision: D7542648 fbshipit-source-id: 58494db9f8525d4deabc6345f36941fa93a1d887 --- .../react/uimanager/ReactShadowNodeImpl.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java index 7d08bd08e..018fa5dda 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java @@ -164,22 +164,32 @@ public class ReactShadowNodeImpl implements ReactShadowNode @Override public ReactShadowNodeImpl mutableCopy() { ReactShadowNodeImpl copy = copy(); - copy.mYogaNode = mYogaNode.clone(); + if (mYogaNode != null) { + copy.mYogaNode = mYogaNode.clone(); + copy.mYogaNode.setData(copy); + } else { + // Virtual ReactShadowNode do not have a YogaNode associated + copy.mYogaNode = null; + } copy.mNativeChildren = mNativeChildren == null ? null : new ArrayList<>(mNativeChildren); copy.mTotalNativeChildren = mTotalNativeChildren; copy.mChildren = mChildren == null ? null : new ArrayList<>(mChildren); - copy.mYogaNode.setData(copy); return copy; } @Override public ReactShadowNodeImpl mutableCopyWithNewChildren() { ReactShadowNodeImpl copy = copy(); - copy.mYogaNode = mYogaNode.cloneWithNewChildren(); + if (mYogaNode != null) { + copy.mYogaNode = mYogaNode.cloneWithNewChildren(); + copy.mYogaNode.setData(copy); + } else { + // Virtual ReactShadowNode do not have a YogaNode associated + copy.mYogaNode = null; + } copy.mNativeChildren = null; copy.mChildren = null; copy.mTotalNativeChildren = 0; - copy.mYogaNode.setData(copy); return copy; }