RFR: 8255560: Class::isRecord should check that the current class is final and not abstract [v5]

Chris Hegarty chegar at openjdk.java.net
Mon Dec 7 09:57:24 UTC 2020


> Update Class::isRecord to only return true for classes that are final.
> 
> The removal of non-specified JVM checks on classes with a Record Attribute (see JDK-8255342), has resulted in more types of loadable classes that may contain a Record Attribute. Since these checks are not performed by the JVM anymore, Class::isRecord, and by extension Class::getRecordComponents, may return true or component values, respectively, for classes that are not well-formed record classes (as per the JLS), .e.g. non-final or abstract classes, that contain a record Attribute.
> 
> Core Reflection, Class::isRecord, already asserts checks that the JVM does not, e.g. that the direct superclass is java.lang.Record. Some points from the Java Language Specification for record classes:
> 
>  1. It is a compile-time error if a record declaration has the modifier abstract.
>  2. A record declaration is implicitly final.
>  3. The direct superclass type of a record class is Record.
> 
> Class::isRecord already ensures no.3. This issue proposes to add explicit checks in Core Reflection to ensure no.1 and no.2, since the JVM now allows such classes that contain a Record Attribute to be loaded.

Chris Hegarty has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains six commits:

 - Remove unused test helper method
 - Merge branch 'master' into isRecord
 - fix issue in ByteCodeLoader
 - review comments
 - Mandy's review comments
 - Initial changes for 8255560
   Class::isRecord should check that the current class is final and not abstract

-------------

Changes: https://git.openjdk.java.net/jdk/pull/1543/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1543&range=04
  Stats: 230 lines in 3 files changed: 208 ins; 3 del; 19 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1543.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1543/head:pull/1543

PR: https://git.openjdk.java.net/jdk/pull/1543


More information about the core-libs-dev mailing list