On Fri, 13 May 2022 09:29:20 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

>> Jan Lahoda has updated the pull request incrementally with two additional 
>> commits since the last revision:
>> 
>>  - Updating naming to more closely follow the spec: total patterns are 
>> renamed to unconditional patterns, unrefined is now unguarded.
>>  - Case label elements cannot be unguarded if they have a guard of a type 
>> different than boolean.
>
> src/java.base/share/classes/java/lang/MatchException.java line 58:
> 
>> 56:      * @param  message the detail message (which is saved for later 
>> retrieval
>> 57:      *         by the {@link #getMessage()} method).
>> 58:      * @param  cause the cause (which is saved for later retrieval by the
> 
> This looks odd - it seems like the sentence is like this:
> 
> `the cause ( foo ). (bar)`. E.g. the test in parenthesis exceeds the test 
> outside parenthesis by a wide margin. I suggest both here and in the 
> "message" @param to avoid the parenthesis and split the sentence instead. 
> Examples:
> 
> 
> * @param  message the detail message. The message is saved for later retrieval
> *  by the {@link #getMessage()} method).
> 
> 
> and
> 
> 
> * @param cause the cause. The cause is saved for later retrieval by the
> *  {@link #getCause()} method). A {@code null} value is
> * permitted, and indicates that the cause is nonexistent or
> * unknown.
> 
> 
> Of course this is just an idea.

I believe this text is taken form another exception in java.lang. If that would 
be OK, I'd look at this in a followup/separate issue.

> src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java line 1802:
> 
>> 1800:                                 unguarded &&
>> 1801:                                 !patternType.isErroneous() &&
>> 1802:                                 
>> types.isSubtype(types.boxedTypeOrType(types.erasure(seltype)),
> 
> This seems to be a change compared to the previous code - e.g. handling of 
> boxing in the switch target type. Is this code even exercised? The test 
> "NotApplicableTypes" seems to rule the combination `switch (int) ... case 
> Integer` out.

Yes, `switch ("int") { case Integer i -> }` is not allowed. The intent of 
`boxedTypeOrType` is to reduce follow-up errors, as `Integer i` will be 
considered to be unconditional over `int`.

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

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

Reply via email to