Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1269 X-link: https://github.com/facebook/react-native/pull/37127 This prevents targets which include Yoga from using its private APIs. Instances of this have been mostly cleaned up in the past diffs, with the major exception of RN Fabric. To stage this without blocking on that, I added a `yoga-private-api` target for now to keep using these headers while making it unlikely new usages will show up. Reviewed By: javache Differential Revision: D45339425 fbshipit-source-id: eb7ef151ad2467d7c3370cd7c10d47e8db9496a0
50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
#include <yoga/Yoga.h>
|
|
|
|
#include "common.h"
|
|
#include "jni.h"
|
|
|
|
class PtrJNodeMapVanilla {
|
|
std::map<YGNodeRef, size_t> ptrsToIdxs_;
|
|
jobjectArray javaNodes_;
|
|
|
|
public:
|
|
PtrJNodeMapVanilla() : ptrsToIdxs_{}, javaNodes_{} {}
|
|
PtrJNodeMapVanilla(jlongArray javaNativePointers, jobjectArray javaNodes)
|
|
: javaNodes_{javaNodes} {
|
|
using namespace facebook::yoga::vanillajni;
|
|
|
|
JNIEnv* env = getCurrentEnv();
|
|
size_t nativePointersSize = env->GetArrayLength(javaNativePointers);
|
|
std::vector<jlong> nativePointers(nativePointersSize);
|
|
env->GetLongArrayRegion(
|
|
javaNativePointers, 0, nativePointersSize, nativePointers.data());
|
|
|
|
for (size_t i = 0; i < nativePointersSize; ++i) {
|
|
ptrsToIdxs_[(YGNodeRef) nativePointers[i]] = i;
|
|
}
|
|
}
|
|
|
|
facebook::yoga::vanillajni::ScopedLocalRef<jobject> ref(YGNodeRef node) {
|
|
using namespace facebook::yoga::vanillajni;
|
|
|
|
JNIEnv* env = getCurrentEnv();
|
|
auto idx = ptrsToIdxs_.find(node);
|
|
if (idx == ptrsToIdxs_.end()) {
|
|
return ScopedLocalRef<jobject>(env);
|
|
} else {
|
|
return make_local_ref(
|
|
env, env->GetObjectArrayElement(javaNodes_, idx->second));
|
|
}
|
|
}
|
|
};
|