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