RFR: 8255560: Class::isRecord should check that the current class is final and not abstract [v2]
Mandy Chung
mchung at openjdk.java.net
Tue Dec 1 21:06:58 UTC 2020
On Tue, 1 Dec 2020 20:13:14 GMT, Chris Hegarty <chegar at 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
More information about the core-libs-dev
mailing list