On Wed, 2 Dec 2020 14:28:00 GMT, Harold Seigel <[email protected]> wrote:
> Additional changes may be needed to Class.permittedSubclasses() and/or
> Class.isSealed() as part of fixing bug JDK-8256867. The JVM is being changed
> to treat classes with empty PermittedSubclasses attributes as sealed classes
> that cannot be extended (or implemented).
>
> Current thinking is that Class.permittedSubclasses() will return an empty
> array for both non-sealed classes and for sealed classes with empty
> PermittedSubclasses attributes. And, Class.isSealed() will return False in
> the former case and True in the latter. This will require changing the
> implementation of Class.isSealed() to call the JVM directly instead of
> calling Class.permittedSubclasses().
>
> Does this seem like a reasonable way to handle this corner case?
Uh, I just realized it may be necessary to implement `Class.isSealed()`
differently. Consider:
sealed class Sealed permits Unknown {}
Where `Unknown` does not exist at runtime. So getPermittedSubclasses0() returns
an empty array(?). But isSealed should return `true`, right? (Possibly, we
could leave this from the first integration, but seems like something that
should be done. Note that in the previous/JDK 15 implementation, isSealed()
would return true in this case.)
-------------
PR: https://git.openjdk.java.net/jdk/pull/1483