From fec0a51e85811d20c84480946d953d6410bb5393 Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Tue, 10 Apr 2018 12:45:46 -0700 Subject: [PATCH] Fabric: Simplified `ViewShadowNode::cloneAndReplaceChild` Summary: Using methods of the base class instead of custom implementation. Reviewed By: fkgozali Differential Revision: D7467795 fbshipit-source-id: 4d168b72880f6900bf8b747e1d655c10140e0c79 --- ReactCommon/fabric/view/ViewShadowNode.cpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/ReactCommon/fabric/view/ViewShadowNode.cpp b/ReactCommon/fabric/view/ViewShadowNode.cpp index 8bb5f33fdb8..2418279903e 100644 --- a/ReactCommon/fabric/view/ViewShadowNode.cpp +++ b/ReactCommon/fabric/view/ViewShadowNode.cpp @@ -92,26 +92,14 @@ SharedLayoutableShadowNodeList ViewShadowNode::getChildren() const { SharedLayoutableShadowNode ViewShadowNode::cloneAndReplaceChild(const SharedLayoutableShadowNode &child) { ensureUnsealed(); - // We cannot mutate `children_` in place here because it is a *shared* - // data structure which means other `ShadowNodes` might refer to its old value. - // So, we have to clone this and only then mutate. - auto nonConstChildrenCopy = SharedShadowNodeList(*children_); - auto viewShadowNodeChild = std::dynamic_pointer_cast(child); assert(viewShadowNodeChild); - auto viewShadowNodeChildClone = std::make_shared(viewShadowNodeChild); - - std::replace( - nonConstChildrenCopy.begin(), - nonConstChildrenCopy.end(), - std::static_pointer_cast(viewShadowNodeChild), - std::static_pointer_cast(viewShadowNodeChildClone) - ); - - children_ = std::make_shared(nonConstChildrenCopy); - + ShadowNode::replaceChild(viewShadowNodeChild, viewShadowNodeChildClone); return std::static_pointer_cast(viewShadowNodeChildClone); + + + } #pragma mark - DebugStringConvertible