Proposal: #ClassFileAccModule
mark.reinhold at oracle.com
mark.reinhold at oracle.com
Tue Nov 22 16:48:35 UTC 2016
Issue summary
-------------
#ClassFileAccModule --- The `ACC_MODULE` constant is currently
specified to have the value 0x8000. This is the last available bit
remaining across all of the various `access_flags` fields of a class
file, and thus should be reserved for some unspecified future purpose
where it may be useful to use the same value in all such fields.
Alternative candidates for `ACC_MODULE` include 0x0040 (overlaps with
`ACC_VOLATILE` and `ACC_BRIDGE`) and 0x0080 (`ACC_TRANSIENT` and
`ACC_VARARGS`). [1]
Proposal
--------
Do not change the value of this constant.
The high-order bits of the `access_flags` field have long been used to
characterize the unusual, non-class nature of some class files:
- `ACC_ANNOTATION` (0x2000) indicates an annotation type, even though
`ACC_ANNOTATION` does not apply to fields or methods, and
- `ACC_ENUM` (0x4000) indicates an `enum` type, even though `ACC_ENUM`
does not apply to methods.
A binary module descriptor is a new kind of unusual class file, hence we
have done the obvious thing and allocated the high-order bit 0x8000 for
`ACC_MODULE`.
We could try to be more clever here, but that would require attempting
to predict the future. There are still plenty of other ways to encode
potential future features; a value class could, e.g., be indicated by
0x0100. In the worst case the `access_flags` field could simply be made
wider in some future version of the class-file specification.
[1] http://openjdk.java.net/projects/jigsaw/spec/issues/#ClassFileAccModule
More information about the jpms-spec-experts
mailing list