Sealed classes -- Feedback on compiler message
Vicente Romero
vicente.romero at oracle.com
Tue Jun 9 18:32:05 UTC 2020
Hi Alex,
Thanks for the message suggestions. I have created [1] to track this issue,
Vicente
[1] https://bugs.openjdk.java.net/browse/JDK-8247270
On 6/8/20 2:03 PM, Alex Buckley wrote:
> On 6/6/2020 1:30 PM, Gunnar Morling wrote:
>> I'm playing around a bit with sealed classes. As described in the JEP,
>> the compiler rejects a subclass in another package when not compiling
>> a named module. But the compiler error is not clear about the reason:
>>
>> class is not allowed to extend sealed class:
>> org.acme.sealed.Shipment
>>
>> Could it perhaps be a bit more specific, e.g.:
>>
>> class is not allowed to extend sealed class in another package when
>> not compiling a named module: org.acme.sealed.Shipment
>
> Another infelicity with the error message is that it doesn't make
> clear if `org.acme.sealed.Shipment` is the superclass or the subclass.
> Looking at javac's error templates for sealed classes:
>
> http://hg.openjdk.java.net/jdk/jdk/file/e7a068a7f1d0/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties#l3441
>
>
> this infelicity does _not_ occur in other messages, e.g. at line 3464:
>
> subclass {0} must extend sealed class
>
> So, rather than:
>
> class is not allowed to extend sealed class: {0}
>
> consider:
>
> class {0} in unnamed module cannot extend a sealed class in a
> different package
>
> class {0} in module {1} cannot extend a sealed class in a different
> module
>
> Ideally, the relevant JLS text would live as comments in
> compiler.properties? In this case, the JLS draft for JEP 360 shows in
> 8.1.6 that two scenarios exist, which would motivate two messages in
> compiler.properties:
>
> If a sealed class C belongs to a named module, then every class
> named in the permits clause of the declaration of C must belong to the
> same module than C; otherwise a compile-time error occurs.
>
> If a sealed class C belongs to an unnamed module, then every class
> named in the permits clause of the declaration of C must belong to the
> same package than C; otherwise or a compile-time error occurs.
>
> Alex
More information about the amber-dev
mailing list