Spec: ACC_MANDATED

Brian Goetz brian.goetz at oracle.com
Fri Nov 22 23:30:58 UTC 2019


The original intent was not to introduce ACC_MANDATED to 
{field,method}_info or apply it to the constructor, field, or accessors; 
we saw no reason to do so other than pedantic-ness.

If javac is generating the flag on fields and methods, I would prefer to 
treat that as a bug.

On 11/22/2019 3:24 PM, Alex Buckley wrote:
> On 11/22/2019 12:10 PM, Jonathan Gibbons wrote:
>> Could someone also specify definitively the behavior when a user 
>> chooses to explicitly define a method, such as `equals` or `hashCode` 
>> for a record.   In other words, just because a method may be mandated 
>> in JLS, I'm expecting that this does not imply the use of 
>> ACC_MANDATED in those situations where the user explicitly defines 
>> the method.
>
> Right, a "mandated" method is one created by the compiler because the 
> JLS mandated (i.e. forced) the presence of the method if it wasn't 
> explicitly declared in source code. If it was explicitly declared in 
> source code, then it's not created by the compiler and is "just" an 
> ordinary unflagged method (not synthetic, not mandated). This should 
> all follow from 
> http://cr.openjdk.java.net/~gbierman/jep359/jep359-20191121/specs/records-jls.html#jls-13.1 
> ... BTW, I see "Certain private fields and public methods of record 
> types (8.10.3)" are not marked as mandated so I guess we're not 
> introducing ACC_MANDATED to {field_info,method_info}.access_flags 
> after all.
>
> JCK tests which check the mapping from source code to class file can 
> check that an explicitly declared method is neither ACC_MANDATED nor 
> ACC_SYNTHETIC, and that source code without an explicitly declared 
> method gets a method which is ACC_MANDATED and not ACC_SYNTHETIC.
>
> Alex



More information about the amber-spec-experts mailing list