diff --git a/ReactCommon/fabric/core/shadownode/ShadowNode.cpp b/ReactCommon/fabric/core/shadownode/ShadowNode.cpp index f15964b0b..8f54601d0 100644 --- a/ReactCommon/fabric/core/shadownode/ShadowNode.cpp +++ b/ReactCommon/fabric/core/shadownode/ShadowNode.cpp @@ -108,6 +108,10 @@ void ShadowNode::clearSourceNode() { sourceNode_.reset(); } +void ShadowNode::shallowSourceNode() { + sourceNode_ = sourceNode_.lock()->getSourceNode(); +} + #pragma mark - Equality bool ShadowNode::operator==(const ShadowNode& rhs) const { diff --git a/ReactCommon/fabric/core/shadownode/ShadowNode.h b/ReactCommon/fabric/core/shadownode/ShadowNode.h index f03acb107..cd0264c22 100644 --- a/ReactCommon/fabric/core/shadownode/ShadowNode.h +++ b/ReactCommon/fabric/core/shadownode/ShadowNode.h @@ -67,6 +67,14 @@ public: void replaceChild(const SharedShadowNode &oldChild, const SharedShadowNode &newChild); void clearSourceNode(); + /* + * Replaces the current source node with its source node. + * This method might be used for illuminating side-effects caused by the last + * cloning operation which are not desirable from the diffing algorithm + * perspective. + */ + void shallowSourceNode(); + #pragma mark - Equality /*