From 537ed61d94e0273941eeb9543c5f7f4d7cb68e55 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 27 Feb 2019 04:38:50 -0800 Subject: [PATCH] Breaking remove `YogaNode#clone` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: @public The cloning features of YogaNode don’t seem to be used. Let’s remove them. Reviewed By: SidharthGuglani Differential Revision: D14165624 fbshipit-source-id: 5b710964a4abf1b35f3bcc25b143ffc719a03cec --- .../java/com/facebook/yoga/YogaConfig.java | 12 --- .../java/com/facebook/yoga/YogaNodeJNI.java | 49 +---------- .../jni/first-party/yogajni/jni/YGJNI.cpp | 83 +------------------ 3 files changed, 3 insertions(+), 141 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java index 0c3d1fd271fbf2..f9682b0b1fd97b 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java @@ -98,16 +98,4 @@ public void setLogger(YogaLogger logger) { public YogaLogger getLogger() { return mLogger; } - - private native void jni_YGConfigSetHasCloneNodeFunc(long nativePointer, boolean hasClonedFunc); - - public void setOnCloneNode(YogaNodeCloneFunction cloneYogaNodeFunction) { - mYogaNodeCloneFunction = cloneYogaNodeFunction; - jni_YGConfigSetHasCloneNodeFunc(mNativePointer, cloneYogaNodeFunction != null); - } - - @DoNotStrip - private final YogaNodeJNI cloneNode(YogaNodeJNI oldNode, YogaNodeJNI parent, int childIndex) { - return (YogaNodeJNI) mYogaNodeCloneFunction.cloneNode(oldNode, parent, childIndex); - } } diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java index f439fba6c7d877..882976baeb1019 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java @@ -13,7 +13,7 @@ import javax.annotation.Nullable; @DoNotStrip -public class YogaNodeJNI extends YogaNode implements Cloneable { +public class YogaNodeJNI extends YogaNode { static { SoLoader.loadLibrary("yoga"); @@ -189,53 +189,6 @@ public boolean isReferenceBaseline() { return jni_YGNodeIsReferenceBaseline(mNativePointer); } - private static native void jni_YGNodeSetOwner(long nativePointer, long newOwnerNativePointer); - - private native long jni_YGNodeClone(long nativePointer, Object newNode, boolean avoidGlobalJNIRefs); - - @Override - public YogaNodeJNI clone() { - try { - YogaNodeJNI clonedYogaNode = (YogaNodeJNI) super.clone(); - long clonedNativePointer = jni_YGNodeClone(mNativePointer, clonedYogaNode, mAvoidGlobalJNIRefs); - - if (mChildren != null) { - for (YogaNodeJNI child : mChildren) { - jni_YGNodeSetOwner(child.mNativePointer, 0); - child.mOwner = null; - } - } - - clonedYogaNode.mNativePointer = clonedNativePointer; - clonedYogaNode.mOwner = null; - clonedYogaNode.mChildren = - mChildren != null ? (List) ((ArrayList) mChildren).clone() : null; - if (clonedYogaNode.mChildren != null) { - for (YogaNodeJNI child : clonedYogaNode.mChildren) { - child.mOwner = null; - } - } - return clonedYogaNode; - } catch (CloneNotSupportedException ex) { - // This class implements Cloneable, this should not happen - throw new RuntimeException(ex); - } - } - - public YogaNodeJNI cloneWithNewChildren() { - try { - YogaNodeJNI clonedYogaNode = (YogaNodeJNI) super.clone(); - long clonedNativePointer = jni_YGNodeClone(mNativePointer, clonedYogaNode, mAvoidGlobalJNIRefs); - clonedYogaNode.mOwner = null; - clonedYogaNode.mNativePointer = clonedNativePointer; - clonedYogaNode.clearChildren(); - return clonedYogaNode; - } catch (CloneNotSupportedException ex) { - // This class implements Cloneable, this should not happen - throw new RuntimeException(ex); - } - } - private static native void jni_YGNodeClearChildren(long nativePointer); private void clearChildren() { diff --git a/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNI.cpp b/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNI.cpp index 8fae6d4cf6d4f2..bfbf9950ac3eec 100644 --- a/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNI.cpp +++ b/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNI.cpp @@ -226,40 +226,6 @@ static inline YGConfigRef _jlong2YGConfigRef(jlong addr) { return reinterpret_cast(static_cast(addr)); } -static YGNodeRef YGJNIOnNodeClonedFunc( - YGNodeRef oldNode, - YGNodeRef owner, - int childIndex, - void* layoutContext) { - auto config = oldNode->getConfig(); - if (!config) { - return nullptr; - } - - static auto onNodeClonedFunc = - findClassStatic("com/facebook/yoga/YogaConfig") - ->getMethod( - local_ref, local_ref, jint)>("cloneNode"); - - auto context = reinterpret_cast(YGConfigGetContext(config)); - auto javaConfig = context->config; - - auto newNode = onNodeClonedFunc( - javaConfig->get(), - YGNodeJobject(oldNode, layoutContext), - YGNodeJobject(owner, layoutContext), - childIndex); - - static auto replaceChild = - findClassStatic("com/facebook/yoga/YogaNodeJNI") - ->getMethod, jint)>("replaceChild"); - - jlong newNodeNativePointer = - replaceChild(YGNodeJobject(owner, layoutContext), newNode, childIndex); - - return _jlong2YGNodeRef(newNodeNativePointer); -} - static YGSize YGJNIMeasureFunc( YGNodeRef node, float width, @@ -356,26 +322,6 @@ jlong jni_YGNodeNewWithConfig( return reinterpret_cast(node); } -void jni_YGNodeSetOwner(jlong nativePointer, jlong newOwnerNativePointer) { - const YGNodeRef node = _jlong2YGNodeRef(nativePointer); - const YGNodeRef newOwnerNode = _jlong2YGNodeRef(newOwnerNativePointer); - - node->setOwner(newOwnerNode); -} - -jlong jni_YGNodeClone( - alias_ref thiz, - jlong nativePointer, - alias_ref clonedJavaObject, - jboolean avoidGlobalJNIRefs) { - const YGNodeRef clonedYogaNode = YGNodeClone(_jlong2YGNodeRef(nativePointer)); - if (!avoidGlobalJNIRefs) { - clonedYogaNode->setContext( - new weak_ref(make_weak(clonedJavaObject))); - } - return reinterpret_cast(clonedYogaNode); -} - void jni_YGNodeFree(alias_ref, jlong nativePointer) { if (nativePointer == 0) { return; @@ -668,29 +614,6 @@ void jni_YGConfigSetUseLegacyStretchBehaviour( YGConfigSetUseLegacyStretchBehaviour(config, useLegacyStretchBehaviour); } -void jni_YGConfigSetHasCloneNodeFunc( - alias_ref thiz, - jlong nativePointer, - jboolean hasCloneNodeFunc) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - auto context = reinterpret_cast(YGConfigGetContext(config)); - if (context && context->config) { - delete context->config; - context->config = nullptr; - } - - if (hasCloneNodeFunc) { - if (!context) { - context = new YGConfigContext(); - YGConfigSetContext(config, context); - } - context->config = new global_ref(make_global(thiz)); - config->setCloneNodeCallback(YGJNIOnNodeClonedFunc); - } else { - config->setCloneNodeCallback(nullptr); - } -} - void jni_YGConfigSetLogger( alias_ref, jlong nativePointer, @@ -719,7 +642,8 @@ jint jni_YGNodeGetInstanceCount() { } #define YGMakeNativeMethod(name) makeNativeMethod(#name, name) -#define YGMakeCriticalNativeMethod(name) makeCriticalNativeMethod_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(#name, name) +#define YGMakeCriticalNativeMethod(name) \ + makeCriticalNativeMethod_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(#name, name) jint JNI_OnLoad(JavaVM* vm, void*) { return initialize(vm, [] { @@ -807,8 +731,6 @@ jint JNI_OnLoad(JavaVM* vm, void*) { YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio), YGMakeCriticalNativeMethod(jni_YGNodeGetInstanceCount), YGMakeCriticalNativeMethod(jni_YGNodePrint), - YGMakeNativeMethod(jni_YGNodeClone), - YGMakeCriticalNativeMethod(jni_YGNodeSetOwner), }); registerNatives( "com/facebook/yoga/YogaConfig", @@ -821,7 +743,6 @@ jint JNI_OnLoad(JavaVM* vm, void*) { YGMakeNativeMethod(jni_YGConfigSetPointScaleFactor), YGMakeNativeMethod(jni_YGConfigSetUseLegacyStretchBehaviour), YGMakeNativeMethod(jni_YGConfigSetLogger), - YGMakeNativeMethod(jni_YGConfigSetHasCloneNodeFunc), YGMakeNativeMethod( jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour), });