Disable YogaNode cloning in Android

Reviewed By: achen1

Differential Revision: D7313239

fbshipit-source-id: ecf905a22e04a2115ab968fd29f7582301f0f3c9
This commit is contained in:
David Vacca 2018-03-19 18:21:34 -07:00 коммит произвёл Facebook Github Bot
Родитель e2462e9016
Коммит 0930fef46d
1 изменённых файлов: 36 добавлений и 29 удалений

Просмотреть файл

@ -111,35 +111,32 @@ public class ReactShadowNodeImpl implements ReactShadowNode<ReactShadowNodeImpl>
} }
} }
public ReactShadowNodeImpl(ReactShadowNodeImpl original) { protected ReactShadowNodeImpl(ReactShadowNodeImpl original) {
try { mReactTag = original.mReactTag;
mReactTag = original.mReactTag; mRootTag = original.mRootTag;
mRootTag = original.mRootTag; mViewClassName = original.mViewClassName;
mViewClassName = original.mViewClassName; mRootNode = original.mRootNode;
mRootNode = original.mRootNode; mThemedContext = original.mThemedContext;
mThemedContext = original.mThemedContext; mShouldNotifyOnLayout = original.mShouldNotifyOnLayout;
mShouldNotifyOnLayout = original.mShouldNotifyOnLayout; mNodeUpdated = original.mNodeUpdated;
mNodeUpdated = original.mNodeUpdated; mIsLayoutOnly = original.mIsLayoutOnly;
mChildren = original.mChildren == null ? null : new ArrayList<>(original.mChildren); mTotalNativeChildren = original.mTotalNativeChildren;
mIsLayoutOnly = original.mIsLayoutOnly; mNativeParent = original.mNativeParent;
mTotalNativeChildren = original.mTotalNativeChildren; mNativeParent = original.mNativeParent;
mNativeParent = original.mNativeParent; mScreenX = original.mScreenX;
mNativeChildren = original.mNativeChildren == null ? null : new ArrayList<>(original.mNativeChildren); mScreenY = original.mScreenY;
mNativeParent = original.mNativeParent; mScreenWidth = original.mScreenWidth;
mScreenX = original.mScreenX; mScreenHeight = original.mScreenHeight;
mScreenY = original.mScreenY; arraycopy(original.mPadding, 0, mPadding, 0, original.mPadding.length);
mScreenWidth = original.mScreenWidth; arraycopy(original.mPaddingIsPercent, 0, mPaddingIsPercent, 0, original.mPaddingIsPercent.length);
mScreenHeight = original.mScreenHeight; mNewProps = null;
arraycopy(original.mPadding, 0, mPadding, 0, original.mPadding.length); mParent = null;
arraycopy(original.mPaddingIsPercent, 0, mPaddingIsPercent, 0, original.mPaddingIsPercent.length); mYogaNode = original.mYogaNode;
mYogaNode = original.mYogaNode.clone(); // TODO: T26729293 clone YogaNode instead of reusing the same instance
mYogaNode.setData(this); //mYogaNode = original.mYogaNode.clone();
mParent = null; mNativeChildren = original.mNativeChildren == null ? null : new ArrayList<>(original.mNativeChildren);
mNewProps = null; mChildren = original.mChildren == null ? null : new ArrayList<>(original.mChildren);
} catch (CloneNotSupportedException e) { mYogaNode.setData(this);
// it should never happen
throw new IllegalArgumentException();
}
} }
@Override @Override
@ -279,6 +276,16 @@ public class ReactShadowNodeImpl implements ReactShadowNode<ReactShadowNodeImpl>
+ toString() + toString()
+ "')"); + "')");
} }
// TODO: T26729293 This is a temporary code that will be replaced as part of T26729293.
YogaNode parent = childYogaNode.getParent();
if (parent != null) {
for (int k = 0; k < parent.getChildCount(); k++) {
if (parent.getChildAt(k) == childYogaNode) {
parent.removeChildAt(k);
break;
}
}
}
mYogaNode.addChildAt(childYogaNode, i); mYogaNode.addChildAt(childYogaNode, i);
} }
markUpdated(); markUpdated();