Add patterns module: pattern matching from JDK 21 to 27

Type, record and primitive patterns, guards, sealed exhaustiveness, MatchException via separate compilation, and eight captured transcripts.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01TF9JWFvJSNm6HVzswzZU5a
This commit is contained in:
Claude
2026-09-24 11:50:40 +00:00
parent 96b25c8fc4
commit bc91b9c8d0
36 changed files with 736 additions and 0 deletions
@@ -0,0 +1,39 @@
$ javac src/Guards.java && java Guards (25.0.4.1+1-LTS)
empty string
short string: abc
long string: abcdefgh
negative -4
int 12
other
$ javac src/Guards.java && java Guards (27+35)
empty string
short string: abc
long string: abcdefgh
negative -4
int 12
other
$ javac broken/Dominated.java (25.0.4.1+1-LTS)
broken/Dominated.java:5: error: this case label is dominated by a preceding case label
case String s -> "string"; // String is a CharSequence, so this can never be reached
^
1 error
$ javac broken/Dominated.java (27+35)
broken/Dominated.java:5: error: this case label is dominated by a preceding case label
case String s -> "string"; // String is a CharSequence, so this can never be reached
^
1 error
$ javac broken/GuardBeforeGeneral.java (25.0.4.1+1-LTS)
broken/GuardBeforeGeneral.java:5: error: this case label is dominated by a preceding case label
case String s when s.isEmpty() -> "empty string"; // guarded case after the unguarded one
^
1 error
$ javac broken/GuardBeforeGeneral.java (27+35)
broken/GuardBeforeGeneral.java:5: error: this case label is dominated by a preceding case label
case String s when s.isEmpty() -> "empty string"; // guarded case after the unguarded one
^
1 error