On Tue, 1 Dec 2020 20:13:14 GMT, Chris Hegarty <che...@openjdk.org> wrote:
>> 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 incrementally with one additional > commit since the last revision: > > Mandy's review comments `{@link ... final}` should be `@linkplain`. Otherwise, looks good. ------------- Marked as reviewed by mchung (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/1543