RFR: 8282274: Compiler implementation for Pattern Matching for switch (Third Preview) [v3]

Vicente Romero vromero at openjdk.java.net
Fri Apr 15 15:40:41 UTC 2022


On Tue, 12 Apr 2022 13:18:14 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:

>> This is a (preliminary) patch for javac implementation for the third preview of pattern matching for switch (type patterns in switches).
>> 
>> Draft JLS:
>> http://cr.openjdk.java.net/~gbierman/PatternSwitchPlusRecordPatterns/PatternSwitchPlusRecordPatterns-20220407/specs/patterns-switch-jls.html
>> 
>> The changes are:
>> -there are no guarded patterns anymore, guards are not bound to the CaseElement (JLS 15.28)
>> -a new contextual keyword `when` is used to add a guard, instead of `&&`
>> -`null` selector value is handled on switch level (if a switch has `case null`, it is used, otherwise a NPE is thrown), rather than on pattern matching level.
>> -total patterns are allowed in `instanceof`
>> -`java.lang.MatchException` is added for the case where a switch is exhaustive (due to sealed types) at compile-time, but not at runtime.
>> 
>> Feedback is welcome!
>> 
>> Thanks!
>
> Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Cleanup.

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java line 1779:

> 1777:                         //binding pattern
> 1778:                         attribExpr(pat, switchEnv);
> 1779:                         var primary = TreeInfo.primaryPatternType(pat);

general comment: the handleSwitch method is getting more and more complex, please consider refactoring it, probably splitting it, for example different subrutines handling different case kinds. Of course this probably should be done as a separate effort.

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

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


More information about the core-libs-dev mailing list