jextract: fix protocols that return java classes. #479
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.
If you had the following swift code:
we would previously generate the interface as
however, the class would be generated as:
that means that
MySwiftClassdoes not implementMyProtocol, because we don't generate the arena parameter for interfaces.The reason we do not do this, is because of #449 - where when Swift wants to call a Java interface, we don't pass a specific arena, but rather just use a global arena when we need it.
The change
Instead, we now generate interfaces with their full method signature, including arenas. And then we generate
defaultmethods that use the global arena, if we have enabled the java callbacks feature.With this change, this also means you can make sure that the underlying classes actually use the arena you pass to the interface function: