Migrate YogaProps to Kotlin #1844

Open
mateoguzmana wants to merge 3 commits from mateoguzmana/feat/yoga-props into main
mateoguzmana commented 2025-08-07 16:02:33 -07:00 (Migrated from github.com)

Migrate com.facebook.yoga.YogaProps to Kotlin.

Test plan:

RN

yarn android
yarn test-android

Yoga

./gradlew :yoga:assembleDebug
Migrate com.facebook.yoga.YogaProps to Kotlin. **Test plan:** RN ```sh yarn android yarn test-android ``` Yoga ```sh ./gradlew :yoga:assembleDebug ```
cortinico (Migrated from github.com) reviewed 2025-08-07 16:02:33 -07:00
vercel[bot] commented 2025-08-07 16:02:37 -07:00 (Migrated from github.com)

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
yoga-website Ready Preview Comment Aug 15, 2025 4:55am
[vc]: #Ajx7I5fw9dc/ujrx+RCI8ILcwC021bT4Vct7tPqUqAc=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJ5b2dhLXdlYnNpdGUiLCJyb290RGlyZWN0b3J5Ijoid2Vic2l0ZSIsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9mYm9wZW5zb3VyY2UveW9nYS13ZWJzaXRlL0U0bWRhNXFMQXM1WllKQ3Z5eVlIZVJBb3RLRWMiLCJwcmV2aWV3VXJsIjoieW9nYS13ZWJzaXRlLWdpdC1mb3JrLW1hdGVvZ3V6bWFuYS1mZWF0LXlvZ2EtcHJvcHMtZmJvcGVuc291cmNlLnZlcmNlbC5hcHAiLCJuZXh0Q29tbWl0U3RhdHVzIjoiREVQTE9ZRUQiLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoieW9nYS13ZWJzaXRlLWdpdC1mb3JrLW1hdGVvZ3V6bWFuYS1mZWF0LXlvZ2EtcHJvcHMtZmJvcGVuc291cmNlLnZlcmNlbC5hcHAifX1dfQ== **The latest updates on your projects**. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more). | Project | Deployment | Preview | Comments | Updated (UTC) | | :--- | :----- | :------ | :------- | :------ | | [yoga-website](https://vercel.com/fbopensource/yoga-website) | ✅ [Ready](https://vercel.com/fbopensource/yoga-website/E4mda5qLAs5ZYJCvyyYHeRAotKEc) | [Preview](https://yoga-website-git-fork-mateoguzmana-feat-yoga-props-fbopensource.vercel.app) | [**Comment**](https://vercel.live/open-feedback/yoga-website-git-fork-mateoguzmana-feat-yoga-props-fbopensource.vercel.app?via=pr-comment-feedback-link) | Aug 15, 2025 4:55am |
facebook-github-bot commented 2025-08-08 09:20:54 -07:00 (Migrated from github.com)

@cortinico has imported this pull request. If you are a Meta employee, you can view this in D79897771.

@cortinico has imported this pull request. If you are a Meta employee, you can view this in [D79897771](https://www.internalfb.com/diff/D79897771?dst_version_fbid=1256901115672072).
facebook-github-bot commented 2025-08-11 09:51:35 -07:00 (Migrated from github.com)

@cortinico has imported this pull request. If you are a Meta employee, you can view this in D79897771.

@cortinico has imported this pull request. If you are a Meta employee, you can view this in [D79897771](https://www.internalfb.com/diff/D79897771?dst_version_fbid=1256901115672072).
cortinico commented 2025-08-12 03:39:43 -07:00 (Migrated from github.com)

This is breaking a bunch of stuff internally because is made in a breaking manner.

Here an example of what breaks.
Source is from Litho: 55e28e5893/litho-core/src/main/java/com/facebook/litho/DebugLayoutNode.kt (L4)

./DebugLayoutNode.kt:71:34: error: unresolved reference: styleDirection
    get() = result.getYogaNode().styleDirection
                                 ^^^^^^^^^^^^^^
./DebugLayoutNode.kt:74:34: error: unresolved reference: flexDirection
    get() = result.getYogaNode().flexDirection
                                 ^^^^^^^^^^^^^
./DebugLayoutNode.kt:77:34: error: unresolved reference: justifyContent
    get() = result.getYogaNode().justifyContent
                                 ^^^^^^^^^^^^^^
./DebugLayoutNode.kt:80:34: error: unresolved reference: alignItems
    get() = result.getYogaNode().alignItems
                                 ^^^^^^^^^^
./DebugLayoutNode.kt:83:34: error: unresolved reference: alignSelf
    get() = result.getYogaNode().alignSelf
                                 ^^^^^^^^^
./DebugLayoutNode.kt:86:34: error: unresolved reference: alignContent
    get() = result.getYogaNode().alignContent
                                 ^^^^^^^^^^^^
./DebugLayoutNode.kt:89:34: error: unresolved reference: positionType
    get() = result.getYogaNode().positionType
                                 ^^^^^^^^^^^^
./DebugLayoutNode.kt:92:34: error: unresolved reference: flexGrow
    get() = result.getYogaNode().flexGrow
                                 ^^^^^^^^
./DebugLayoutNode.kt:95:34: error: unresolved reference: flexShrink
    get() = result.getYogaNode().flexShrink
                                 ^^^^^^^^^^
./DebugLayoutNode.kt:98:34: error: unresolved reference: flexBasis
    get() = result.getYogaNode().flexBasis
                                 ^^^^^^^^^
./DebugLayoutNode.kt:101:34: error: unresolved reference: width
    get() = result.getYogaNode().width
                                 ^^^^^
./DebugLayoutNode.kt:104:34: error: unresolved reference: minWidth
    get() = result.getYogaNode().minWidth
                                 ^^^^^^^^
./DebugLayoutNode.kt:107:34: error: unresolved reference: maxWidth
    get() = result.getYogaNode().maxWidth
                                 ^^^^^^^^
./DebugLayoutNode.kt:110:34: error: unresolved reference: height
    get() = result.getYogaNode().height
                                 ^^^^^^
./DebugLayoutNode.kt:113:34: error: unresolved reference: minHeight
    get() = result.getYogaNode().minHeight
                                 ^^^^^^^^^
./DebugLayoutNode.kt:116:34: error: unresolved reference: maxHeight
    get() = result.getYogaNode().maxHeight
                                 ^^^^^^^^^
./DebugLayoutNode.kt:119:34: error: unresolved reference: aspectRatio
    get() = result.getYogaNode().aspectRatio
                                 ^^^^^^^^^^^
./LithoYogaLayoutFunction.kt:91:44: error: unresolved reference: width
    if (YogaConstants.isUndefined(yogaRoot.width.value)) {
                                           ^^^^^
./LithoYogaLayoutFunction.kt:99:44: error: unresolved reference: height
    if (YogaConstants.isUndefined(yogaRoot.height.value)) {
                                           ^^^^^^
./LithoYogaLayoutFunction.kt:292:69: error: unresolved reference: width
    if (layoutResult.layoutOutput.widthFromStyle.compareTo(yogaNode.width.value) != 0) {
                                                                    ^^^^^
./LithoYogaLayoutFunction.kt:295:70: error: unresolved reference: height
    if (layoutResult.layoutOutput.heightFromStyle.compareTo(yogaNode.height.value) != 0) {
                                                                     ^^^^^^
./LithoYogaLayoutFunction.kt:301:11: error: unresolved reference: minWidth
      if (minWidth != targetValue) {
          ^^^^^^^^
./LithoYogaLayoutFunction.kt:304:11: error: unresolved reference: minHeight
      if (minHeight != targetValue) {
          ^^^^^^^^^
./LithoYogaLayoutFunction.kt:921:31: error: unresolved reference: flexDirection
    flexDirection?.let { node.flexDirection = it }
                              ^^^^^^^^^^^^^
./LithoYogaLayoutFunction.kt:922:32: error: unresolved reference: justifyContent
    justifyContent?.let { node.justifyContent = it }
                               ^^^^^^^^^^^^^^
./LithoYogaLayoutFunction.kt:923:30: error: unresolved reference: alignContent
    alignContent?.let { node.alignContent = it }
                             ^^^^^^^^^^^^
./LithoYogaLayoutFunction.kt:924:28: error: unresolved reference: alignItems
    alignItems?.let { node.alignItems = it }
                           ^^^^^^^^^^
./YogaLayoutProps.kt:105:10: error: unresolved reference: alignSelf
    node.alignSelf = alignSelf
         ^^^^^^^^^
./YogaLayoutProps.kt:113:10: error: unresolved reference: flexGrow
    node.flexGrow = flexGrow
         ^^^^^^^^
./YogaLayoutProps.kt:117:10: error: unresolved reference: flexShrink
    node.flexShrink = flexShrink
         ^^^^^^^^^^
./YogaLayoutProps.kt:129:10: error: unresolved reference: aspectRatio
    node.aspectRatio = aspectRatio
         ^^^^^^^^^^^
./YogaLayoutProps.kt:133:10: error: unresolved reference: positionType
    node.positionType = positionType
         ^^^^^^^^^^^^
./YogaLayoutProps.kt:185:10: error: unresolved reference: flexDirection
    node.flexDirection = direction
         ^^^^^^^^^^^^^
./YogaLayoutProps.kt:193:10: error: unresolved reference: justifyContent
    node.justifyContent = justify
         ^^^^^^^^^^^^^^
./YogaLayoutProps.kt:197:10: error: unresolved reference: alignItems
    node.alignItems = align
         ^^^^^^^^^^

Can you update this to use val so that it doesn't break with Litho?

This is breaking a bunch of stuff internally because is made in a breaking manner. Here an example of what breaks. Source is from Litho: https://github.com/facebook/litho/blob/55e28e58930a53133620fd32406ec8c3a9116c0c/litho-core/src/main/java/com/facebook/litho/DebugLayoutNode.kt#L4 ``` ./DebugLayoutNode.kt:71:34: error: unresolved reference: styleDirection get() = result.getYogaNode().styleDirection ^^^^^^^^^^^^^^ ./DebugLayoutNode.kt:74:34: error: unresolved reference: flexDirection get() = result.getYogaNode().flexDirection ^^^^^^^^^^^^^ ./DebugLayoutNode.kt:77:34: error: unresolved reference: justifyContent get() = result.getYogaNode().justifyContent ^^^^^^^^^^^^^^ ./DebugLayoutNode.kt:80:34: error: unresolved reference: alignItems get() = result.getYogaNode().alignItems ^^^^^^^^^^ ./DebugLayoutNode.kt:83:34: error: unresolved reference: alignSelf get() = result.getYogaNode().alignSelf ^^^^^^^^^ ./DebugLayoutNode.kt:86:34: error: unresolved reference: alignContent get() = result.getYogaNode().alignContent ^^^^^^^^^^^^ ./DebugLayoutNode.kt:89:34: error: unresolved reference: positionType get() = result.getYogaNode().positionType ^^^^^^^^^^^^ ./DebugLayoutNode.kt:92:34: error: unresolved reference: flexGrow get() = result.getYogaNode().flexGrow ^^^^^^^^ ./DebugLayoutNode.kt:95:34: error: unresolved reference: flexShrink get() = result.getYogaNode().flexShrink ^^^^^^^^^^ ./DebugLayoutNode.kt:98:34: error: unresolved reference: flexBasis get() = result.getYogaNode().flexBasis ^^^^^^^^^ ./DebugLayoutNode.kt:101:34: error: unresolved reference: width get() = result.getYogaNode().width ^^^^^ ./DebugLayoutNode.kt:104:34: error: unresolved reference: minWidth get() = result.getYogaNode().minWidth ^^^^^^^^ ./DebugLayoutNode.kt:107:34: error: unresolved reference: maxWidth get() = result.getYogaNode().maxWidth ^^^^^^^^ ./DebugLayoutNode.kt:110:34: error: unresolved reference: height get() = result.getYogaNode().height ^^^^^^ ./DebugLayoutNode.kt:113:34: error: unresolved reference: minHeight get() = result.getYogaNode().minHeight ^^^^^^^^^ ./DebugLayoutNode.kt:116:34: error: unresolved reference: maxHeight get() = result.getYogaNode().maxHeight ^^^^^^^^^ ./DebugLayoutNode.kt:119:34: error: unresolved reference: aspectRatio get() = result.getYogaNode().aspectRatio ^^^^^^^^^^^ ./LithoYogaLayoutFunction.kt:91:44: error: unresolved reference: width if (YogaConstants.isUndefined(yogaRoot.width.value)) { ^^^^^ ./LithoYogaLayoutFunction.kt:99:44: error: unresolved reference: height if (YogaConstants.isUndefined(yogaRoot.height.value)) { ^^^^^^ ./LithoYogaLayoutFunction.kt:292:69: error: unresolved reference: width if (layoutResult.layoutOutput.widthFromStyle.compareTo(yogaNode.width.value) != 0) { ^^^^^ ./LithoYogaLayoutFunction.kt:295:70: error: unresolved reference: height if (layoutResult.layoutOutput.heightFromStyle.compareTo(yogaNode.height.value) != 0) { ^^^^^^ ./LithoYogaLayoutFunction.kt:301:11: error: unresolved reference: minWidth if (minWidth != targetValue) { ^^^^^^^^ ./LithoYogaLayoutFunction.kt:304:11: error: unresolved reference: minHeight if (minHeight != targetValue) { ^^^^^^^^^ ./LithoYogaLayoutFunction.kt:921:31: error: unresolved reference: flexDirection flexDirection?.let { node.flexDirection = it } ^^^^^^^^^^^^^ ./LithoYogaLayoutFunction.kt:922:32: error: unresolved reference: justifyContent justifyContent?.let { node.justifyContent = it } ^^^^^^^^^^^^^^ ./LithoYogaLayoutFunction.kt:923:30: error: unresolved reference: alignContent alignContent?.let { node.alignContent = it } ^^^^^^^^^^^^ ./LithoYogaLayoutFunction.kt:924:28: error: unresolved reference: alignItems alignItems?.let { node.alignItems = it } ^^^^^^^^^^ ./YogaLayoutProps.kt:105:10: error: unresolved reference: alignSelf node.alignSelf = alignSelf ^^^^^^^^^ ./YogaLayoutProps.kt:113:10: error: unresolved reference: flexGrow node.flexGrow = flexGrow ^^^^^^^^ ./YogaLayoutProps.kt:117:10: error: unresolved reference: flexShrink node.flexShrink = flexShrink ^^^^^^^^^^ ./YogaLayoutProps.kt:129:10: error: unresolved reference: aspectRatio node.aspectRatio = aspectRatio ^^^^^^^^^^^ ./YogaLayoutProps.kt:133:10: error: unresolved reference: positionType node.positionType = positionType ^^^^^^^^^^^^ ./YogaLayoutProps.kt:185:10: error: unresolved reference: flexDirection node.flexDirection = direction ^^^^^^^^^^^^^ ./YogaLayoutProps.kt:193:10: error: unresolved reference: justifyContent node.justifyContent = justify ^^^^^^^^^^^^^^ ./YogaLayoutProps.kt:197:10: error: unresolved reference: alignItems node.alignItems = align ^^^^^^^^^^ ``` Can you update this to use val so that it doesn't break with Litho?
cortinico (Migrated from github.com) requested changes 2025-08-12 03:39:53 -07:00
cortinico (Migrated from github.com) left a comment

See my comment

See my comment
mateoguzmana commented 2025-08-14 22:07:53 -07:00 (Migrated from github.com)

Thanks! Could you please take a second pass? I updated the possible getters to vals in 19b96f586e.

Thanks! Could you please take a second pass? I updated the possible getters to vals in 19b96f586eac14ef4a81b9d95df38e3f93d7359e.
cortinico commented 2025-08-15 02:45:55 -07:00 (Migrated from github.com)

Landing this will be a bit more complicated that I thought. Leave it to me, I'll take care of it (we might have to resort to land the original version)

Landing this will be a bit more complicated that I thought. Leave it to me, I'll take care of it (we might have to resort to land the original version)
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin mateoguzmana/feat/yoga-props:mateoguzmana/feat/yoga-props
git checkout mateoguzmana/feat/yoga-props
Sign in to join this conversation.
No description provided.