Skip to content

Commit

Permalink
Breaking remove YogaNode#clone
Browse files Browse the repository at this point in the history
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
  • Loading branch information
davidaurelio authored and facebook-github-bot committed Feb 27, 2019
1 parent 9207377 commit 537ed61
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 141 deletions.
12 changes: 0 additions & 12 deletions ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
49 changes: 1 addition & 48 deletions ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNI.java
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -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<YogaNodeJNI>) ((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() {
Expand Down
83 changes: 2 additions & 81 deletions ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,40 +226,6 @@ static inline YGConfigRef _jlong2YGConfigRef(jlong addr) {
return reinterpret_cast<YGConfigRef>(static_cast<intptr_t>(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<alias_ref<JYogaNode>(
local_ref<JYogaNode>, local_ref<JYogaNode>, jint)>("cloneNode");

auto context = reinterpret_cast<YGConfigContext*>(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<jlong(local_ref<JYogaNode>, jint)>("replaceChild");

jlong newNodeNativePointer =
replaceChild(YGNodeJobject(owner, layoutContext), newNode, childIndex);

return _jlong2YGNodeRef(newNodeNativePointer);
}

static YGSize YGJNIMeasureFunc(
YGNodeRef node,
float width,
Expand Down Expand Up @@ -356,26 +322,6 @@ jlong jni_YGNodeNewWithConfig(
return reinterpret_cast<jlong>(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<jobject> thiz,
jlong nativePointer,
alias_ref<jobject> clonedJavaObject,
jboolean avoidGlobalJNIRefs) {
const YGNodeRef clonedYogaNode = YGNodeClone(_jlong2YGNodeRef(nativePointer));
if (!avoidGlobalJNIRefs) {
clonedYogaNode->setContext(
new weak_ref<jobject>(make_weak(clonedJavaObject)));
}
return reinterpret_cast<jlong>(clonedYogaNode);
}

void jni_YGNodeFree(alias_ref<jclass>, jlong nativePointer) {
if (nativePointer == 0) {
return;
Expand Down Expand Up @@ -668,29 +614,6 @@ void jni_YGConfigSetUseLegacyStretchBehaviour(
YGConfigSetUseLegacyStretchBehaviour(config, useLegacyStretchBehaviour);
}

void jni_YGConfigSetHasCloneNodeFunc(
alias_ref<jobject> thiz,
jlong nativePointer,
jboolean hasCloneNodeFunc) {
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
auto context = reinterpret_cast<YGConfigContext*>(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<jobject>(make_global(thiz));
config->setCloneNodeCallback(YGJNIOnNodeClonedFunc);
} else {
config->setCloneNodeCallback(nullptr);
}
}

void jni_YGConfigSetLogger(
alias_ref<jobject>,
jlong nativePointer,
Expand Down Expand Up @@ -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, [] {
Expand Down Expand Up @@ -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",
Expand All @@ -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),
});
Expand Down

0 comments on commit 537ed61

Please sign in to comment.