[jdk17] Integrated: 8268871: Adjust javac to updated exhaustiveness specification
Jan Lahoda
jlahoda at openjdk.java.net
Fri Jun 25 09:55:06 UTC 2021
On Wed, 16 Jun 2021 12:47:22 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:
> The current updates spec for pattern matching in switch:
> http://cr.openjdk.java.net/~gbierman/jep406/jep406-20210608/specs/patterns-switch-jls.html
>
> tweaks the definition of exhaustive switches so that it include handling special types, like intersection types, sealed subclasses of sealed types, like:
>
> sealed abstract class A permits B, C {}
> final class B extends A {}
> sealed abstract class C extends A permits D, E {}
> final class D extends C {}
> final class E extends C {}
>
> public class Test {
> public static void main(String[] args) {
> A a = new D();
> System.out.println(
> switch (a) {
> case B x -> "B";
> case D x -> "D";
> case E x -> "E";
> });
> }
> }
>
>
> etc. This patch attempts to tweak javac to work according to this specification. It builds covered types based on what types are covered, i.e. if all subtypes of a sealed type are covered, the sealed type itself is covered, and this is done transitively, so that in the example above, `D` and `E` will mark `C` as covered, and then `B` and `C` will mark `A` as covered, and as the type if `a` is `A`, it means the switch is exhaustive.
This pull request has now been integrated.
Changeset: 4eb32129
Author: Jan Lahoda <jlahoda at openjdk.org>
URL: https://git.openjdk.java.net/jdk17/commit/4eb321298a1abf6b24bd9515c5c0c3580b2f31f7
Stats: 350 lines in 2 files changed: 276 ins; 62 del; 12 mod
8268871: Adjust javac to updated exhaustiveness specification
Reviewed-by: vromero
-------------
PR: https://git.openjdk.java.net/jdk17/pull/78
More information about the compiler-dev
mailing list