diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 191d463ab..cd6045f00 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -67,7 +67,7 @@ public class FabricUIManager implements UIManager { /** Creates a new {@link ReactShadowNode} */ @Nullable public ReactShadowNode createNode( - int reactTag, String viewName, int rootTag, ReadableNativeMap props) { + int reactTag, String viewName, int rootTag, ReadableNativeMap props, int instanceHandle) { if (DEBUG) { Log.d(TAG, "createNode \n\ttag: " + reactTag + "\n\tviewName: " + viewName + diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsc/jni/FabricJSCBinding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsc/jni/FabricJSCBinding.cpp index 6ce8b9976..83023f488 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsc/jni/FabricJSCBinding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsc/jni/FabricJSCBinding.cpp @@ -83,17 +83,16 @@ JSValueRef createNode(JSContextRef ctx, JSObjectRef function, JSObjectRef thisOb static auto createNode = jni::findClassStatic("com/facebook/react/fabric/FabricUIManager") - ->getMethod(jint, jstring, jint, ReadableNativeMap::javaobject)>("createNode"); + ->getMethod(jint, jstring, jint, ReadableNativeMap::javaobject, jint)>("createNode"); int reactTag = (int)JSC_JSValueToNumber(ctx, arguments[0], NULL); auto viewName = JSValueToJString(ctx, arguments[1]); int rootTag = (int)JSC_JSValueToNumber(ctx, arguments[2], NULL); auto props = JSC_JSValueIsNull(ctx, arguments[3]) ? local_ref(nullptr) : JSValueToReadableMapViaJSON(ctx, arguments[3]);; + int instanceHandle = (int)JSC_JSValueToNumber(ctx, arguments[4], NULL); - // TODO: Retain object in arguments[4] using a weak ref. - - auto node = createNode(manager, reactTag, viewName.get(), rootTag, props.get()); + auto node = createNode(manager, reactTag, viewName.get(), rootTag, props.get(), instanceHandle); return JSC_JSObjectMake(ctx, classRef, makePlainGlobalRef(node.get())); } diff --git a/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.java b/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.java index 441003004..32a0bbb40 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.java @@ -47,6 +47,7 @@ public class FabricUIManagerTest { private FabricUIManager mFabricUIManager; private ThemedReactContext mThemedReactContext; private int mNextReactTag; + private int mNextInstanceHandle; @Before public void setUp() throws Exception { @@ -70,8 +71,10 @@ public class FabricUIManagerTest { new ReactRootView(RuntimeEnvironment.application.getApplicationContext()); int rootTag = mFabricUIManager.addRootView(rootView); int reactTag = mNextReactTag++; + int instanceHandle = mNextInstanceHandle++; String viewClass = ReactViewManager.REACT_CLASS; - ReactShadowNode node = mFabricUIManager.createNode(reactTag, viewClass, rootTag, null); + ReactShadowNode node = + mFabricUIManager.createNode(reactTag, viewClass, rootTag, null, instanceHandle); assertThat(reactTag).isEqualTo(node.getReactTag()); assertThat(viewClass).isEqualTo(node.getViewClass()); @@ -89,8 +92,10 @@ public class FabricUIManagerTest { new ReactRootView(RuntimeEnvironment.application.getApplicationContext()); int rootTag = mFabricUIManager.addRootView(rootView); int reactTag = mNextReactTag++; + int instanceHandle = mNextInstanceHandle++; String viewClass = ReactViewManager.REACT_CLASS; - ReactShadowNode node = mFabricUIManager.createNode(reactTag, viewClass, rootTag, null); + ReactShadowNode node = + mFabricUIManager.createNode(reactTag, viewClass, rootTag, null, instanceHandle); List childSet = mFabricUIManager.createChildSet(rootTag); mFabricUIManager.appendChildToSet(childSet, node); @@ -220,9 +225,8 @@ public class FabricUIManagerTest { ReactRootView rootView = new ReactRootView(RuntimeEnvironment.application.getApplicationContext()); int rootTag = mFabricUIManager.addRootView(rootView); - ReactShadowNode text = - mFabricUIManager.createNode(0, ReactTextViewManager.REACT_CLASS, rootTag, null); + mFabricUIManager.createNode(0, ReactTextViewManager.REACT_CLASS, rootTag, null, mNextInstanceHandle++); assertThat(text.isMeasureDefined()).isTrue(); ReactShadowNode textCopy = text.mutableCopy(); @@ -248,13 +252,13 @@ public class FabricUIManagerTest { int rootTag = mFabricUIManager.addRootView(rootView); String viewClass = ReactViewManager.REACT_CLASS; - ReactShadowNode aa = mFabricUIManager.createNode(2, viewClass, rootTag, null); - ReactShadowNode a = mFabricUIManager.createNode(3, viewClass, rootTag, null); + ReactShadowNode aa = mFabricUIManager.createNode(2, viewClass, rootTag, null, mNextInstanceHandle++); + ReactShadowNode a = mFabricUIManager.createNode(3, viewClass, rootTag, null, mNextInstanceHandle++); mFabricUIManager.appendChild(a, aa); - ReactShadowNode bb = mFabricUIManager.createNode(4, viewClass, rootTag, null); - ReactShadowNode b = mFabricUIManager.createNode(5, viewClass, rootTag, null); + ReactShadowNode bb = mFabricUIManager.createNode(4, viewClass, rootTag, null, mNextInstanceHandle++); + ReactShadowNode b = mFabricUIManager.createNode(5, viewClass, rootTag, null, mNextInstanceHandle++); mFabricUIManager.appendChild(b, bb); - ReactShadowNode container = mFabricUIManager.createNode(6, viewClass, rootTag, null); + ReactShadowNode container = mFabricUIManager.createNode(6, viewClass, rootTag, null, mNextInstanceHandle++); mFabricUIManager.appendChild(container, a); mFabricUIManager.appendChild(container, b); List childSet = mFabricUIManager.createChildSet(rootTag);