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 a8118b184..ff009b5b2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java @@ -166,6 +166,9 @@ public class ReactShadowNodeImpl implements ReactShadowNode @Override public ReactShadowNodeImpl mutableCopy() { ReactShadowNodeImpl copy = copy(); + Assertions.assertCondition( + getClass() == copy.getClass(), + "Copied shadow node must use the same class"); if (mYogaNode != null) { copy.mYogaNode = mYogaNode.clone(); copy.mYogaNode.setData(copy); @@ -182,6 +185,9 @@ public class ReactShadowNodeImpl implements ReactShadowNode @Override public ReactShadowNodeImpl mutableCopyWithNewChildren() { ReactShadowNodeImpl copy = copy(); + Assertions.assertCondition( + getClass() == copy.getClass(), + "Copied shadow node must use the same class"); if (mYogaNode != null) { copy.mYogaNode = mYogaNode.cloneWithNewChildren(); copy.mYogaNode.setData(copy); diff --git a/ReactAndroid/src/test/java/com/facebook/react/fabric/ReactShadowNodeTest.java b/ReactAndroid/src/test/java/com/facebook/react/fabric/ReactShadowNodeTest.java new file mode 100644 index 000000000..1b14c9fc9 --- /dev/null +++ b/ReactAndroid/src/test/java/com/facebook/react/fabric/ReactShadowNodeTest.java @@ -0,0 +1,20 @@ +// Copyright 2004-present Facebook. All Rights Reserved. +package com.facebook.react.fabric; + +import com.facebook.react.uimanager.ReactShadowNodeImpl; +import com.facebook.testing.robolectric.v3.WithTestDefaultsRunner; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** Tests {@link ReactShadowNode} */ +@RunWith(WithTestDefaultsRunner.class) +public class ReactShadowNodeTest { + + @Test(expected = AssertionError.class) + public void testClonedInstance() { + TestReactShadowNode node = new TestReactShadowNode(); + node.mutableCopy(); + } + + private static class TestReactShadowNode extends ReactShadowNodeImpl {} +}