RFR: 7903612: Nested struct typedefs fail to compile [v2]

Jorn Vernee jvernee at openjdk.org
Fri Dec 15 10:37:08 UTC 2023


On Fri, 15 Dec 2023 10:29:20 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> This PR fixes a small issue with nested struct typedef, and another with typedef in general:
>> 
>> * nested struct classes are emitted with the `final` modifier, which prevents them from being subclassed (e.g. in typedefs)
>> * all structs have a private constructor to prevent clients from instantiating. Unfortunately this constructor also prevents subclassing (e.g. in typedef).
>> 
>> This patch drops the `final` modifier on nested struct/unions, and also tweaks the default constructor from `private` to `protected`.
>
> Maurizio Cimadamore has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Add missing copyright

We also don't generate a private constructor for top-level struct classes, but, if we make the constructor `protected` we could generate them there as well. Same for the header classes I think.

If we stick with these constructors, I think it would also be better to make them package-private. That would mean that someone couldn't extend one of these classes from outside of the package (since there's no way to call the super constructor). A practical replacement for the class being `final`.

Alternatively, we could just not have any explicit constructors/final classes. Since all the methods we generate are `static`, there's probably not that much utility to them. Though, I suppose someone might get confused trying to instantiate one of these classes...

-------------

Marked as reviewed by jvernee (Committer).

PR Review: https://git.openjdk.org/jextract/pull/164#pullrequestreview-1783554772


More information about the jextract-dev mailing list