[jdk17] RFR: 8268766: Desugaring of pattern matching enum switch should be improved [v6]

Maurizio Cimadamore mcimadamore at openjdk.java.net
Tue Jul 6 09:57:53 UTC 2021


On Wed, 30 Jun 2021 10:23:32 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:

>> Currently, an enum switch with patterns is desugared in a very non-standard, and potentially slow, way. It would be better to use the standard `typeSwitch` bootstrap to classify the enum constants. The bootstrap needs to accept enum constants as labels in order to allow this. A complication is that if an enum constant is missing, that is not an incompatible change for the switch, and the switch should simply work as if the case for the missing constant didn't exist. So, the proposed solution is to have a new bootstrap `enumSwitch` that accepts `String`s in place of the enum constants, and will internally convert them to the appropriate enum constants, and then it will find the proper case similarly to `typeSwitch`.
>> 
>> How does this look?
>
> Jan Lahoda has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains ten commits:
> 
>  - Reflecting review comments.
>  - Merge branch 'master' into JDK-8268766
>  - Improving javadoc.
>  - Updating javadoc, as suggested.
>  - Updating javadoc, code and tests as suggested.
>  - Creating a new bootstrap method for (pattern matching) enum switches, as suggested.
>  - Adding and fixing test.
>  - Merging master.
>  - 8268766: Desugaring of pattern matching enum switch should be improved

Looks good - added minor cosmetic comments

src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java line 205:

> 203:      *
> 204:      * @param lookup Represents a lookup context with the accessibility
> 205:      *               privileges of the caller.  When used with {@code invokedynamic},

Suggestion:

     *               privileges of the caller. When used with {@code invokedynamic},

src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java line 216:

> 214:      * @throws NullPointerException if any argument is {@code null}
> 215:      * @throws IllegalArgumentException if any element in the labels array is null, if the
> 216:      * invocation type is not a method type of first parameter of an enum type,

Suggestion:

     * invocation type is not a method type whose first parameter type is an enum type,

src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java line 217:

> 215:      * @throws IllegalArgumentException if any element in the labels array is null, if the
> 216:      * invocation type is not a method type of first parameter of an enum type,
> 217:      * second parameter of type {@code int} and with {@code int} as its return type,

Suggestion:

     * second parameter of type {@code int} and whose return type is {@code int},

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

Marked as reviewed by mcimadamore (Reviewer).

PR: https://git.openjdk.java.net/jdk17/pull/81


More information about the core-libs-dev mailing list