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: 9a00c89c4d6ccfa33db7064c34b5cf5d400d58fe
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));
|
|
}
|
|
}
|
|
};
|