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 8fc6936a7af..f2ea116d10c 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 f7e4a582749..d339a14ba34 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 3e6af0f47a6..f803b1bc35a 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 be4fb1c42f6..0285ab16112 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 e57ae4deddd..f8708d24f76 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 cf4137720dc..113aa3212c4 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); }