Fields and methods of a record are marked MANDATED
forax at univ-mlv.fr
Thu Oct 10 18:33:50 UTC 2019
----- Mail original -----
> De: "Alex Buckley" <alex.buckley at oracle.com>
> À: "amber-spec-experts" <amber-spec-experts at openjdk.java.net>
> Envoyé: Jeudi 10 Octobre 2019 19:41:31
> Objet: Re: Fields and methods of a record are marked MANDATED
> Enum types are specified such that a `values` method is always
> implicitly declared. (If you declare one explicitly, you have two method
> declarations with override-equivalent signatures, which is an error per
> JLS 8.4.) Accordingly, the corresponding method in the class file should
> always be marked as mandated. Sadly we don't have room for an
> ACC_MANDATED flag in `method_info`, but morally the method is mandated
> and Core Reflection should expose that fact.
ACC_MANDATED is 0x8000 so you can use it on methods.
But not on class because it's ACC_MODULE.
> On 10/10/2019 9:09 AM, Brian Goetz wrote:
>> Under that interpretation, that leaves record members in a funny place, since a
>> given mandated member (e.g., an accessor for a component) _might_ have been
>> explicit in the source, or might not have been. Should ACC_MANDATED describe
>> the member descriptor (“spec mandates a member with this descriptor”) or only
>> the implementation (“the source didn’t have it, but its here in the byte
>> code”)? In the latter interpretation, the presence of ACC_MANDATED on a
>> mandated member would basically be random, based on implementation-of-the-day,
>> which seems wrong.
>>> On Oct 10, 2019, at 12:06 PM, Joe Darcy <joe.darcy at oracle.com> wrote:
>>> A mandated construct is one that is mandated by the specification, but not
>>> explicitly declared. Constructs of that sort have been in the platform since
>>> the beginning, such as default constructors. ACC_MANDATED was added to the
>>> platform only more recently and has some exposure through javax.lang.model.
>>> I recommend going forward ACC_MANDATED to be used more widely, on all the
>>> mandated structures, including the values methods on enum types, etc.
>>> On 10/10/2019 8:50 AM, Brian Goetz wrote:
>>>> We should match the behavior of methods like `Enum::values`.
>>>>> On Oct 10, 2019, at 10:15 AM, Remi Forax <forax at univ-mlv.fr> wrote:
>>>>> Hi all,
>>>>> fields and methods of a record are marked ACC_MANDATED which contradict JLS
>>>>> 13.1.12 that explains that you can not use ACC_MANDATED on field and method.
More information about the amber-spec-experts