react-nitro-yoga 0.0.0-stage → 0.0.1-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Generated/.gitattributes +1 -0
- package/Generated/api.d.ts +100 -0
- package/Generated/ffigen_yoga_adapters.h +52 -0
- package/Generated/native.d.ts +84 -0
- package/Generated/native.ts +283 -0
- package/Generated/yoga.c +1087 -0
- package/LICENSE +21 -0
- package/Package.swift +57 -0
- package/README.md +61 -2
- package/Sources/ReactNitroYoga/InstallHermesBindings.cpp +11 -0
- package/Sources/ReactNitroYoga/SHUnit.h +16 -0
- package/include/ReactNitroYoga/InstallHermesBindings.hpp +12 -0
- package/package.json +26 -4
- package/yoga/.clang-format +109 -0
- package/yoga/.clang-tidy +217 -0
- package/yoga/.editorconfig +11 -0
- package/yoga/.eslintrc.cjs +84 -0
- package/yoga/.github/ISSUE_TEMPLATE.md +21 -0
- package/yoga/.github/actions/black/action.yml +25 -0
- package/yoga/.github/actions/cache-emsdk/action.yml +10 -0
- package/yoga/.github/actions/install-ninja/action.yml +14 -0
- package/yoga/.github/actions/setup-android/action.yml +12 -0
- package/yoga/.github/actions/setup-apple/action.yml +8 -0
- package/yoga/.github/actions/setup-cpp/action.yml +34 -0
- package/yoga/.github/actions/setup-js/action.yml +18 -0
- package/yoga/.github/workflows/publish-android-release.yml +38 -0
- package/yoga/.github/workflows/publish-android-snashot.yml +36 -0
- package/yoga/.github/workflows/publish-npm-release.yml +25 -0
- package/yoga/.github/workflows/validate-android.yml +30 -0
- package/yoga/.github/workflows/validate-cpp.yml +101 -0
- package/yoga/.github/workflows/validate-format.yml +36 -0
- package/yoga/.github/workflows/validate-js.yml +119 -0
- package/yoga/.github/workflows/validate-swiftpm.yml +29 -0
- package/yoga/.github/workflows/validate-tests.yml +35 -0
- package/yoga/.github/workflows/validate-website.yml +45 -0
- package/yoga/.prettierignore +3 -0
- package/yoga/.prettierrc.js +16 -0
- package/yoga/.vscode/extensions.json +7 -0
- package/yoga/.vscode/launch.json +25 -0
- package/yoga/.vscode/settings.json +20 -0
- package/yoga/.vscode/tasks.json +23 -0
- package/yoga/CMakeLists.txt +58 -0
- package/yoga/CODE_OF_CONDUCT.md +76 -0
- package/yoga/CONTRIBUTING.md +44 -0
- package/yoga/LICENSE +21 -0
- package/yoga/LICENSE-examples +9 -0
- package/yoga/Package.swift +32 -0
- package/yoga/README.md +36 -0
- package/yoga/benchmark/Benchmark.cpp +400 -0
- package/yoga/benchmark/Benchmark.h +39 -0
- package/yoga/benchmark/CMakeLists.txt +27 -0
- package/yoga/benchmark/TreeDeserialization.cpp +248 -0
- package/yoga/benchmark/TreeDeserialization.h +52 -0
- package/yoga/benchmark/YGBenchmark.c +183 -0
- package/yoga/benchmark/benchmark +15 -0
- package/yoga/benchmark/captures/chat-mac.json +24426 -0
- package/yoga/benchmark/captures/feed-android.json +10335 -0
- package/yoga/benchmark/captures/profile-ios.json +1955 -0
- package/yoga/benchmark/captures/rendering-sample-mac.json +1927 -0
- package/yoga/build.gradle +46 -0
- package/yoga/build_fuzz_tests +28 -0
- package/yoga/capture/CMakeLists.txt +23 -0
- package/yoga/capture/CaptureTree.cpp +100 -0
- package/yoga/capture/CaptureTree.h +47 -0
- package/yoga/capture/NodeToString.cpp +359 -0
- package/yoga/capture/NodeToString.h +40 -0
- package/yoga/cmake/project-defaults.cmake +50 -0
- package/yoga/cmake/yoga-config.cmake.in +10 -0
- package/yoga/enums.py +394 -0
- package/yoga/fuzz/CMakeLists.txt +21 -0
- package/yoga/fuzz/FuzzLayout.cpp +57 -0
- package/yoga/gentest/babel.config.cjs +12 -0
- package/yoga/gentest/fixtures/YGAbsolutePositionTest.html +168 -0
- package/yoga/gentest/fixtures/YGAlignContentTest.html +479 -0
- package/yoga/gentest/fixtures/YGAlignItemsTest.html +227 -0
- package/yoga/gentest/fixtures/YGAlignSelfTest.html +23 -0
- package/yoga/gentest/fixtures/YGAndroidNewsFeed.html +28 -0
- package/yoga/gentest/fixtures/YGAspectRatioTest.html +3 -0
- package/yoga/gentest/fixtures/YGAutoTest.html +25 -0
- package/yoga/gentest/fixtures/YGBorderTest.html +18 -0
- package/yoga/gentest/fixtures/YGBoxSizingTest.html +240 -0
- package/yoga/gentest/fixtures/YGDimensionTest.html +9 -0
- package/yoga/gentest/fixtures/YGDisplayTest.html +89 -0
- package/yoga/gentest/fixtures/YGFlexBasisFitContentTest.html +55 -0
- package/yoga/gentest/fixtures/YGFlexDirectionTest.html +391 -0
- package/yoga/gentest/fixtures/YGFlexTest.html +53 -0
- package/yoga/gentest/fixtures/YGFlexWrapTest.html +160 -0
- package/yoga/gentest/fixtures/YGGapTest.html +233 -0
- package/yoga/gentest/fixtures/YGIntrinsicSizeTest.html +295 -0
- package/yoga/gentest/fixtures/YGJustifyContentTest.html +164 -0
- package/yoga/gentest/fixtures/YGMarginTest.html +157 -0
- package/yoga/gentest/fixtures/YGMinMaxDimensionTest.html +116 -0
- package/yoga/gentest/fixtures/YGPaddingTest.html +29 -0
- package/yoga/gentest/fixtures/YGPercentageTest.html +125 -0
- package/yoga/gentest/fixtures/YGRoundingTest.html +95 -0
- package/yoga/gentest/fixtures/YGSizeOverflowTest.html +17 -0
- package/yoga/gentest/fixtures/YGStaticPositionTest.html +712 -0
- package/yoga/gentest/fonts/Ahem.ttf +0 -0
- package/yoga/gentest/gentest-driver.ts +141 -0
- package/yoga/gentest/gentest-validate.ts +43 -0
- package/yoga/gentest/package.json +24 -0
- package/yoga/gentest/scripts/gentest-validate.ts +43 -0
- package/yoga/gentest/signedsource.d.ts +10 -0
- package/yoga/gentest/src/ChromePool.ts +78 -0
- package/yoga/gentest/src/CssToYoga.ts +958 -0
- package/yoga/gentest/src/buildLayoutTree.ts +98 -0
- package/yoga/gentest/src/cli.ts +163 -0
- package/yoga/gentest/src/emitters/CppEmitter.ts +452 -0
- package/yoga/gentest/src/emitters/Emitter.ts +204 -0
- package/yoga/gentest/src/emitters/JavaEmitter.ts +469 -0
- package/yoga/gentest/src/emitters/JavascriptEmitter.ts +353 -0
- package/yoga/gentest/src/types.ts +41 -0
- package/yoga/gentest/test-template.html +42 -0
- package/yoga/gentest/tsconfig.json +13 -0
- package/yoga/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/yoga/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/yoga/gradle.properties +14 -0
- package/yoga/gradlew +251 -0
- package/yoga/gradlew.bat +94 -0
- package/yoga/java/AndroidManifest.xml +14 -0
- package/yoga/java/CMakeLists.txt +22 -0
- package/yoga/java/build.gradle.kts +127 -0
- package/yoga/java/com/facebook/yoga/LayoutPassReason.kt +35 -0
- package/yoga/java/com/facebook/yoga/YogaAlign.kt +45 -0
- package/yoga/java/com/facebook/yoga/YogaBaselineFunction.kt +16 -0
- package/yoga/java/com/facebook/yoga/YogaBoxSizing.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaConfig.kt +48 -0
- package/yoga/java/com/facebook/yoga/YogaConfigFactory.kt +12 -0
- package/yoga/java/com/facebook/yoga/YogaConfigJNIBase.kt +70 -0
- package/yoga/java/com/facebook/yoga/YogaConfigJNIFinalizer.kt +30 -0
- package/yoga/java/com/facebook/yoga/YogaConstants.kt +18 -0
- package/yoga/java/com/facebook/yoga/YogaDimension.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaDirection.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaDisplay.kt +31 -0
- package/yoga/java/com/facebook/yoga/YogaEdge.kt +41 -0
- package/yoga/java/com/facebook/yoga/YogaErrata.kt +39 -0
- package/yoga/java/com/facebook/yoga/YogaExperimentalFeature.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaFlexDirection.kt +31 -0
- package/yoga/java/com/facebook/yoga/YogaGridTrackType.kt +33 -0
- package/yoga/java/com/facebook/yoga/YogaGutter.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaJustify.kt +43 -0
- package/yoga/java/com/facebook/yoga/YogaLayoutType.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaLogLevel.kt +39 -0
- package/yoga/java/com/facebook/yoga/YogaLogger.kt +19 -0
- package/yoga/java/com/facebook/yoga/YogaMeasureFunction.kt +19 -0
- package/yoga/java/com/facebook/yoga/YogaMeasureMode.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaMeasureOutput.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaNative.kt +347 -0
- package/yoga/java/com/facebook/yoga/YogaNode.kt +254 -0
- package/yoga/java/com/facebook/yoga/YogaNodeFactory.kt +14 -0
- package/yoga/java/com/facebook/yoga/YogaNodeJNIBase.kt +762 -0
- package/yoga/java/com/facebook/yoga/YogaNodeJNIFinalizer.kt +33 -0
- package/yoga/java/com/facebook/yoga/YogaNodeType.kt +27 -0
- package/yoga/java/com/facebook/yoga/YogaOverflow.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaPositionType.kt +29 -0
- package/yoga/java/com/facebook/yoga/YogaProps.kt +205 -0
- package/yoga/java/com/facebook/yoga/YogaStyleInputs.kt +51 -0
- package/yoga/java/com/facebook/yoga/YogaUnit.kt +37 -0
- package/yoga/java/com/facebook/yoga/YogaValue.kt +66 -0
- package/yoga/java/com/facebook/yoga/YogaWrap.kt +29 -0
- package/yoga/java/com/facebook/yoga/annotations/DoNotStrip.kt +19 -0
- package/yoga/java/gen/com/facebook/yoga/BuildConfig.java +15 -0
- package/yoga/java/jni/LayoutContext.cpp +34 -0
- package/yoga/java/jni/LayoutContext.h +29 -0
- package/yoga/java/jni/ScopedGlobalRef.h +140 -0
- package/yoga/java/jni/ScopedLocalRef.h +141 -0
- package/yoga/java/jni/YGJNI.h +77 -0
- package/yoga/java/jni/YGJNIVanilla.cpp +1178 -0
- package/yoga/java/jni/YGJNIVanilla.h +12 -0
- package/yoga/java/jni/YGJTypesVanilla.h +52 -0
- package/yoga/java/jni/YogaJniException.cpp +49 -0
- package/yoga/java/jni/YogaJniException.h +35 -0
- package/yoga/java/jni/common.cpp +109 -0
- package/yoga/java/jni/common.h +73 -0
- package/yoga/java/jni/corefunctions.cpp +91 -0
- package/yoga/java/jni/corefunctions.h +50 -0
- package/yoga/java/jni/macros.h +23 -0
- package/yoga/java/jni/tests/corefunctionsTest.cpp +247 -0
- package/yoga/java/jni/yogajni.cpp +18 -0
- package/yoga/java/proguard-rules.pro +10 -0
- package/yoga/java/res/values/strings.xml +12 -0
- package/yoga/java/tests/com/facebook/yoga/TestParametrization.kt +29 -0
- package/yoga/java/tests/com/facebook/yoga/YGAlignBaselineTest.kt +117 -0
- package/yoga/java/tests/com/facebook/yoga/YogaExceptionTest.kt +140 -0
- package/yoga/java/tests/com/facebook/yoga/YogaLoggerTest.kt +77 -0
- package/yoga/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.kt +1020 -0
- package/yoga/java/tests/com/facebook/yoga/YogaNodeTest.kt +319 -0
- package/yoga/java/tests/com/facebook/yoga/YogaValueTest.kt +23 -0
- package/yoga/java/tests/com/facebook/yoga/utils/TestUtils.kt +99 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAbsolutePositionTest.java +1670 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAlignContentTest.java +5440 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAlignItemsTest.java +2132 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAlignSelfTest.java +271 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAndroidNewsFeed.java +313 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAspectRatioTest.java +73 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGAutoTest.java +326 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGBorderTest.java +222 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGBoxSizingTest.java +2165 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGDimensionTest.java +122 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGDisplayContentsTest.java +107 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGDisplayTest.java +1021 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGFlexBasisFitContentTest.java +391 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGFlexDirectionTest.java +4118 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGFlexTest.java +630 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGFlexWrapTest.java +1863 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGGapTest.java +2988 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGIntrinsicSizeTest.java +926 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGJustifyContentTest.java +1865 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGMarginTest.java +1796 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGMinMaxDimensionTest.java +1210 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGPaddingTest.java +307 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGPercentageTest.java +1345 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGRoundingTest.java +1099 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGSizeOverflowTest.java +195 -0
- package/yoga/java/tests/generated/com/facebook/yoga/YGStaticPositionTest.java +5992 -0
- package/yoga/java/yogajni.version +13 -0
- package/yoga/javascript/CMakeLists.txt +59 -0
- package/yoga/javascript/README.md +27 -0
- package/yoga/javascript/babel.config.cjs +30 -0
- package/yoga/javascript/jest.config.js +14 -0
- package/yoga/javascript/jest.setup.js +12 -0
- package/yoga/javascript/just.config.cjs +258 -0
- package/yoga/javascript/package.json +52 -0
- package/yoga/javascript/src/generated/YGEnums.ts +249 -0
- package/yoga/javascript/src/index.ts +23 -0
- package/yoga/javascript/src/load.ts +25 -0
- package/yoga/javascript/src/wasm_bridge.c +155 -0
- package/yoga/javascript/src/wrapAssembly.ts +1025 -0
- package/yoga/javascript/tests/Benchmarks/YGBenchmark.test.ts +110 -0
- package/yoga/javascript/tests/YGAlignBaselineTest.test.ts +104 -0
- package/yoga/javascript/tests/YGComputedBorderTest.test.ts +25 -0
- package/yoga/javascript/tests/YGComputedMarginTest.test.ts +25 -0
- package/yoga/javascript/tests/YGComputedPaddingTest.test.ts +25 -0
- package/yoga/javascript/tests/YGDirtiedTest.test.ts +149 -0
- package/yoga/javascript/tests/YGErrataTest.test.ts +34 -0
- package/yoga/javascript/tests/YGFlexBasisAuto.test.ts +21 -0
- package/yoga/javascript/tests/YGHadOverflowTest.test.ts +110 -0
- package/yoga/javascript/tests/YGHasNewLayout.test.ts +81 -0
- package/yoga/javascript/tests/YGMeasureCacheTest.test.ts +29 -0
- package/yoga/javascript/tests/YGMeasureTest.test.ts +66 -0
- package/yoga/javascript/tests/bin/run-bench.ts +60 -0
- package/yoga/javascript/tests/generated/YGAbsolutePositionTest.test.ts +1531 -0
- package/yoga/javascript/tests/generated/YGAlignContentTest.test.ts +5181 -0
- package/yoga/javascript/tests/generated/YGAlignItemsTest.test.ts +2013 -0
- package/yoga/javascript/tests/generated/YGAlignSelfTest.test.ts +248 -0
- package/yoga/javascript/tests/generated/YGAndroidNewsFeed.test.ts +306 -0
- package/yoga/javascript/tests/generated/YGAspectRatioTest.test.ts +66 -0
- package/yoga/javascript/tests/generated/YGAutoTest.test.ts +303 -0
- package/yoga/javascript/tests/generated/YGBorderTest.test.ts +199 -0
- package/yoga/javascript/tests/generated/YGBoxSizingTest.test.ts +1978 -0
- package/yoga/javascript/tests/generated/YGDimensionTest.test.ts +111 -0
- package/yoga/javascript/tests/generated/YGDisplayContentsTest.test.ts +99 -0
- package/yoga/javascript/tests/generated/YGDisplayTest.test.ts +962 -0
- package/yoga/javascript/tests/generated/YGFlexBasisFitContentTest.test.ts +364 -0
- package/yoga/javascript/tests/generated/YGFlexDirectionTest.test.ts +3903 -0
- package/yoga/javascript/tests/generated/YGFlexTest.test.ts +587 -0
- package/yoga/javascript/tests/generated/YGFlexWrapTest.test.ts +1768 -0
- package/yoga/javascript/tests/generated/YGGapTest.test.ts +2857 -0
- package/yoga/javascript/tests/generated/YGIntrinsicSizeTest.test.ts +843 -0
- package/yoga/javascript/tests/generated/YGJustifyContentTest.test.ts +1750 -0
- package/yoga/javascript/tests/generated/YGMarginTest.test.ts +1657 -0
- package/yoga/javascript/tests/generated/YGMinMaxDimensionTest.test.ts +1111 -0
- package/yoga/javascript/tests/generated/YGPaddingTest.test.ts +276 -0
- package/yoga/javascript/tests/generated/YGPercentageTest.test.ts +1246 -0
- package/yoga/javascript/tests/generated/YGRoundingTest.test.ts +1044 -0
- package/yoga/javascript/tests/generated/YGSizeOverflowTest.test.ts +180 -0
- package/yoga/javascript/tests/generated/YGStaticPositionTest.test.ts +5741 -0
- package/yoga/javascript/tests/tools/MeasureCounter.ts +66 -0
- package/yoga/javascript/tests/tools/globals.ts +19 -0
- package/yoga/javascript/tests/tools/utils.ts +90 -0
- package/yoga/javascript/tsconfig.json +23 -0
- package/yoga/lib/jni/jni.h +13 -0
- package/yoga/lib/jni/real/jni.h +1141 -0
- package/yoga/lib/jsr-305/jsr305.jar +0 -0
- package/yoga/lib/nlohmann/json.hpp +24766 -0
- package/yoga/lib/soloader/soloader-0.5.1.aar +0 -0
- package/yoga/package.json +44 -0
- package/yoga/scripts/clang-format +52 -0
- package/yoga/scripts/clang-format.js +93 -0
- package/yoga/scripts/format-kotlin.js +88 -0
- package/yoga/scripts/format-python.js +150 -0
- package/yoga/scripts/format-utils.js +82 -0
- package/yoga/set-version.py +37 -0
- package/yoga/settings.gradle.kts +29 -0
- package/yoga/test/AssertFatalTest.cpp +70 -0
- package/yoga/tests/.clang-tidy +7 -0
- package/yoga/tests/CMakeLists.txt +35 -0
- package/yoga/tests/CacheTest.cpp +229 -0
- package/yoga/tests/EventPublisherTest.cpp +162 -0
- package/yoga/tests/EventsTest.cpp +362 -0
- package/yoga/tests/FlexGapTest.cpp +93 -0
- package/yoga/tests/FloatOptionalTest.cpp +214 -0
- package/yoga/tests/GridStyleTest.cpp +103 -0
- package/yoga/tests/OrdinalsTest.cpp +35 -0
- package/yoga/tests/SmallValueBufferTest.cpp +161 -0
- package/yoga/tests/StyleTest.cpp +48 -0
- package/yoga/tests/StyleValuePoolTest.cpp +146 -0
- package/yoga/tests/YGAlignBaselineTest.cpp +837 -0
- package/yoga/tests/YGAspectRatioTest.cpp +898 -0
- package/yoga/tests/YGAutoMinSizeTest.cpp +581 -0
- package/yoga/tests/YGBaselineFuncTest.cpp +62 -0
- package/yoga/tests/YGCloneNodeTest.cpp +131 -0
- package/yoga/tests/YGComputedMarginTest.cpp +117 -0
- package/yoga/tests/YGComputedPaddingTest.cpp +119 -0
- package/yoga/tests/YGConfigTest.cpp +239 -0
- package/yoga/tests/YGContentsNodeHasNewLayoutTest.cpp +190 -0
- package/yoga/tests/YGDefaultValuesTest.cpp +175 -0
- package/yoga/tests/YGDirtiedTest.cpp +110 -0
- package/yoga/tests/YGDirtyMarkingTest.cpp +341 -0
- package/yoga/tests/YGEdgeTest.cpp +161 -0
- package/yoga/tests/YGFirstChildMinWidthTest.cpp +133 -0
- package/yoga/tests/YGFlexBasisFitContentTest.cpp +241 -0
- package/yoga/tests/YGFlexShrinkBorderBugTest.cpp +48 -0
- package/yoga/tests/YGHadOverflowTest.cpp +135 -0
- package/yoga/tests/YGLayoutableChildrenTest.cpp +191 -0
- package/yoga/tests/YGMeasureCacheTest.cpp +178 -0
- package/yoga/tests/YGMeasureModeTest.cpp +332 -0
- package/yoga/tests/YGMeasureTest.cpp +1010 -0
- package/yoga/tests/YGNodeCallbackTest.cpp +80 -0
- package/yoga/tests/YGNodeChildTest.cpp +68 -0
- package/yoga/tests/YGPersistenceTest.cpp +291 -0
- package/yoga/tests/YGPersistentNodeCloningTest.cpp +214 -0
- package/yoga/tests/YGRelayoutTest.cpp +255 -0
- package/yoga/tests/YGRoundingFunctionTest.cpp +186 -0
- package/yoga/tests/YGRoundingMeasureFuncTest.cpp +139 -0
- package/yoga/tests/YGScaleChangeTest.cpp +176 -0
- package/yoga/tests/YGStyleTest.cpp +75 -0
- package/yoga/tests/YGTreeMutationTest.cpp +115 -0
- package/yoga/tests/YGValueTest.cpp +23 -0
- package/yoga/tests/YGZeroOutLayoutRecursivelyTest.cpp +37 -0
- package/yoga/tests/generated/YGAbsolutePositionTest.cpp +1685 -0
- package/yoga/tests/generated/YGAlignContentTest.cpp +5485 -0
- package/yoga/tests/generated/YGAlignItemsTest.cpp +2142 -0
- package/yoga/tests/generated/YGAlignSelfTest.cpp +257 -0
- package/yoga/tests/generated/YGAndroidNewsFeed.cpp +295 -0
- package/yoga/tests/generated/YGAspectRatioTest.cpp +55 -0
- package/yoga/tests/generated/YGAutoTest.cpp +312 -0
- package/yoga/tests/generated/YGBorderTest.cpp +208 -0
- package/yoga/tests/generated/YGBoxSizingTest.cpp +2192 -0
- package/yoga/tests/generated/YGDimensionTest.cpp +105 -0
- package/yoga/tests/generated/YGDisplayContentsTest.cpp +89 -0
- package/yoga/tests/generated/YGDisplayTest.cpp +1016 -0
- package/yoga/tests/generated/YGFlexBasisFitContentTest.cpp +378 -0
- package/yoga/tests/generated/YGFlexDirectionTest.cpp +4152 -0
- package/yoga/tests/generated/YGFlexTest.cpp +621 -0
- package/yoga/tests/generated/YGFlexWrapTest.cpp +1867 -0
- package/yoga/tests/generated/YGGapTest.cpp +3001 -0
- package/yoga/tests/generated/YGIntrinsicSizeTest.cpp +924 -0
- package/yoga/tests/generated/YGJustifyContentTest.cpp +1874 -0
- package/yoga/tests/generated/YGMarginTest.cpp +1811 -0
- package/yoga/tests/generated/YGMinMaxDimensionTest.cpp +1215 -0
- package/yoga/tests/generated/YGPaddingTest.cpp +295 -0
- package/yoga/tests/generated/YGPercentageTest.cpp +1350 -0
- package/yoga/tests/generated/YGRoundingTest.cpp +1093 -0
- package/yoga/tests/generated/YGSizeOverflowTest.cpp +179 -0
- package/yoga/tests/generated/YGStaticPositionTest.cpp +6035 -0
- package/yoga/tests/util/TestUtil.cpp +164 -0
- package/yoga/tests/util/TestUtil.h +43 -0
- package/yoga/unit_tests +25 -0
- package/yoga/unit_tests.bat +28 -0
- package/yoga/website/.eslintrc.cjs +26 -0
- package/yoga/website/README.md +41 -0
- package/yoga/website/babel.config.cjs +10 -0
- package/yoga/website/blog/2023-06-30-announcing-yoga-2.0.md +183 -0
- package/yoga/website/blog/2024-06-24-announcing-yoga-3.1.md +67 -0
- package/yoga/website/blog/2024-12-02-announcing-yoga-3.2.md +84 -0
- package/yoga/website/blog/authors.yml +10 -0
- package/yoga/website/blog/yoga-3-release/2024-03-14-announcing-yoga-3.0.md +586 -0
- package/yoga/website/blog/yoga-3-release/img/image1.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image10.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image11.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image12.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image13.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image14.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image15.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image16.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image17.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image2.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image3.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image4.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image5.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image6.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image7.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image8.png +0 -0
- package/yoga/website/blog/yoga-3-release/img/image9.png +0 -0
- package/yoga/website/docs/about-yoga.md +13 -0
- package/yoga/website/docs/advanced/_category_.json +4 -0
- package/yoga/website/docs/advanced/containing-block.md +89 -0
- package/yoga/website/docs/advanced/external-layout-systems.mdx +106 -0
- package/yoga/website/docs/advanced/incremental-layout.mdx +87 -0
- package/yoga/website/docs/getting-started/_category_.json +4 -0
- package/yoga/website/docs/getting-started/configuring-yoga.mdx +165 -0
- package/yoga/website/docs/getting-started/laying-out-a-tree.mdx +178 -0
- package/yoga/website/docs/img/config-contextual.svg +17 -0
- package/yoga/website/docs/img/config-per-node.svg +17 -0
- package/yoga/website/docs/img/config-uniform.svg +17 -0
- package/yoga/website/docs/img/invalidation-clean-tree.svg +17 -0
- package/yoga/website/docs/img/invalidation-dirtied-tree.svg +17 -0
- package/yoga/website/docs/img/invalidation-new-layout-tree.svg +17 -0
- package/yoga/website/docs/img/pixel-grid-after.png +0 -0
- package/yoga/website/docs/img/pixel-grid-before.png +0 -0
- package/yoga/website/docs/img/wireframe-example.svg +105 -0
- package/yoga/website/docs/styling/_category_.json +4 -0
- package/yoga/website/docs/styling/align-content.mdx +47 -0
- package/yoga/website/docs/styling/align-items-self.mdx +48 -0
- package/yoga/website/docs/styling/aspect-ratio.mdx +27 -0
- package/yoga/website/docs/styling/display.mdx +25 -0
- package/yoga/website/docs/styling/flex-basis-grow-shrink.mdx +65 -0
- package/yoga/website/docs/styling/flex-direction.mdx +37 -0
- package/yoga/website/docs/styling/flex-wrap.mdx +33 -0
- package/yoga/website/docs/styling/gap.mdx +49 -0
- package/yoga/website/docs/styling/index.md +48 -0
- package/yoga/website/docs/styling/insets.mdx +62 -0
- package/yoga/website/docs/styling/justify-content.mdx +43 -0
- package/yoga/website/docs/styling/layout-direction.mdx +34 -0
- package/yoga/website/docs/styling/margin-padding-border.mdx +41 -0
- package/yoga/website/docs/styling/min-max-width-height.mdx +52 -0
- package/yoga/website/docs/styling/position.mdx +37 -0
- package/yoga/website/docs/styling/width-height.mdx +37 -0
- package/yoga/website/docusaurus.config.js +113 -0
- package/yoga/website/package.json +43 -0
- package/yoga/website/sidebars.cjs +27 -0
- package/yoga/website/src/components/EditorToolbar.module.css +77 -0
- package/yoga/website/src/components/EditorToolbar.tsx +72 -0
- package/yoga/website/src/components/FlexStyle.ts +439 -0
- package/yoga/website/src/components/LayoutBox.module.css +68 -0
- package/yoga/website/src/components/LayoutBox.tsx +61 -0
- package/yoga/website/src/components/Playground.module.css +130 -0
- package/yoga/website/src/components/Playground.tsx +187 -0
- package/yoga/website/src/components/YogaViewer.tsx +128 -0
- package/yoga/website/src/css/custom.css +37 -0
- package/yoga/website/src/pages/index.module.css +34 -0
- package/yoga/website/src/pages/index.tsx +84 -0
- package/yoga/website/src/pages/markdown-page.md +7 -0
- package/yoga/website/src/pages/playground.module.css +11 -0
- package/yoga/website/src/pages/playground.tsx +56 -0
- package/yoga/website/static/.nojekyll +0 -0
- package/yoga/website/static/img/docusaurus.png +0 -0
- package/yoga/website/static/img/favicon.svg +17 -0
- package/yoga/website/static/img/link.svg +4 -0
- package/yoga/website/static/img/logo.svg +17 -0
- package/yoga/website/static/img/meta_oss.svg +1 -0
- package/yoga/website/static/img/opengraph.png +0 -0
- package/yoga/website/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/yoga/website/static/img/undraw_docusaurus_react.svg +170 -0
- package/yoga/website/static/img/undraw_docusaurus_tree.svg +40 -0
- package/yoga/website/tsconfig.json +10 -0
- package/yoga/yarn.lock +11499 -0
- package/yoga/yoga/CMakeLists.txt +41 -0
- package/yoga/yoga/YGConfig.cpp +92 -0
- package/yoga/yoga/YGConfig.h +158 -0
- package/yoga/yoga/YGEnums.cpp +304 -0
- package/yoga/yoga/YGEnums.h +163 -0
- package/yoga/yoga/YGMacros.h +101 -0
- package/yoga/yoga/YGNode.cpp +407 -0
- package/yoga/yoga/YGNode.h +373 -0
- package/yoga/yoga/YGNodeLayout.cpp +100 -0
- package/yoga/yoga/YGNodeLayout.h +43 -0
- package/yoga/yoga/YGNodeStyle.cpp +774 -0
- package/yoga/yoga/YGNodeStyle.h +243 -0
- package/yoga/yoga/YGPixelGrid.cpp +22 -0
- package/yoga/yoga/YGPixelGrid.h +29 -0
- package/yoga/yoga/YGValue.cpp +20 -0
- package/yoga/yoga/YGValue.h +83 -0
- package/yoga/yoga/Yoga.h +21 -0
- package/yoga/yoga/algorithm/AbsoluteLayout.cpp +595 -0
- package/yoga/yoga/algorithm/AbsoluteLayout.h +41 -0
- package/yoga/yoga/algorithm/Align.h +83 -0
- package/yoga/yoga/algorithm/Baseline.cpp +78 -0
- package/yoga/yoga/algorithm/Baseline.h +21 -0
- package/yoga/yoga/algorithm/BoundAxis.h +79 -0
- package/yoga/yoga/algorithm/Cache.cpp +121 -0
- package/yoga/yoga/algorithm/Cache.h +30 -0
- package/yoga/yoga/algorithm/CalculateLayout.cpp +2968 -0
- package/yoga/yoga/algorithm/CalculateLayout.h +60 -0
- package/yoga/yoga/algorithm/FlexDirection.h +120 -0
- package/yoga/yoga/algorithm/FlexLine.cpp +124 -0
- package/yoga/yoga/algorithm/FlexLine.h +75 -0
- package/yoga/yoga/algorithm/PixelGrid.cpp +138 -0
- package/yoga/yoga/algorithm/PixelGrid.h +29 -0
- package/yoga/yoga/algorithm/SizingMode.h +73 -0
- package/yoga/yoga/algorithm/TrailingPosition.h +44 -0
- package/yoga/yoga/config/Config.cpp +135 -0
- package/yoga/yoga/config/Config.h +93 -0
- package/yoga/yoga/debug/AssertFatal.cpp +54 -0
- package/yoga/yoga/debug/AssertFatal.h +29 -0
- package/yoga/yoga/debug/Log.cpp +107 -0
- package/yoga/yoga/debug/Log.h +34 -0
- package/yoga/yoga/enums/Align.h +49 -0
- package/yoga/yoga/enums/BoxSizing.h +40 -0
- package/yoga/yoga/enums/Dimension.h +40 -0
- package/yoga/yoga/enums/Direction.h +41 -0
- package/yoga/yoga/enums/Display.h +42 -0
- package/yoga/yoga/enums/Edge.h +47 -0
- package/yoga/yoga/enums/Errata.h +43 -0
- package/yoga/yoga/enums/ExperimentalFeature.h +40 -0
- package/yoga/yoga/enums/FlexDirection.h +42 -0
- package/yoga/yoga/enums/GridTrackType.h +43 -0
- package/yoga/yoga/enums/Gutter.h +41 -0
- package/yoga/yoga/enums/Justify.h +48 -0
- package/yoga/yoga/enums/LogLevel.h +44 -0
- package/yoga/yoga/enums/MeasureMode.h +41 -0
- package/yoga/yoga/enums/NodeType.h +40 -0
- package/yoga/yoga/enums/Overflow.h +41 -0
- package/yoga/yoga/enums/PhysicalEdge.h +21 -0
- package/yoga/yoga/enums/PositionType.h +41 -0
- package/yoga/yoga/enums/Unit.h +45 -0
- package/yoga/yoga/enums/Wrap.h +41 -0
- package/yoga/yoga/enums/YogaEnums.h +84 -0
- package/yoga/yoga/event/event.cpp +89 -0
- package/yoga/yoga/event/event.h +131 -0
- package/yoga/yoga/module.modulemap +21 -0
- package/yoga/yoga/node/CachedMeasurement.h +53 -0
- package/yoga/yoga/node/LayoutResults.cpp +48 -0
- package/yoga/yoga/node/LayoutResults.h +136 -0
- package/yoga/yoga/node/LayoutableChildren.h +148 -0
- package/yoga/yoga/node/Node.cpp +509 -0
- package/yoga/yoga/node/Node.h +372 -0
- package/yoga/yoga/numeric/Comparison.h +81 -0
- package/yoga/yoga/numeric/FloatOptional.h +84 -0
- package/yoga/yoga/style/GridLine.h +53 -0
- package/yoga/yoga/style/GridStyle.h +80 -0
- package/yoga/yoga/style/GridTrack.h +63 -0
- package/yoga/yoga/style/SmallValueBuffer.h +133 -0
- package/yoga/yoga/style/Style.h +932 -0
- package/yoga/yoga/style/StyleLength.h +121 -0
- package/yoga/yoga/style/StyleSizeLength.h +152 -0
- package/yoga/yoga/style/StyleValueHandle.h +114 -0
- package/yoga/yoga/style/StyleValuePool.h +194 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "jni.h"
|
|
9
|
+
|
|
10
|
+
namespace YGJNIVanilla {
|
|
11
|
+
void registerNatives(JNIEnv* env);
|
|
12
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <map>
|
|
11
|
+
#include <vector>
|
|
12
|
+
|
|
13
|
+
#include <yoga/Yoga.h>
|
|
14
|
+
|
|
15
|
+
#include "common.h"
|
|
16
|
+
#include "jni.h"
|
|
17
|
+
|
|
18
|
+
class PtrJNodeMapVanilla {
|
|
19
|
+
std::map<YGNodeConstRef, jsize> ptrsToIdxs_{};
|
|
20
|
+
jobjectArray javaNodes_{};
|
|
21
|
+
|
|
22
|
+
public:
|
|
23
|
+
PtrJNodeMapVanilla() = default;
|
|
24
|
+
|
|
25
|
+
PtrJNodeMapVanilla(jlongArray javaNativePointers, jobjectArray javaNodes)
|
|
26
|
+
: javaNodes_{javaNodes} {
|
|
27
|
+
using namespace facebook::yoga::vanillajni;
|
|
28
|
+
|
|
29
|
+
JNIEnv* env = getCurrentEnv();
|
|
30
|
+
jsize nativePointersSize = env->GetArrayLength(javaNativePointers);
|
|
31
|
+
std::vector<jlong> nativePointers(static_cast<size_t>(nativePointersSize));
|
|
32
|
+
env->GetLongArrayRegion(
|
|
33
|
+
javaNativePointers, 0, nativePointersSize, nativePointers.data());
|
|
34
|
+
|
|
35
|
+
for (jsize i = 0; i < nativePointersSize; ++i) {
|
|
36
|
+
ptrsToIdxs_[(YGNodeConstRef)nativePointers[static_cast<size_t>(i)]] = i;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
facebook::yoga::vanillajni::ScopedLocalRef<jobject> ref(YGNodeConstRef node) {
|
|
41
|
+
using namespace facebook::yoga::vanillajni;
|
|
42
|
+
|
|
43
|
+
JNIEnv* env = getCurrentEnv();
|
|
44
|
+
auto idx = ptrsToIdxs_.find(node);
|
|
45
|
+
if (idx == ptrsToIdxs_.end()) {
|
|
46
|
+
return ScopedLocalRef<jobject>(env);
|
|
47
|
+
} else {
|
|
48
|
+
return make_local_ref(
|
|
49
|
+
env, env->GetObjectArrayElement(javaNodes_, idx->second));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "YogaJniException.h"
|
|
9
|
+
#include <stdexcept>
|
|
10
|
+
#include <string>
|
|
11
|
+
#include "common.h"
|
|
12
|
+
|
|
13
|
+
namespace facebook::yoga::vanillajni {
|
|
14
|
+
|
|
15
|
+
YogaJniException::YogaJniException() {
|
|
16
|
+
jclass cl = getCurrentEnv()->FindClass("java/lang/RuntimeException");
|
|
17
|
+
static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId(
|
|
18
|
+
getCurrentEnv(), cl, "<init>", "()V");
|
|
19
|
+
auto throwable = getCurrentEnv()->NewObject(cl, methodId);
|
|
20
|
+
throwable_ =
|
|
21
|
+
newGlobalRef(getCurrentEnv(), static_cast<jthrowable>(throwable));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
YogaJniException::YogaJniException(jthrowable throwable) {
|
|
25
|
+
throwable_ = newGlobalRef(getCurrentEnv(), throwable);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
YogaJniException::YogaJniException(YogaJniException&& rhs) noexcept
|
|
29
|
+
: throwable_(std::move(rhs.throwable_)) {}
|
|
30
|
+
|
|
31
|
+
YogaJniException::YogaJniException(const YogaJniException& rhs) {
|
|
32
|
+
throwable_ = newGlobalRef(getCurrentEnv(), rhs.throwable_.get());
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
YogaJniException::~YogaJniException() {
|
|
36
|
+
try {
|
|
37
|
+
throwable_.reset();
|
|
38
|
+
} catch (...) {
|
|
39
|
+
std::terminate();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
ScopedLocalRef<jthrowable> YogaJniException::getThrowable() const noexcept {
|
|
44
|
+
return make_local_ref(
|
|
45
|
+
getCurrentEnv(),
|
|
46
|
+
static_cast<jthrowable>(getCurrentEnv()->NewLocalRef(throwable_.get())));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
} // namespace facebook::yoga::vanillajni
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include <stdexcept>
|
|
9
|
+
#include <string>
|
|
10
|
+
#include "common.h"
|
|
11
|
+
|
|
12
|
+
namespace facebook::yoga::vanillajni {
|
|
13
|
+
/**
|
|
14
|
+
* This class wraps a Java exception (jthrowable) into a C++ exception; A global
|
|
15
|
+
* reference to Java exception (jthrowable) is made so that the exception object
|
|
16
|
+
* does not gets cleared before jni call completion
|
|
17
|
+
*/
|
|
18
|
+
class YogaJniException : public std::exception {
|
|
19
|
+
public:
|
|
20
|
+
YogaJniException();
|
|
21
|
+
~YogaJniException() override;
|
|
22
|
+
|
|
23
|
+
explicit YogaJniException(jthrowable throwable);
|
|
24
|
+
|
|
25
|
+
YogaJniException(YogaJniException&& rhs) noexcept;
|
|
26
|
+
|
|
27
|
+
YogaJniException(const YogaJniException& rhs);
|
|
28
|
+
|
|
29
|
+
ScopedLocalRef<jthrowable> getThrowable() const noexcept;
|
|
30
|
+
|
|
31
|
+
private:
|
|
32
|
+
ScopedGlobalRef<jthrowable> throwable_;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
} // namespace facebook::yoga::vanillajni
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "common.h"
|
|
9
|
+
|
|
10
|
+
namespace facebook::yoga::vanillajni {
|
|
11
|
+
|
|
12
|
+
void registerNatives(
|
|
13
|
+
JNIEnv* env,
|
|
14
|
+
const char* className,
|
|
15
|
+
const JNINativeMethod methods[],
|
|
16
|
+
size_t numMethods) {
|
|
17
|
+
jclass clazz = env->FindClass(className);
|
|
18
|
+
|
|
19
|
+
assertNoPendingJniExceptionIf(env, clazz == nullptr);
|
|
20
|
+
|
|
21
|
+
auto result =
|
|
22
|
+
env->RegisterNatives(clazz, methods, static_cast<int32_t>(numMethods));
|
|
23
|
+
|
|
24
|
+
assertNoPendingJniExceptionIf(env, result != JNI_OK);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
jmethodID getStaticMethodId(
|
|
28
|
+
JNIEnv* env,
|
|
29
|
+
jclass clazz,
|
|
30
|
+
const char* methodName,
|
|
31
|
+
const char* methodDescriptor) {
|
|
32
|
+
jmethodID methodId =
|
|
33
|
+
env->GetStaticMethodID(clazz, methodName, methodDescriptor);
|
|
34
|
+
assertNoPendingJniExceptionIf(env, methodId == nullptr);
|
|
35
|
+
return methodId;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
jmethodID getMethodId(
|
|
39
|
+
JNIEnv* env,
|
|
40
|
+
jclass clazz,
|
|
41
|
+
const char* methodName,
|
|
42
|
+
const char* methodDescriptor) {
|
|
43
|
+
jmethodID methodId = env->GetMethodID(clazz, methodName, methodDescriptor);
|
|
44
|
+
assertNoPendingJniExceptionIf(env, methodId == nullptr);
|
|
45
|
+
return methodId;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
jfieldID getFieldId(
|
|
49
|
+
JNIEnv* env,
|
|
50
|
+
jclass clazz,
|
|
51
|
+
const char* fieldName,
|
|
52
|
+
const char* fieldSignature) {
|
|
53
|
+
jfieldID fieldId = env->GetFieldID(clazz, fieldName, fieldSignature);
|
|
54
|
+
assertNoPendingJniExceptionIf(env, fieldId == nullptr);
|
|
55
|
+
return fieldId;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
#define DEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jnitype, readableType) \
|
|
59
|
+
DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jnitype, readableType) { \
|
|
60
|
+
va_list args; \
|
|
61
|
+
va_start(args, methodId); \
|
|
62
|
+
jnitype result = env->Call##readableType##MethodV(obj, methodId, args); \
|
|
63
|
+
va_end(args); \
|
|
64
|
+
assertNoPendingJniException(env); \
|
|
65
|
+
return result; \
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
DEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jlong, Long);
|
|
69
|
+
DEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jfloat, Float);
|
|
70
|
+
|
|
71
|
+
DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(void, Void) {
|
|
72
|
+
va_list args;
|
|
73
|
+
va_start(args, methodId);
|
|
74
|
+
env->CallVoidMethodV(obj, methodId, args);
|
|
75
|
+
va_end(args);
|
|
76
|
+
assertNoPendingJniException(env);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
ScopedLocalRef<jobject>
|
|
80
|
+
callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...) {
|
|
81
|
+
va_list args;
|
|
82
|
+
va_start(args, methodId);
|
|
83
|
+
jobject result = env->CallStaticObjectMethodV(clazz, methodId, args);
|
|
84
|
+
va_end(args);
|
|
85
|
+
assertNoPendingJniExceptionIf(env, result == nullptr);
|
|
86
|
+
return make_local_ref(env, result);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
ScopedGlobalRef<jobject> newGlobalRef(JNIEnv* env, jobject obj) {
|
|
90
|
+
jobject result = env->NewGlobalRef(obj);
|
|
91
|
+
|
|
92
|
+
if (result == nullptr) {
|
|
93
|
+
logErrorMessageAndDie("Could not obtain global reference from object");
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return make_global_ref(result);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
ScopedGlobalRef<jthrowable> newGlobalRef(JNIEnv* env, jthrowable obj) {
|
|
100
|
+
auto result = static_cast<jthrowable>(env->NewGlobalRef(obj));
|
|
101
|
+
|
|
102
|
+
if (result == nullptr) {
|
|
103
|
+
logErrorMessageAndDie("Could not obtain global reference from object");
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return make_global_ref(result);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
} // namespace facebook::yoga::vanillajni
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
#include "ScopedGlobalRef.h"
|
|
10
|
+
#include "ScopedLocalRef.h"
|
|
11
|
+
|
|
12
|
+
namespace facebook::yoga::vanillajni {
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Registers a set of methods for a JNI class. Aborts if registration fails.
|
|
16
|
+
*/
|
|
17
|
+
void registerNatives(
|
|
18
|
+
JNIEnv* env,
|
|
19
|
+
const char* className,
|
|
20
|
+
const JNINativeMethod methods[],
|
|
21
|
+
size_t numMethods);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Returns a jmethodID for a class static method. Aborts if any error happens.
|
|
25
|
+
*/
|
|
26
|
+
jmethodID getStaticMethodId(
|
|
27
|
+
JNIEnv* env,
|
|
28
|
+
jclass clazz,
|
|
29
|
+
const char* methodName,
|
|
30
|
+
const char* methodDescriptor);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Returns a jmethodID for a class non-static method. Aborts if any error
|
|
34
|
+
* happens.
|
|
35
|
+
*/
|
|
36
|
+
jmethodID getMethodId(
|
|
37
|
+
JNIEnv* env,
|
|
38
|
+
jclass clazz,
|
|
39
|
+
const char* methodName,
|
|
40
|
+
const char* methodDescriptor);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Returns a class non-static field ID. Aborts if any error happens.
|
|
44
|
+
*/
|
|
45
|
+
jfieldID getFieldId(
|
|
46
|
+
JNIEnv* env,
|
|
47
|
+
jclass clazz,
|
|
48
|
+
const char* fieldName,
|
|
49
|
+
const char* fieldSignature);
|
|
50
|
+
|
|
51
|
+
// Helper methods to call a non-static method on an object depending on the
|
|
52
|
+
// return type. Each method will abort the execution if an error
|
|
53
|
+
// (such as a Java pending exception) is detected after invoking the
|
|
54
|
+
// Java method.
|
|
55
|
+
#define DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jnitype, readableType) \
|
|
56
|
+
jnitype call##readableType##Method( \
|
|
57
|
+
JNIEnv* env, jobject obj, jmethodID methodId, ...)
|
|
58
|
+
DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(void, Void);
|
|
59
|
+
DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jlong, Long);
|
|
60
|
+
DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jfloat, Float);
|
|
61
|
+
|
|
62
|
+
ScopedLocalRef<jobject>
|
|
63
|
+
callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Given a local or a global reference, this method creates a new global
|
|
67
|
+
* reference out of it. If any error happens, aborts the process.
|
|
68
|
+
*/
|
|
69
|
+
ScopedGlobalRef<jobject> newGlobalRef(JNIEnv* env, jobject obj);
|
|
70
|
+
|
|
71
|
+
ScopedGlobalRef<jthrowable> newGlobalRef(JNIEnv* env, jthrowable obj);
|
|
72
|
+
|
|
73
|
+
} // namespace facebook::yoga::vanillajni
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "corefunctions.h"
|
|
9
|
+
#include "YogaJniException.h"
|
|
10
|
+
#include "macros.h"
|
|
11
|
+
|
|
12
|
+
namespace facebook::yoga::vanillajni {
|
|
13
|
+
|
|
14
|
+
namespace {
|
|
15
|
+
JavaVM* globalVm = nullptr;
|
|
16
|
+
struct JavaVMInitializer {
|
|
17
|
+
explicit JavaVMInitializer(JavaVM* vm) {
|
|
18
|
+
if (!vm) {
|
|
19
|
+
logErrorMessageAndDie(
|
|
20
|
+
"You cannot pass a NULL JavaVM to ensureInitialized");
|
|
21
|
+
}
|
|
22
|
+
globalVm = vm;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
} // namespace
|
|
26
|
+
|
|
27
|
+
jint ensureInitialized(JNIEnv** env, JavaVM* vm) {
|
|
28
|
+
static JavaVMInitializer init(vm);
|
|
29
|
+
|
|
30
|
+
if (env == nullptr) {
|
|
31
|
+
logErrorMessageAndDie(
|
|
32
|
+
"Need to pass a valid JNIEnv pointer to vanillajni initialization "
|
|
33
|
+
"routine");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (vm->GetEnv(reinterpret_cast<void**>(env), JNI_VERSION_1_6) != JNI_OK) {
|
|
37
|
+
logErrorMessageAndDie(
|
|
38
|
+
"Error retrieving JNIEnv during initialization of vanillajni");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return JNI_VERSION_1_6;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// TODO why we need JNIEXPORT for getCurrentEnv ?
|
|
45
|
+
JNIEXPORT JNIEnv* getCurrentEnv() {
|
|
46
|
+
JNIEnv* env = nullptr;
|
|
47
|
+
jint ret = globalVm->GetEnv((void**)&env, JNI_VERSION_1_6);
|
|
48
|
+
if (ret != JNI_OK) {
|
|
49
|
+
logErrorMessageAndDie(
|
|
50
|
+
"There was an error retrieving the current JNIEnv. Make sure the "
|
|
51
|
+
"current thread is attached");
|
|
52
|
+
}
|
|
53
|
+
return env;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
void logErrorMessageAndDie(const char* message) {
|
|
57
|
+
(void)message;
|
|
58
|
+
VANILLAJNI_LOG_ERROR(
|
|
59
|
+
"VanillaJni",
|
|
60
|
+
"Aborting due to error detected in native code: %s",
|
|
61
|
+
message);
|
|
62
|
+
VANILLAJNI_DIE();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
void assertNoPendingJniException(JNIEnv* env) {
|
|
66
|
+
if (env->ExceptionCheck() == JNI_FALSE) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
auto throwable = env->ExceptionOccurred();
|
|
71
|
+
if (throwable == nullptr) {
|
|
72
|
+
logErrorMessageAndDie("Unable to get pending JNI exception.");
|
|
73
|
+
}
|
|
74
|
+
env->ExceptionClear();
|
|
75
|
+
throw YogaJniException(throwable);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
void assertNoPendingJniExceptionIf(JNIEnv* env, bool condition) {
|
|
79
|
+
if (!condition) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (env->ExceptionCheck() == JNI_TRUE) {
|
|
84
|
+
assertNoPendingJniException(env);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
throw YogaJniException();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
} // namespace facebook::yoga::vanillajni
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <jni.h>
|
|
11
|
+
#include <cstddef>
|
|
12
|
+
|
|
13
|
+
namespace facebook::yoga::vanillajni {
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* This method has to be called before using the vanillajni library. This method
|
|
17
|
+
* is typically called when doing initialization in the "on load" JNI hook of a
|
|
18
|
+
* particular library.
|
|
19
|
+
*
|
|
20
|
+
* This method is thread safe, and after the first time it's called it has no
|
|
21
|
+
* initialization effect.
|
|
22
|
+
*
|
|
23
|
+
* @param env use this output parameter to get a JNIEnv to use for things such
|
|
24
|
+
* as registering native methods and such.
|
|
25
|
+
* @param vm the VM instance passed by JNI. This is usually the VM instance
|
|
26
|
+
* that is passed to the "on load" JNI hook.
|
|
27
|
+
* @return an integer value to return from the "on load" hook.
|
|
28
|
+
*/
|
|
29
|
+
jint ensureInitialized(JNIEnv** env, JavaVM* vm);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Returns a JNIEnv* suitable for the current thread. If the current thread is
|
|
33
|
+
* not attached to the Java VM, this method aborts execution.
|
|
34
|
+
*/
|
|
35
|
+
JNIEnv* getCurrentEnv();
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Logs an error message and aborts the current process.
|
|
39
|
+
*/
|
|
40
|
+
void logErrorMessageAndDie(const char* message);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Checks whether there is a pending JNI exception. If so, it logs an error
|
|
44
|
+
* message and aborts the current process. Otherwise it does nothing.
|
|
45
|
+
*/
|
|
46
|
+
void assertNoPendingJniException(JNIEnv* env);
|
|
47
|
+
|
|
48
|
+
void assertNoPendingJniExceptionIf(JNIEnv* env, bool condition);
|
|
49
|
+
|
|
50
|
+
} // namespace facebook::yoga::vanillajni
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <cstdlib>
|
|
11
|
+
|
|
12
|
+
#ifdef __ANDROID__
|
|
13
|
+
#include <android/log.h>
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
#ifdef __ANDROID__
|
|
17
|
+
#define VANILLAJNI_LOG_ERROR(tag, format, ...) \
|
|
18
|
+
__android_log_print(ANDROID_LOG_ERROR, tag, format, ##__VA_ARGS__)
|
|
19
|
+
#else
|
|
20
|
+
#define VANILLAJNI_LOG_ERROR(tag, format, ...)
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
#define VANILLAJNI_DIE() std::abort()
|