Repository navigation
JNI: avoid enum case record names that collide with enclosing types - #7
Merged
Merged
Conversation
teamhimeh
force-pushed
the
codex/fix-jni-enum-case-name-collisions
branch
from
October 23, 2026 07:58
0989f3a to
1e8ce49
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
JNI enum extraction capitalizes each Swift case name to generate a nested Java record. That record can have the same name as its enum, another enclosing type, or the generated
Caseinterface. Java rejects these declarations because a nested type cannot share an enclosing type's name.For example:
Previously, this generated a record named
MessageinsideMessage.Case, which fails Java compilation. With this change, the record is namedMessageCase, and its payload accessor is consistently namedgetAsMessageCase():Changes
Caseto a conflicting record name until it differs from every enclosing Swift type name and the generatedCaseinterface.Validation
swift test --disable-experimental-prebuilts --disable-sandbox --filter JNIEnumTests: 11 tests passed../gradlew :Samples:SwiftJavaExtractJNISampleApp:test --no-daemon: all 287 Java tests passed with no failures or skips, including the new payload round trips.swift-formatandgit diff --checkpassed.Tested with Apple Swift 6.4 and JetBrains Runtime 25 on macOS.