On Tue, 1 Dec 2020 23:19:41 GMT, Mandy Chung <mch...@openjdk.org> wrote:

>> I was investigating a little today. One thing to note is that there is a 
>> difference between the JLS and JVMS[1] restrictions - the JVMS restrictions 
>> only require the classes to be in the same module, but they can be in any 
>> package (even for an unnamed module).
>> 
>> Moreover, a lot of the constraints are checked automatically: e.g. consider 
>> class api.Api in module "a", which permits impl.Impl in module "b", 
>> subtyping Api. Loading of impl.Impl on behalf of getPermittedSubclasses() 
>> will fail (because the two classes are in different modules). So impl.Impl 
>> will not be included.
>> 
>> So far, it seems the only constraint that I think is not satisfied by this 
>> implicit loading is that the permitted subclass is really a direct subtype 
>> of the current class.
>> 
>> My proposal is to enhance the Java method with the direct subtype check 
>> (with a possible future cleanup task to move the check to native, as is done 
>> for getNestMembers()). 
>> 
>> [1] 
>> http://cr.openjdk.java.net/~gbierman/jep397/jep397-20201104/specs/sealed-classes-jvms.html#jvms-5.3.5
>
> @lahodaj  It is okay with me if `getPermittedSubclasses` returns the 
> permitted subtypes matching the runtime view (that matches the current 
> specification to me) and revisit this API as a follow up.

Yes, would be a surprise if getPermittedSubclasses returned Class objects for 
classes that are not subclasses. I think it should be okay to separate that out 
to a separate issue so that it can be further re-examined after JEP 397 goes in.

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

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

Reply via email to