From 1d555bff22df9532bba7a5bbaf1af98429e1d771 Mon Sep 17 00:00:00 2001 From: Andy Street Date: Mon, 14 Nov 2016 04:34:57 -0800 Subject: [PATCH] BREAKING [react_native/css_layout] Update RN shadow nodes to hold CSSNode instead of extending CSSNode Summary: @public This diff makes it so ReactShadowNode holds a CSSNode instead of extending one. This will enable us to pool and re-use CSSNodes and will allow us to keep from breaking the CSSNode api assumption that nodes that have measure functions don't have children (right now, text nodes have measure functions, but they also have raw text children). BREAKING This diff makes ReactShadowNode no longer extend CSSNodeDEPRECATED. If you have code that depended on that, e.g. via instanceof checks, that will no longer work as expected. Subclasses that override getChildAt/addChildAt/etc will need to update your method signatures. There should be no runtime behavior changes. Reviewed By: emilsjolander Differential Revision: D4153818 --- .../facebook/react/flat/FlatReactModalShadowNode.java | 4 ++-- .../java/com/facebook/react/flat/FlatRootShadowNode.java | 9 --------- .../java/com/facebook/react/flat/FlatShadowNode.java | 2 +- .../com/facebook/react/flat/FlatUIImplementation.java | 2 +- .../java/com/facebook/react/flat/NativeViewWrapper.java | 3 +-- .../java/com/facebook/react/flat/RCTVirtualText.java | 3 ++- 6 files changed, 7 insertions(+), 16 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatReactModalShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatReactModalShadowNode.java index 8fc6936a7..f2ea116d1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatReactModalShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatReactModalShadowNode.java @@ -16,7 +16,7 @@ import android.view.Display; import android.view.Surface; import android.view.WindowManager; -import com.facebook.csslayout.CSSNodeDEPRECATED; +import com.facebook.react.uimanager.ReactShadowNode; /** * FlatReactModalShadowNode @@ -45,7 +45,7 @@ class FlatReactModalShadowNode extends FlatShadowNode implements AndroidView { */ @Override @TargetApi(16) - public void addChildAt(CSSNodeDEPRECATED child, int i) { + public void addChildAt(ReactShadowNode child, int i) { super.addChildAt(child, i); Context context = getThemedContext(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatRootShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatRootShadowNode.java index f7e4a5827..d339a14ba 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatRootShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatRootShadowNode.java @@ -18,13 +18,4 @@ package com.facebook.react.flat; forceMountToView(); signalBackingViewIsCreated(); } - - /** - * Returns true when this CSSNodeDEPRECATED tree needs to be re-laid out. If true, FlatUIImplementation - * will request LayoutEngine to perform a layout pass to update node boundaries. This is used - * to avoid unnecessary node updates. - */ - /* package */ boolean needsLayout() { - return isDirty(); - } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatShadowNode.java index 3e6af0f47..f803b1bc3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatShadowNode.java @@ -201,7 +201,7 @@ import com.facebook.react.uimanager.ReactClippingViewGroupHelper; } @Override - public void addChildAt(CSSNodeDEPRECATED child, int i) { + public void addChildAt(ReactShadowNode child, int i) { super.addChildAt(child, i); if (mForceMountChildrenToView && child instanceof FlatShadowNode) { ((FlatShadowNode) child).forceMountToView(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java index be4fb1c42..0285ab161 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java @@ -115,7 +115,7 @@ public class FlatUIImplementation extends UIImplementation { ReactShadowNode node = new FlatRootShadowNode(); I18nUtil sharedI18nUtilInstance = I18nUtil.getInstance(); if (sharedI18nUtilInstance.isRTL(mReactContext)) { - node.setDirection(CSSDirection.RTL); + node.setLayoutDirection(CSSDirection.RTL); } return node; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/NativeViewWrapper.java b/ReactAndroid/src/main/java/com/facebook/react/flat/NativeViewWrapper.java index e57ae4ded..f8708d24f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/NativeViewWrapper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/NativeViewWrapper.java @@ -11,7 +11,6 @@ package com.facebook.react.flat; import javax.annotation.Nullable; -import com.facebook.csslayout.CSSNodeDEPRECATED; import com.facebook.csslayout.CSSNodeAPI; import com.facebook.react.uimanager.ReactStylesDiffMap; import com.facebook.react.uimanager.ReactShadowNode; @@ -93,7 +92,7 @@ import com.facebook.react.uimanager.ViewManager; } @Override - public void addChildAt(CSSNodeDEPRECATED child, int i) { + public void addChildAt(ReactShadowNode child, int i) { super.addChildAt(child, i); if (mForceMountGrandChildrenToView && child instanceof FlatShadowNode) { ((FlatShadowNode) child).forceMountChildrenToView(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTVirtualText.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTVirtualText.java index cf4137720..113aa3212 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTVirtualText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTVirtualText.java @@ -19,6 +19,7 @@ import android.text.TextUtils; import com.facebook.csslayout.CSSNodeDEPRECATED; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.uimanager.PixelUtil; +import com.facebook.react.uimanager.ReactShadowNode; import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; @@ -40,7 +41,7 @@ import com.facebook.react.uimanager.annotations.ReactProp; private ShadowStyleSpan mShadowStyleSpan = ShadowStyleSpan.INSTANCE; @Override - public void addChildAt(CSSNodeDEPRECATED child, int i) { + public void addChildAt(ReactShadowNode child, int i) { super.addChildAt(child, i); notifyChanged(true); }