Add InstanceHandle parameter into FabricJSC/JSI

Reviewed By: achen1

Differential Revision: D7644487

fbshipit-source-id: b49381a58a791043bf61b8ac5f065817caff7c95
This commit is contained in:
David Vacca 2018-04-24 12:37:08 -07:00 committed by Facebook Github Bot
parent 16a5324ca6
commit f44e78df55
3 changed files with 17 additions and 14 deletions

View File

@ -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 +

View File

@ -83,17 +83,16 @@ JSValueRef createNode(JSContextRef ctx, JSObjectRef function, JSObjectRef thisOb
static auto createNode =
jni::findClassStatic("com/facebook/react/fabric/FabricUIManager")
->getMethod<alias_ref<JShadowNode>(jint, jstring, jint, ReadableNativeMap::javaobject)>("createNode");
->getMethod<alias_ref<JShadowNode>(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<ReadableNativeMap::jhybridobject>(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()));
}

View File

@ -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<ReactShadowNode> 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<ReactShadowNode> childSet = mFabricUIManager.createChildSet(rootTag);