----- Mail original -----
> De: "Brian Goetz" <[email protected]>
> À: "Remi Forax" <[email protected]>, "core-libs-dev"
> <[email protected]>
> Cc: "amber-spec-experts" <[email protected]>
> Envoyé: Lundi 7 Juin 2021 17:06:20
> Objet: Re: case null vs case dominance
> On 6/7/2021 5:51 AM, Remi Forax wrote:
>> Hi all,
>> the first part of the message is about javac error message that could be
>> improved,
>> the second part is about the current spec being not very logical.
>>
>> With this code
>>
>> Object o = null;
>> var value = switch(o) {
>> //case null -> 0;
>> case Object __ -> 0;
>> case null -> 0;
>> };
>> System.out.println(value);
>>
>> The error message is
>> PatternMatching101.java:70: error: this case label is dominated by a
>> preceding
>> case label
>> case null -> 0;
>> ^
>>
>> The error message is wrong here, because it's 'case null' and you can put a
>> case
>> null where you want but below a total pattern, so the error mesage should
>> reflect that.
>
> But the case null *is* dominated by the total pattern, and therefore dead.
it depends on the order you applies the rules
you can also says that because there is a case null, Object does not accept
null so it's not a total pattern so it doesn't not dominate null.
I think it's an error but i think there should be a special rule for it.
>
>> Here is an example that compiles showing that case null can be below a case
>> String, which it dominates
>>
>> Object o = null;
>> var value = switch(o) {
>> case String s -> 0;
>> case null -> 0;
>> default -> 0;
>> };
>
> In this case, the String pattern is not total, so it does not dominate null.
That's my point, cf above.
Rémi