Spec: ACC_MANDATED
Alex Buckley
alex.buckley at oracle.com
Fri Nov 22 20:04:00 UTC 2019
(This question was asked internally, and it wasn't clear if it was about
JEP 359 (Records) specifically or ACC_MANDATED more broadly. Since the
question is being driven by JEP 359 changes, and since JEP 359 is in any
case the next feature which will change the JVMS, let's discuss on
amber-spec-experts, NOT on compiler-dev. I have REMOVED compiler-dev
from the header.)
On 11/22/2019 11:22 AM, Leonid Kuskov wrote:
> So specification allows RI to mark final fields associated with
> components and some methods by ACC_MANDATED flag (0x8000). The latest
> JVMS specification
> (https://docs.oracle.com/javase/specs/jvms/se13/html/index.html) permits
> this flag only for 2 attributes: MethodParameters_attribute,
> Module_attribute . The flag is not mentioned in both tables: Table
> 4.5-A. "Field access and property flags", Table 4.6-A. "Method access
> and property flags".
...
> Does it make sense to add a definition of ACC_MANDATED to the tables?
Good question. The mask 0x8000 is presently defined as ACC_MODULE in
ClassFile.access_flags, but it would be legitimate to define the same
mask as ACC_MANDATED in {field_info,method_info}.access_flags. This
would mirror the situation for the mask 0x0020, which is defined as
ACC_SUPER in ClassFile.access_flags but defined as ACC_SYNCHRONIZED in
method_info.access_flags. I'm sure we have discussed ACC_MANDATED before
so I'm not sure why the JEP 359 JVMS draft is silent on the matter.
> And:
>
> Earlier the spec stated that the Enum.values() and Enum.valueOf() are
> exceptions to the requirement that a class member that does not appear
> in the source code must be marked using a Synthetic attribute, or have
> its ACC_SYNTHETIC flag set.
> Now names of methods are removed and the more loose statement "mandated
> members of enums and records" is used. Does it mean that spec won't
> enumerate "mandated" methods anymore?
JVMS 4.7.8 should cross-ref to all JLS sections which define mandated
members. JVMS 4.7.8 should not list them explicitly. (There are numerous
"JLS §..." cross-refs in JVMS ch.4, they are quite legitimate.)
> And the setting of this flag will be implementation-specific?
No, the presence of mandated members is JLS-defined. Search for
"mandated" in JLS 13.1 to dispel any notion that mandated members are
implementation-specific.
> Should the JCK signature test take into account the ACC_MANDATED flag?
If ACC_MANDATED is added to {field_info,method_info}.access_flags, then
yes, its presence on certain members of enum and record types is required.
Alex
More information about the amber-spec-experts
mailing list