On Tue, 1 Dec 2020 19:34:11 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.

This pull request has now been integrated.

Changeset: 5a03e476
Author:    Chris Hegarty <che...@openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/5a03e476
Stats:     230 lines in 3 files changed: 208 ins; 3 del; 19 mod

8255560: Class::isRecord should check that the current class is final and not 
abstract

Reviewed-by: mchung, darcy

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

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

Reply via email to