Spec: ACC_MANDATED

Alex Buckley alex.buckley at oracle.com
Fri Nov 22 20:24:21 UTC 2019


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