Encapsulate all used java classes
Summary: @public Moves all Java classes used from C++ to their own header + implementation file. In `YGJNI.cpp`, we only call methods on these objects deriving from `jni::JavaClass`. This is only a bit of cleanup, no functional change. Reviewed By: SidharthGuglani Differential Revision: D14261043 fbshipit-source-id: 2db1d81cb7f56a4cdc24b182b2166e1d7e24ba3c
This commit is contained in:
committed by
Facebook Github Bot
parent
de79f2a1d4
commit
888892885e
@@ -11,6 +11,8 @@
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
|
||||
#include "YGJTypes.h"
|
||||
|
||||
using namespace facebook::jni;
|
||||
using namespace std;
|
||||
using facebook::yoga::detail::Log;
|
||||
@@ -58,14 +60,6 @@ enum YGStyleInput {
|
||||
IsReferenceBaseline,
|
||||
};
|
||||
|
||||
struct JYogaNode : public JavaClass<JYogaNode> {
|
||||
static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaNodeJNI;";
|
||||
};
|
||||
|
||||
struct JYogaConfig : public JavaClass<JYogaConfig> {
|
||||
static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaConfig;";
|
||||
};
|
||||
|
||||
class PtrJNodeMap {
|
||||
using JNodeArray = JArrayClass<JYogaNode::javaobject>;
|
||||
std::map<YGNodeRef, size_t> ptrsToIdxs_;
|
||||
@@ -250,10 +244,7 @@ static float YGJNIBaselineFunc(
|
||||
float height,
|
||||
void* layoutContext) {
|
||||
if (auto obj = YGNodeJobject(node, layoutContext)) {
|
||||
static auto baselineFunc =
|
||||
findClassStatic("com/facebook/yoga/YogaNodeJNI")
|
||||
->getMethod<jfloat(jfloat, jfloat)>("baseline");
|
||||
return baselineFunc(obj, width, height);
|
||||
return obj->baseline(width, height);
|
||||
} else {
|
||||
return height;
|
||||
}
|
||||
@@ -275,13 +266,9 @@ static YGSize YGJNIMeasureFunc(
|
||||
YGMeasureMode heightMode,
|
||||
void* layoutContext) {
|
||||
if (auto obj = YGNodeJobject(node, layoutContext)) {
|
||||
static auto measureFunc =
|
||||
findClassStatic("com/facebook/yoga/YogaNodeJNI")
|
||||
->getMethod<jlong(jfloat, jint, jfloat, jint)>("measure");
|
||||
|
||||
YGTransferLayoutDirection(node, obj);
|
||||
const auto measureResult =
|
||||
measureFunc(obj, width, widthMode, height, heightMode);
|
||||
obj->measure(width, widthMode, height, heightMode);
|
||||
|
||||
static_assert(
|
||||
sizeof(measureResult) == 8,
|
||||
@@ -307,10 +294,6 @@ static YGSize YGJNIMeasureFunc(
|
||||
}
|
||||
}
|
||||
|
||||
struct JYogaLogLevel : public JavaClass<JYogaLogLevel> {
|
||||
static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogLevel;";
|
||||
};
|
||||
|
||||
static int YGJNILogFunc(
|
||||
const YGConfigRef config,
|
||||
const YGNodeRef node,
|
||||
@@ -322,25 +305,15 @@ static int YGJNILogFunc(
|
||||
std::vector<char> buffer(1 + result);
|
||||
vsnprintf(buffer.data(), buffer.size(), format, args);
|
||||
|
||||
static auto logFunc =
|
||||
findClassStatic("com/facebook/yoga/YogaLogger")
|
||||
->getMethod<void(
|
||||
local_ref<JYogaNode>, local_ref<JYogaLogLevel>, jstring)>("log");
|
||||
|
||||
static auto logLevelFromInt =
|
||||
JYogaLogLevel::javaClassStatic()
|
||||
->getStaticMethod<JYogaLogLevel::javaobject(jint)>("fromInt");
|
||||
|
||||
auto jloggerPtr =
|
||||
static_cast<global_ref<jobject>*>(YGConfigGetContext(config));
|
||||
static_cast<global_ref<JYogaLogger>*>(YGConfigGetContext(config));
|
||||
if (jloggerPtr != nullptr) {
|
||||
if (auto obj = YGNodeJobject(node, layoutContext)) {
|
||||
logFunc(
|
||||
*jloggerPtr,
|
||||
obj,
|
||||
logLevelFromInt(
|
||||
JYogaLogLevel::javaClassStatic(), static_cast<jint>(level)),
|
||||
Environment::current()->NewStringUTF(buffer.data()));
|
||||
(*jloggerPtr)
|
||||
->log(
|
||||
obj,
|
||||
JYogaLogLevel::fromInt(level),
|
||||
Environment::current()->NewStringUTF(buffer.data()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,14 +452,6 @@ void jni_YGNodeCopyStyle(jlong dstNativePointer, jlong srcNativePointer) {
|
||||
_jlong2YGNodeRef(dstNativePointer), _jlong2YGNodeRef(srcNativePointer));
|
||||
}
|
||||
|
||||
struct JYogaValue : public JavaClass<JYogaValue> {
|
||||
constexpr static auto kJavaDescriptor = "Lcom/facebook/yoga/YogaValue;";
|
||||
|
||||
static local_ref<javaobject> create(YGValue value) {
|
||||
return newInstance(value.value, static_cast<int>(value.unit));
|
||||
}
|
||||
};
|
||||
|
||||
#define YG_NODE_JNI_STYLE_PROP(javatype, type, name) \
|
||||
javatype jni_YGNodeStyleGet##name(jlong nativePointer) { \
|
||||
return (javatype) YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer)); \
|
||||
@@ -605,8 +570,8 @@ jlong jni_YGConfigNew(alias_ref<jobject>) {
|
||||
void jni_YGConfigFree(alias_ref<jobject>, jlong nativePointer) {
|
||||
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
||||
// unique_ptr will destruct the underlying global_ref, if present.
|
||||
auto context = std::unique_ptr<global_ref<jobject>>{
|
||||
static_cast<global_ref<jobject>*>(YGConfigGetContext(config))};
|
||||
auto context = std::unique_ptr<global_ref<JYogaLogger>>{
|
||||
static_cast<global_ref<JYogaLogger>*>(YGConfigGetContext(config))};
|
||||
YGConfigFree(config);
|
||||
}
|
||||
|
||||
@@ -666,14 +631,15 @@ void jni_YGConfigSetLogger(
|
||||
alias_ref<jobject> logger) {
|
||||
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
||||
auto context =
|
||||
reinterpret_cast<global_ref<jobject>*>(YGConfigGetContext(config));
|
||||
reinterpret_cast<global_ref<JYogaLogger>*>(YGConfigGetContext(config));
|
||||
|
||||
if (logger) {
|
||||
if (context == nullptr) {
|
||||
context = new global_ref<jobject>{};
|
||||
context = new global_ref<JYogaLogger>{};
|
||||
YGConfigSetContext(config, context);
|
||||
}
|
||||
*context = make_global(logger);
|
||||
|
||||
*context = make_global(static_ref_cast<JYogaLogger::javaobject>(logger));
|
||||
config->setLogger(YGJNILogFunc);
|
||||
} else {
|
||||
if (context != nullptr) {
|
||||
@@ -955,94 +921,92 @@ void jni_YGNodeStyleSetBorder(jlong nativePointer, jint edge, jfloat border) {
|
||||
|
||||
jint JNI_OnLoad(JavaVM* vm, void*) {
|
||||
return initialize(vm, [] {
|
||||
registerNatives(
|
||||
"com/facebook/yoga/YogaNodeJNI",
|
||||
{
|
||||
YGMakeNativeMethod(jni_YGNodeNew),
|
||||
YGMakeNativeMethod(jni_YGNodeNewWithConfig),
|
||||
YGMakeNativeMethod(jni_YGNodeFree),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeReset),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeClearChildren),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeInsertChild),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeRemoveChild),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeSetIsReferenceBaseline),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeIsReferenceBaseline),
|
||||
YGMakeNativeMethod(jni_YGNodeCalculateLayout),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeMarkDirty),
|
||||
YGMakeCriticalNativeMethod(
|
||||
jni_YGNodeMarkDirtyAndPropogateToDescendants),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeIsDirty),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeSetHasMeasureFunc),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeSetHasBaselineFunc),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeCopyStyle),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDirection),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDirection),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexDirection),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexDirection),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetJustifyContent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetJustifyContent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignItems),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignItems),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignSelf),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignSelf),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignContent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignContent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPositionType),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionType),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexWrap),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexWrap),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetOverflow),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetOverflow),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDisplay),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDisplay),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlex),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlex),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexGrow),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexGrow),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexShrink),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexShrink),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetFlexBasis),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasis),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisAuto),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMargin),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMargin),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginAuto),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetPadding),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPadding),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPaddingPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetBorder),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetBorder),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetPosition),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPosition),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionPercent),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthAuto),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightAuto),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMinWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidthPercent),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMinHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeightPercent),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMaxWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidthPercent),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMaxHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeightPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAspectRatio),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeGetInstanceCount),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodePrint),
|
||||
YGMakeNativeMethod(jni_YGNodeSetStyleInputs),
|
||||
});
|
||||
JYogaNode::javaClassStatic()->registerNatives({
|
||||
YGMakeNativeMethod(jni_YGNodeNew),
|
||||
YGMakeNativeMethod(jni_YGNodeNewWithConfig),
|
||||
YGMakeNativeMethod(jni_YGNodeFree),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeReset),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeClearChildren),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeInsertChild),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeRemoveChild),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeSetIsReferenceBaseline),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeIsReferenceBaseline),
|
||||
YGMakeNativeMethod(jni_YGNodeCalculateLayout),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeMarkDirty),
|
||||
YGMakeCriticalNativeMethod(
|
||||
jni_YGNodeMarkDirtyAndPropogateToDescendants),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeIsDirty),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeSetHasMeasureFunc),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeSetHasBaselineFunc),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeCopyStyle),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDirection),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDirection),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexDirection),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexDirection),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetJustifyContent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetJustifyContent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignItems),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignItems),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignSelf),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignSelf),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignContent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignContent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPositionType),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionType),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexWrap),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexWrap),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetOverflow),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetOverflow),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDisplay),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDisplay),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlex),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlex),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexGrow),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexGrow),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexShrink),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexShrink),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetFlexBasis),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasis),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisAuto),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMargin),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMargin),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginAuto),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetPadding),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPadding),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPaddingPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetBorder),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetBorder),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetPosition),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPosition),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionPercent),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthAuto),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightAuto),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMinWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidthPercent),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMinHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeightPercent),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMaxWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidth),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidthPercent),
|
||||
YGMakeNativeMethod(jni_YGNodeStyleGetMaxHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeight),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeightPercent),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAspectRatio),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodeGetInstanceCount),
|
||||
YGMakeCriticalNativeMethod(jni_YGNodePrint),
|
||||
YGMakeNativeMethod(jni_YGNodeSetStyleInputs),
|
||||
});
|
||||
registerNatives(
|
||||
"com/facebook/yoga/YogaConfig",
|
||||
{
|
||||
|
Reference in New Issue
Block a user