JDK-8160200 : 4.7.6: Acknowledge that ACC_FINAL may be implicit
  • Type: Bug
  • Component: specification
  • Sub-Component: vm
  • Affected Version: 8
  • Priority: P5
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2016-06-23
  • Updated: 2018-08-03
  • Resolved: 2016-09-28
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9Fixed
Related Reports
Relates :  
Description
JVMS 4.7.6 provides the interpretation of 'inner_class_access_flags' in a table, 4.7.6-A.  Many interpretations mimic ACC_PUBLIC:

"Marked or implicitly public in source."

But ACC_FINAL does not acknowledge that some classes may be implicitly 'final':

"Marked final in source."

This is almost certainly an oversight -- the only implicitly-final classes are anonymous classes, per JLS 15.9.5.  But they exist, and there's not a good reason to prohibit them from being marked as such in the 'inner_class_access_flags' attribute.

Note that the class's 'access_flags', JVMS 4.1 (table 4.1-A), doesn't bother with this "marked" vs. "implicitly" distinction, because it is not concerned with Java sources.  Instead, it uses "declared" in the sense that the class file itself declares properties: e.g., "declared synthetic".
Comments
Proposed fix to JVMS 4.7.6 is trivial: "Marked ***or implicitly*** final in source."
23-06-2016