This is an automated email from the ASF dual-hosted git repository.

dbalek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new e660cc7c53 Update nb-javac to 19+33. (#4467)
e660cc7c53 is described below

commit e660cc7c53e060c4186b7ceac02b1947689cc0ca
Author: Dusan Balek <[email protected]>
AuthorDate: Tue Sep 13 09:35:45 2022 +0200

    Update nb-javac to 19+33. (#4467)
---
 .github/workflows/main.yml                         |   2 +-
 .../org-netbeans-modules-debugger-jpda.sig         |   2 -
 java/debugger.jpda/nbproject/project.properties    |   2 +-
 .../completion/data/SwitchPatternMatching.java     |   4 +-
 .../JavaCompletionTask117FeaturesTest.java         |  10 +-
 .../editor/java/JavaCodeTemplateFilter.java        |  19 +++-
 .../modules/java/hints/bugs/InfiniteRecursion.java |   6 ++
 .../hints/suggestions/ExpectedTypeResolver.java    |  17 ++-
 .../hints/jdk/ConvertSwitchToRuleSwitchTest.java   |  12 +--
 .../org-netbeans-modules-java-source-base.sig      |   2 -
 java/java.source.base/nbproject/project.properties |   2 +-
 .../api/java/source/TranslateIdentifier.java       |   3 +-
 .../org/netbeans/api/java/source/TreeMaker.java    |  19 +++-
 .../modules/java/source/NoJavacHelper.java         |   2 +-
 .../modules/java/source/builder/TreeFactory.java   |  24 +++--
 .../modules/java/source/pretty/VeryPretty.java     |  16 ++-
 .../modules/java/source/save/CasualDiff.java       |  50 ++++-----
 .../modules/java/source/save/Reformatter.java      |  69 ++++++++-----
 .../modules/java/source/save/Reindenter.java       |   8 +-
 .../source/transform/ImmutableTreeTranslator.java  | 114 +++++++++++++++++++--
 .../java/source/transform/TreeDuplicator.java      |  30 +++++-
 .../java/source/gen/SwitchRuleFormattingTest.java  |  62 ++++++-----
 .../netbeans/api/java/source/gen/SwitchTest.java   |   2 +-
 .../modules/java/source/save/FormatingTest.java    |  99 +++++-------------
 .../nbproject/org-netbeans-modules-java-source.sig |   2 -
 java/java.source/nbproject/project.properties      |   2 +-
 java/libs.javacapi/external/binaries-list          |   4 +-
 ...-license.txt => nb-javac-jdk-19+33-license.txt} |   8 +-
 .../nbproject/org-netbeans-libs-javacapi.sig       |  63 ++++++++----
 java/libs.javacapi/nbproject/project.properties    |   2 +-
 java/libs.javacapi/nbproject/project.xml           |   4 +-
 java/libs.nbjavacapi/external/binaries-list        |   4 +-
 ...-license.txt => nb-javac-jdk-19+33-license.txt} |   8 +-
 java/libs.nbjavacapi/manifest.mf                   |   2 +-
 java/libs.nbjavacapi/nbproject/project.properties  |   4 +-
 java/libs.nbjavacapi/nbproject/project.xml         |   8 +-
 .../netbeans/modules/nbjavac/api/Bundle.properties |   2 +-
 .../org-netbeans-modules-refactoring-java.sig      |   2 -
 java/refactoring.java/nbproject/project.properties |   2 +-
 .../modules/java/hints/spiimpl/Utilities.java      |   5 +-
 .../org/netbeans/nbbuild/extlibs/ignored-overlaps  |   4 +-
 41 files changed, 427 insertions(+), 275 deletions(-)

diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index b5899ef0b0..02e2ae8fe6 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -103,7 +103,7 @@ jobs:
         run: tar --zstd -xf build.tar.zst
 
       - name: Setup Xvfb
-        if: ${{ matrix.java != '19-ea' }}  # see #4299
+        if: ${{ matrix.java != '20-ea' }}  # see #4299
         run: |
           echo "DISPLAY=:99.0" >> $GITHUB_ENV
           Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
diff --git 
a/java/debugger.jpda/nbproject/org-netbeans-modules-debugger-jpda.sig 
b/java/debugger.jpda/nbproject/org-netbeans-modules-debugger-jpda.sig
index 5a10587d15..fb6f2e796e 100644
--- a/java/debugger.jpda/nbproject/org-netbeans-modules-debugger-jpda.sig
+++ b/java/debugger.jpda/nbproject/org-netbeans-modules-debugger-jpda.sig
@@ -27,7 +27,6 @@ meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitErroneous(com.sun.
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.tree.TreeVisitor%1})
-meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.tree.TreeVisitor%1})
@@ -108,7 +107,6 @@ meth public {com.sun.source.util.TreeScanner%0} 
visitErroneous(com.sun.source.tr
 meth public {com.sun.source.util.TreeScanner%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.util.TreeScanner%1})
-meth public {com.sun.source.util.TreeScanner%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.util.TreeScanner%1})
diff --git a/java/debugger.jpda/nbproject/project.properties 
b/java/debugger.jpda/nbproject/project.properties
index d72f13597f..a8853bf918 100644
--- a/java/debugger.jpda/nbproject/project.properties
+++ b/java/debugger.jpda/nbproject/project.properties
@@ -23,7 +23,7 @@ javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 jpda.classes.dir=${build.dir}/jpda/classes/
 requires.nb.javac=true
-spec.version.base=1.126.0
+spec.version.base=1.127.0
 test-unit-sys-prop.test.dir.src=${basedir}/test/unit/src/
 test-unit-sys-prop.netbeans.user=${basedir}/work/nb_user_dir
 
test.unit.cp.extra=../java.source.nbjavac/build/test-nb-javac/cluster/modules/org-netbeans-modules-java-source-nbjavac-test.jar
diff --git 
a/java/java.completion/test/unit/data/org/netbeans/modules/java/completion/data/SwitchPatternMatching.java
 
b/java/java.completion/test/unit/data/org/netbeans/modules/java/completion/data/SwitchPatternMatching.java
index 82cc419ea9..97036989db 100644
--- 
a/java/java.completion/test/unit/data/org/netbeans/modules/java/completion/data/SwitchPatternMatching.java
+++ 
b/java/java.completion/test/unit/data/org/netbeans/modules/java/completion/data/SwitchPatternMatching.java
@@ -28,9 +28,9 @@ public class Test{
         String result = switch (obj) {
             case null, String  ->
                 "null & String";
-            case CharSequence s && s. && obj. && IntStream.of(1).max().->
+            case CharSequence s when s. && obj. && IntStream.of(1).max().->
                 "CharSequence";
-            case (java.util.List list && list. && new StringBuilder().ERROR. 
&& java.util.ArrayList<String>.)->"list";
+            case (java.util.List list when list. && new StringBuilder().ERROR. 
&& java.util.ArrayList<String>.)->"list";
             default ->
                 "default";
         };
diff --git 
a/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask117FeaturesTest.java
 
b/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask117FeaturesTest.java
index 4318fb37e1..a9e798129e 100644
--- 
a/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask117FeaturesTest.java
+++ 
b/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask117FeaturesTest.java
@@ -58,24 +58,24 @@ public class JavaCompletionTask117FeaturesTest extends 
CompletionTestBase {
 
     public void testClassMembersAutoCompletion_GuardedPattern() throws 
Exception {
         
TestCompilerOptionsQueryImplementation.EXTRA_OPTIONS.add("--enable-preview");
-        performTest("SwitchPatternMatching", 1085, null, 
"AutoCompletion_MembersSelect_GuardedPatternMatchingSwitch.pass", 
getLatestSource());
+        performTest("SwitchPatternMatching", 1087, null, 
"AutoCompletion_MembersSelect_GuardedPatternMatchingSwitch.pass", 
getLatestSource());
     }
 
     public void testClassMembersAutoCompletion_GuardedPattern_1() throws 
Exception {
         
TestCompilerOptionsQueryImplementation.EXTRA_OPTIONS.add("--enable-preview");
-        performTest("SwitchPatternMatching", 1093, null, 
"AutoCompletion_MembersSelect_GuardedPatternMatchingSwitch_1.pass", 
getLatestSource());
+        performTest("SwitchPatternMatching", 1095, null, 
"AutoCompletion_MembersSelect_GuardedPatternMatchingSwitch_1.pass", 
getLatestSource());
     }
     public void testClassMembersAutoCompletion_GuardedPattern_2() throws 
Exception {
         
TestCompilerOptionsQueryImplementation.EXTRA_OPTIONS.add("--enable-preview");
-        performTest("SwitchPatternMatching", 1113, null, 
"AutoCompletion_MembersSelect_GuardedPatternMatchingSwitch_2.pass", 
getLatestSource());
+        performTest("SwitchPatternMatching", 1115, null, 
"AutoCompletion_MembersSelect_GuardedPatternMatchingSwitch_2.pass", 
getLatestSource());
     }
     public void testClassMembersAutoCompletion_ParanthesizedPattern() throws 
Exception {
         
TestCompilerOptionsQueryImplementation.EXTRA_OPTIONS.add("--enable-preview");
-        performTest("SwitchPatternMatching", 1200, null, 
"AutoCompletion_MembersSelect_ParenthesizedPatternMatchingSwitch.pass", 
getLatestSource());
+        performTest("SwitchPatternMatching", 1204, null, 
"AutoCompletion_MembersSelect_ParenthesizedPatternMatchingSwitch.pass", 
getLatestSource());
     }
     public void testClassMembersAutoCompletion_ParanthesizedPattern_1() throws 
Exception {
         
TestCompilerOptionsQueryImplementation.EXTRA_OPTIONS.add("--enable-preview");
-        performTest("SwitchPatternMatching", 1224, null, 
"AutoCompletion_MembersSelect_ParenthesizedPatternMatchingSwitch_1.pass", 
getLatestSource());
+        performTest("SwitchPatternMatching", 1228, null, 
"AutoCompletion_MembersSelect_ParenthesizedPatternMatchingSwitch_1.pass", 
getLatestSource());
     }
     public void noop() {
     }
diff --git 
a/java/java.editor/src/org/netbeans/modules/editor/java/JavaCodeTemplateFilter.java
 
b/java/java.editor/src/org/netbeans/modules/editor/java/JavaCodeTemplateFilter.java
index c93e2b36a6..85a6555d03 100644
--- 
a/java/java.editor/src/org/netbeans/modules/editor/java/JavaCodeTemplateFilter.java
+++ 
b/java/java.editor/src/org/netbeans/modules/editor/java/JavaCodeTemplateFilter.java
@@ -19,6 +19,7 @@
 
 package org.netbeans.modules.editor.java;
 
+import com.sun.source.tree.CaseLabelTree;
 import com.sun.source.tree.Tree;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -112,12 +113,23 @@ public class JavaCodeTemplateFilter implements 
CodeTemplateFilter {
                                     }
                                     treeKindCtx = tree.getKind();
                                     switch (treeKindCtx) {
-                                        case CASE:
-                                            if (so < 
controller.getTrees().getSourcePositions().getEndPosition(controller.getCompilationUnit(),
 ((CaseTree)tree).getExpression())) {
+                                        case CASE: {
+                                            if (((CaseTree)tree).getCaseKind() 
== CaseTree.CaseKind.RULE) {
                                                 treeKindCtx = null;
+                                            } else {
+                                                SourcePositions sp = 
controller.getTrees().getSourcePositions();
+                                                List<? extends CaseLabelTree> 
labels = ((CaseTree)tree).getLabels();
+                                                int startPos = 
labels.isEmpty() ? (int) sp.getEndPosition(controller.getCompilationUnit(), 
labels.get(labels.size() - 1))
+                                                        : 
(int)sp.getStartPosition(controller.getCompilationUnit(), tree);
+                                                String headerText = 
controller.getText().substring(startPos, so);
+                                                int idx = 
headerText.indexOf(':');
+                                                if (idx < 0) {
+                                                    treeKindCtx = null;
+                                                }
                                             }
                                             break;
-                                        case CLASS:
+                                        }
+                                        case CLASS: {
                                             SourcePositions sp = 
controller.getTrees().getSourcePositions();
                                             int startPos = 
(int)sp.getEndPosition(controller.getCompilationUnit(), 
((ClassTree)tree).getModifiers());
                                             if (startPos <= 0) {
@@ -130,6 +142,7 @@ public class JavaCodeTemplateFilter implements 
CodeTemplateFilter {
                                                 stringCtx = CLASS_HEADER;
                                             }
                                             break;
+                                        }
                                         case FOR_LOOP:
                                         case ENHANCED_FOR_LOOP:
                                             if 
(!isRightParenthesisOfLoopPresent(controller, so)) {
diff --git 
a/java/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
 
b/java/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
index 77d2641fdf..47ab70f328 100644
--- 
a/java/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
+++ 
b/java/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
@@ -23,6 +23,7 @@ import com.sun.source.tree.BreakTree;
 import com.sun.source.tree.CaseTree;
 import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.ConditionalExpressionTree;
+import com.sun.source.tree.ConstantCaseLabelTree;
 import com.sun.source.tree.ContinueTree;
 import com.sun.source.tree.DoWhileLoopTree;
 import com.sun.source.tree.EnhancedForLoopTree;
@@ -550,6 +551,11 @@ public class InfiniteRecursion {
             }
         }
 
+        @Override
+        public State visitConstantCaseLabel(ConstantCaseLabelTree node, Void 
p) {
+            return super.scan(node.getConstantExpression(), p);
+        }
+
         @Override
         public State visitEnhancedForLoop(EnhancedForLoopTree node, Void p) {
             State s;
diff --git 
a/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java
 
b/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java
index e87f86e92f..56fd371c97 100644
--- 
a/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java
+++ 
b/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java
@@ -34,7 +34,9 @@ import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.CompilationUnitTree;
 import com.sun.source.tree.CompoundAssignmentTree;
 import com.sun.source.tree.ConditionalExpressionTree;
+import com.sun.source.tree.ConstantCaseLabelTree;
 import com.sun.source.tree.ContinueTree;
+import com.sun.source.tree.DeconstructionPatternTree;
 import com.sun.source.tree.DefaultCaseLabelTree;
 import com.sun.source.tree.DoWhileLoopTree;
 import com.sun.source.tree.EmptyStatementTree;
@@ -44,7 +46,6 @@ import com.sun.source.tree.ExportsTree;
 import com.sun.source.tree.ExpressionStatementTree;
 import com.sun.source.tree.ExpressionTree;
 import com.sun.source.tree.ForLoopTree;
-import com.sun.source.tree.GuardedPatternTree;
 import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.IfTree;
 import com.sun.source.tree.ImportTree;
@@ -66,6 +67,7 @@ import com.sun.source.tree.PackageTree;
 import com.sun.source.tree.ParameterizedTypeTree;
 import com.sun.source.tree.ParenthesizedPatternTree;
 import com.sun.source.tree.ParenthesizedTree;
+import com.sun.source.tree.PatternCaseLabelTree;
 import com.sun.source.tree.PrimitiveTypeTree;
 import com.sun.source.tree.ProvidesTree;
 import com.sun.source.tree.RequiresTree;
@@ -110,7 +112,6 @@ import javax.lang.model.type.ExecutableType;
 import javax.lang.model.type.PrimitiveType;
 import javax.lang.model.type.TypeKind;
 import javax.lang.model.type.TypeMirror;
-import javax.lang.model.type.TypeVariable;
 import javax.lang.model.type.UnionType;
 import javax.lang.model.type.WildcardType;
 import javax.lang.model.util.ElementFilter;
@@ -1416,7 +1417,17 @@ public class ExpectedTypeResolver implements 
TreeVisitor<List<? extends TypeMirr
     }
 
     @Override
-    public List<? extends TypeMirror> visitGuardedPattern(GuardedPatternTree 
node, Object p) {
+    public List<? extends TypeMirror> 
visitConstantCaseLabel(ConstantCaseLabelTree node, Object p) {
+        return null;
+    }
+
+    @Override
+    public List<? extends TypeMirror> 
visitPatternCaseLabel(PatternCaseLabelTree node, Object p) {
+        return null;
+    }
+
+    @Override
+    public List<? extends TypeMirror> 
visitDeconstructionPattern(DeconstructionPatternTree node, Object p) {
         return null;
     }
 
diff --git 
a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertSwitchToRuleSwitchTest.java
 
b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertSwitchToRuleSwitchTest.java
index b87dc9f25e..61ff1660a7 100644
--- 
a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertSwitchToRuleSwitchTest.java
+++ 
b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertSwitchToRuleSwitchTest.java
@@ -987,10 +987,10 @@ public class ConvertSwitchToRuleSwitchTest extends 
NbTestCase {
         HintTest.create()
                 .input("package test;" +
                         "public class Test {\n" +
-                        "     private void test(int p) {\n" +
+                        "     private void test(Object p) {\n" +
                         "         String result;\n" +
                         "         switch (p) {\n" +
-                        "            case Integer i && (i > 10): result = 
\"a\"; break;\n" +
+                        "            case Integer i when (i > 10): result = 
\"a\"; break;\n" +
                         "            default: System.err.println(\"No.\"); 
break;\n" +
                         "         }\n" +
                         "     }\n" +
@@ -1003,10 +1003,10 @@ public class ConvertSwitchToRuleSwitchTest extends 
NbTestCase {
                 .assertCompilable()
                 .assertVerbatimOutput("package test;" +
                         "public class Test {\n" +
-                        "     private void test(int p) {\n" +
+                        "     private void test(Object p) {\n" +
                         "         String result;\n" +
                         "         switch (p) {\n" +
-                        "            case Integer i && (i > 10) -> result = 
\"a\";\n" +
+                        "            case Integer i when (i > 10) -> result = 
\"a\";\n" +
                         "            default -> 
System.err.println(\"No.\");\n" +
                         "         }\n" +
                         "     }\n" +
@@ -1025,7 +1025,7 @@ public class ConvertSwitchToRuleSwitchTest extends 
NbTestCase {
                         + "class Test {\n"
                         + "    public String test(Object p, Object o1, Object 
o2) {\n"
                         + "        switch (p) {\n"
-                        + "            case (Integer i  && (i > 10)):\n"
+                        + "            case (Integer i)  when (i > 10):\n"
                         + "               return (String) o1;\n"
                         + "            default :\n"
                         + "                return (String) o2;\n"
@@ -1042,7 +1042,7 @@ public class ConvertSwitchToRuleSwitchTest extends 
NbTestCase {
                             + "class Test {\n"
                             + "    public String test(Object p, Object o1, 
Object o2) {\n"
                             + "        return (String) (switch (p) {\n"
-                            + "            case (Integer i  && (i > 10)) -> 
o1;\n"
+                            + "            case (Integer i)  when (i > 10) -> 
o1;\n"
                             + "            default -> o2;\n"
                             + "        });\n"
                             + "    }\n"
diff --git 
a/java/java.source.base/nbproject/org-netbeans-modules-java-source-base.sig 
b/java/java.source.base/nbproject/org-netbeans-modules-java-source-base.sig
index cc7a583a79..335dc64c0b 100644
--- a/java/java.source.base/nbproject/org-netbeans-modules-java-source-base.sig
+++ b/java/java.source.base/nbproject/org-netbeans-modules-java-source-base.sig
@@ -27,7 +27,6 @@ meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitErroneous(com.sun.
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.tree.TreeVisitor%1})
-meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.tree.TreeVisitor%1})
@@ -108,7 +107,6 @@ meth public {com.sun.source.util.TreeScanner%0} 
visitErroneous(com.sun.source.tr
 meth public {com.sun.source.util.TreeScanner%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.util.TreeScanner%1})
-meth public {com.sun.source.util.TreeScanner%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.util.TreeScanner%1})
diff --git a/java/java.source.base/nbproject/project.properties 
b/java/java.source.base/nbproject/project.properties
index bb2801cc93..9d0e680d7a 100644
--- a/java/java.source.base/nbproject/project.properties
+++ b/java/java.source.base/nbproject/project.properties
@@ -23,7 +23,7 @@ javadoc.name=Java Source Base
 javadoc.title=Java Source Base
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
-spec.version.base=2.58.0
+spec.version.base=2.59.0
 
test.qa-functional.cp.extra=${refactoring.java.dir}/modules/ext/nb-javac-api.jar
 test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:\
     ${o.n.core.dir}/lib/boot.jar:\
diff --git 
a/java/java.source.base/src/org/netbeans/api/java/source/TranslateIdentifier.java
 
b/java/java.source.base/src/org/netbeans/api/java/source/TranslateIdentifier.java
index c9247e3121..c1f498e69c 100644
--- 
a/java/java.source.base/src/org/netbeans/api/java/source/TranslateIdentifier.java
+++ 
b/java/java.source.base/src/org/netbeans/api/java/source/TranslateIdentifier.java
@@ -21,6 +21,7 @@ package org.netbeans.api.java.source;
 
 import com.sun.source.tree.CaseTree;
 import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.ConstantCaseLabelTree;
 import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.MemberSelectTree;
 import com.sun.source.tree.MethodTree;
@@ -79,7 +80,7 @@ class TranslateIdentifier extends 
ErrorAwareTreePathScanner<Void, Void>{
                     || (element.getKind().isField() && ((Symbol) 
element).isStatic())) {
                 Tree parent = path.getParentPath() != null ? 
path.getParentPath().getLeaf() : null;
                 
-                if (   (parent != null && parent.getKind() == Kind.CASE && 
((CaseTree) parent).getExpression() == node && element.getKind() == 
ElementKind.ENUM_CONSTANT)
+                if (   (parent != null && parent.getKind() == 
Kind.CONSTANT_CASE_LABEL && ((ConstantCaseLabelTree) 
parent).getConstantExpression() == node && element.getKind() == 
ElementKind.ENUM_CONSTANT)
                     || (path.getCompilationUnit() != null && ((Symbol) 
element).enclClass() != null && path.getCompilationUnit().getSourceFile() == 
((Symbol) element).enclClass().sourcefile)) {
                     translateMap.put(node, 
make.Identifier(element.getSimpleName()));
                 } else {
diff --git 
a/java/java.source.base/src/org/netbeans/api/java/source/TreeMaker.java 
b/java/java.source.base/src/org/netbeans/api/java/source/TreeMaker.java
index b7667a4536..cb830c6249 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/TreeMaker.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/TreeMaker.java
@@ -276,7 +276,7 @@ public final class TreeMaker {
      * @since 2.39
      */
     public CaseTree CasePatterns(List<? extends Tree> patterns, Tree body) {
-        return delegate.CaseMultiplePatterns(patterns.stream().map(p -> 
(CaseLabelTree) p).collect(Collectors.toList()), body);
+        return delegate.CaseMultiplePatterns(toCaseLabelTrees(patterns), body);
     }
     
     /**
@@ -288,7 +288,22 @@ public final class TreeMaker {
      * @since 2.39
      */
     public CaseTree CasePatterns(List<? extends Tree> patterns, List<? extends 
StatementTree> statements) {
-        return delegate.CaseMultiplePatterns(patterns.stream().map(p -> 
(CaseLabelTree) p).collect(Collectors.toList()), statements);
+        return delegate.CaseMultiplePatterns(toCaseLabelTrees(patterns), 
statements);
+    }
+
+    private List<? extends CaseLabelTree> toCaseLabelTrees(List<? extends 
Tree> patterns) {
+        return patterns.stream().map(p -> {
+            if (p instanceof CaseLabelTree) {
+                return (CaseLabelTree) p;
+            }
+            if (p instanceof ExpressionTree) {
+                return delegate.ConstantCaseLabel((ExpressionTree) p);
+            }
+            if (p instanceof PatternTree) {
+                return delegate.PatternCaseLabel((PatternTree) p, null);
+            }
+            throw new IllegalArgumentException("Invalid pattern kind: " + 
p.getKind()); //NOI18N
+        }).collect(Collectors.toList());
     }
     
     /**
diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java 
b/java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java
index 2085580a85..727e20cda7 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java
@@ -34,7 +34,7 @@ import org.openide.modules.OnStart;
  */
 public class NoJavacHelper {
 
-    public static final int REQUIRED_JAVAC_VERSION = 18; // <- TODO: increment 
on every release
+    public static final int REQUIRED_JAVAC_VERSION = 19; // <- TODO: increment 
on every release
     private static final boolean HAS_WORKING_JAVAC;
 
     static {
diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java
 
b/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java
index 568e8952f5..102544cba7 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java
@@ -77,6 +77,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 import javax.lang.model.element.*;
 import javax.lang.model.type.ArrayType;
 import javax.lang.model.type.TypeKind;
@@ -210,16 +211,31 @@ public class TreeFactory {
         return make.at(NOPOS).DefaultCaseLabel();
     }
 
+    public ConstantCaseLabelTree ConstantCaseLabel(ExpressionTree expr) {
+        return make.at(NOPOS).ConstantCaseLabel((JCExpression) expr);
+    }
+
+    public PatternCaseLabelTree PatternCaseLabel(PatternTree pat, 
ExpressionTree guard) {
+        return make.at(NOPOS).PatternCaseLabel((JCPattern) pat, (JCExpression) 
guard);
+    }
+
+    public DeconstructionPatternTree DeconstructionPattern(ExpressionTree 
deconstructor, List<? extends PatternTree> nested, VariableTree var) {
+        ListBuffer<JCPattern> pats = new ListBuffer<>();
+        for (PatternTree t : nested)
+            pats.append((JCPattern)t);
+        return make.at(NOPOS).RecordPattern((JCExpression) deconstructor, 
pats.toList(), (JCVariableDecl) var);
+    }
+
     public CaseTree Case(ExpressionTree expression, List<? extends 
StatementTree> statements) {
         return Case(expression != null ? Collections.singletonList(expression) 
: Collections.emptyList(), statements);
     }
     
     public CaseTree Case(List<? extends ExpressionTree> expressions, List<? 
extends StatementTree> statements) {
-        return CaseMultiplePatterns(expressions.isEmpty() ? 
Collections.singletonList(DefaultCaseLabel()) : expressions, statements);
+        return CaseMultiplePatterns(expressions.isEmpty() ? 
Collections.singletonList(DefaultCaseLabel()) : expressions.stream().map(e -> 
ConstantCaseLabel(e)).collect(Collectors.toList()), statements);
     }
     
     public CaseTree Case(List<? extends ExpressionTree> expressions, Tree 
body) {
-        return CaseMultiplePatterns(expressions.isEmpty() ? 
Collections.singletonList(DefaultCaseLabel()) : expressions, body);
+        return CaseMultiplePatterns(expressions.isEmpty() ? 
Collections.singletonList(DefaultCaseLabel()) : expressions.stream().map(e -> 
ConstantCaseLabel(e)).collect(Collectors.toList()), body);
     }
     
     public CaseTree CaseMultiplePatterns(List<? extends CaseLabelTree> 
expressions, Tree body) {
@@ -906,10 +922,6 @@ public class TreeFactory {
         return make.at(NOPOS).BindingPattern((JCVariableDecl) vt);
     }
 
-    public GuardedPatternTree GuardedPattern(PatternTree pattern, 
ExpressionTree guard) {
-        return make.at(NOPOS).GuardPattern((JCPattern) pattern, (JCExpression) 
guard);
-    }
-
     public ParenthesizedPatternTree ParenthesizedPattern(PatternTree pattern) {
         return make.at(NOPOS).ParenthesizedPattern((JCPattern) pattern);
     }
diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/pretty/VeryPretty.java
 
b/java/java.source.base/src/org/netbeans/modules/java/source/pretty/VeryPretty.java
index 8c8867f38e..5a76b60586 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/pretty/VeryPretty.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/pretty/VeryPretty.java
@@ -2061,10 +2061,24 @@ public final class VeryPretty extends JCTree.Visitor 
implements DocTreeVisitor<V
     }
 
     @Override
-    public void visitDefaultCaseLabel(JCDefaultCaseLabel that) {
+    public void visitDefaultCaseLabel(JCDefaultCaseLabel tree) {
         print("default");
     }
 
+    @Override
+    public void visitConstantCaseLabel(JCConstantCaseLabel tree) {
+        printExpr(tree.expr);
+    }
+
+    @Override
+    public void visitPatternCaseLabel(JCPatternCaseLabel tree) {
+        print(tree.pat);
+        if (tree.guard != null) {
+            print(" when ");
+            printExpr(tree.guard);
+        }
+    }
+
     @Override
     public void visitLetExpr(LetExpr tree) {
        print("(let " + tree.defs + " in " + tree.expr + ")");
diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java
 
b/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java
index 3441ee964c..3bc2d5dd28 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java
@@ -76,6 +76,7 @@ import com.sun.tools.javac.tree.JCTree.JCCatch;
 import com.sun.tools.javac.tree.JCTree.JCClassDecl;
 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
 import com.sun.tools.javac.tree.JCTree.JCConditional;
+import com.sun.tools.javac.tree.JCTree.JCConstantCaseLabel;
 import com.sun.tools.javac.tree.JCTree.JCContinue;
 import com.sun.tools.javac.tree.JCTree.JCDoWhileLoop;
 import com.sun.tools.javac.tree.JCTree.JCEnhancedForLoop;
@@ -1965,23 +1966,14 @@ public class CasualDiff {
         return diffTree((JCTree) oldT.var, (JCTree) newT.var, bounds);
     }
 
+    protected int diffConstantCaseLabel(JCConstantCaseLabel oldT, 
JCConstantCaseLabel newT, int[] bounds) {
+        return diffTree((JCTree) oldT.expr, (JCTree) newT.expr, bounds);
+    }
+
     protected int diffCase(JCCase oldT, JCCase newT, int[] bounds) {
         int localPointer = bounds[0];
-        List<? extends JCTree> oldPatterns;
-        List<? extends JCTree> newPatterns;
-        
-        if(!(oldT.getLabels().size()==1 && 
oldT.getLabels().get(0).getKind().toString().equals("DEFAULT_CASE_LABEL"))){
-            oldPatterns = oldT.getLabels();            
-        }else{
-            oldPatterns = oldT.getExpressions();           
-        }
-        
-        if(!(newT.getLabels().size() == 1 && 
newT.getLabels().get(0).getKind().toString().equals("DEFAULT_CASE_LABEL"))){
-            newPatterns = newT.getLabels();            
-        }else{
-            newPatterns = newT.getExpressions();           
-        }
-        
+        List<? extends JCTree.JCCaseLabel> oldPatterns = oldT.getLabels();
+        List<? extends JCTree.JCCaseLabel> newPatterns = newT.getLabels();
         PositionEstimator patternEst = EstimatorFactory.casePatterns(
                 oldPatterns,
                 newPatterns,
@@ -1990,24 +1982,13 @@ public class CasualDiff {
         int posHint;
         int endpos;
         int copyTo;
-        if (oldPatterns.isEmpty()) {
-            moveFwdToOneOfTokens(tokenSequence, bounds[0], 
EnumSet.of(JavaTokenId.DEFAULT));
-            tokenSequence.moveNext();
+        if (JavaTokenId.DEFAULT == moveFwdToOneOfTokens(tokenSequence, 
bounds[0], EnumSet.of(JavaTokenId.CASE, JavaTokenId.DEFAULT))) {
             copyTo = endpos = posHint = tokenSequence.offset();
-
-            if (!newPatterns.isEmpty()) {
-                copyTo = getOldPos(oldT);
-            }
         } else {
             copyTo = posHint = 
oldPatterns.iterator().next().getStartPosition();
             endpos = endPos(oldPatterns.get(oldPatterns.size() - 1));
-
-            if (newPatterns.isEmpty()) {
-                moveFwdToOneOfTokens(tokenSequence, bounds[0], 
EnumSet.of(JavaTokenId.CASE));
+            if (newPatterns.size() == 1 && newPatterns.get(0).getKind() == 
Kind.DEFAULT_CASE_LABEL) {
                 copyTo = tokenSequence.offset();
-                copyTo(localPointer, copyTo);
-                localPointer = copyTo = posHint = endpos;
-                printer.print("default");
             }
         }
         copyTo(localPointer, copyTo);
@@ -5439,8 +5420,10 @@ public class CasualDiff {
         if (oldT == null && newT != null)
             throw new IllegalArgumentException("Null is not allowed in 
parameters.");
 
-        if (oldT == newT)
-            return elementBounds[0];
+        if (oldT == newT) {
+            copyTo(elementBounds[0], elementBounds[1]);
+            return elementBounds[1];
+        }
 
         if (newT == null) {
             tokenSequence.move(elementBounds[1]);
@@ -5730,6 +5713,13 @@ public class CasualDiff {
           case BINDINGPATTERN:
               retVal = diffBindingPattern((JCBindingPattern) oldT, 
(JCBindingPattern) newT, elementBounds);
               break;
+          case DEFAULTCASELABEL:
+              copyTo(elementBounds[0], elementBounds[1]);
+              retVal = elementBounds[1];
+              break;
+          case CONSTANTCASELABEL:
+              retVal = diffConstantCaseLabel((JCConstantCaseLabel) oldT, 
(JCConstantCaseLabel) newT, elementBounds);
+              break;
           default:
               // handle special cases like field groups and enum constants
               if (oldT.getKind() == Kind.OTHER) {
diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
 
b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
index 434d2cda7d..35b1f39032 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
@@ -2801,20 +2801,46 @@ public class Reformatter implements ReformatTask {
         }
 
         @Override
-        public Boolean visitGuardedPattern(GuardedPatternTree node, Void p) {
+        public Boolean visitDefaultCaseLabel(DefaultCaseLabelTree node, Void 
p) {
+            accept(DEFAULT);
+            return true;
+        }
+
+        @Override
+        public Boolean visitConstantCaseLabel(ConstantCaseLabelTree node, Void 
p) {
+            scan(node.getConstantExpression(), p);
+            return true;
+        }
+
+        @Override
+        public Boolean visitPatternCaseLabel(PatternCaseLabelTree node, Void 
p) {
             scan(node.getPattern(), p);
             space();
-            accept(AMPAMP);
+            accept(IDENTIFIER);
             space();
-            scan(node.getExpression(), p);
+            scan(node.getGuard(), p);
+            return true;
+        }
 
+        @Override
+        public Boolean visitDeconstructionPattern(DeconstructionPatternTree 
node, Void p) {
+            scan(node.getDeconstructor(), p);
+            accept(LPAREN);
+            scan(node.getNestedPatterns(), p);
+            accept(RPAREN);
+            if (node.getVariable() != null) {
+                space();
+                accept(IDENTIFIER);
+            }
             return true;
         }
 
         @Override
         public Boolean visitParenthesizedPattern(ParenthesizedPatternTree 
node, Void p) {
             accept(LPAREN);
+            spaces(0);
             scan(node.getPattern(), p);
+            spaces(0);
             accept(RPAREN);
             return true;
         }
@@ -2933,36 +2959,24 @@ public class Reformatter implements ReformatTask {
 
         @Override
         public Boolean visitCase(CaseTree node, Void p) {
-            List<? extends Tree> labels = node.getLabels();
-            if (labels != null && labels.size() > 0) {
+            List<? extends CaseLabelTree> labels = node.getLabels();
+            if (labels != null && !labels.isEmpty()) {
                 if (tokens.token().id() == JavaTokenId.DEFAULT && 
labels.get(0).getKind() == Kind.DEFAULT_CASE_LABEL) {
                     accept(DEFAULT);
                 } else {
                     accept(CASE);
                     space();
-                    for (Tree label : labels) {
-                        switch (label.getKind()) {
-                            case DEFAULT_CASE_LABEL:
-                                removeWhiteSpace(JavaTokenId.DEFAULT);
-                                accept(DEFAULT);
-                                break;
-                            case BINDING_PATTERN:
-                            case PARENTHESIZED_PATTERN:
-                            case GUARDED_PATTERN:
-                                removeWhiteSpace(JavaTokenId.IDENTIFIER);
-                                scan(label, p);
-                                break;
-                            case NULL_LITERAL:
-                                removeWhiteSpace(JavaTokenId.NULL);
-                                scan(label, p);
-                                break;
-                            default:
-                                scan(label, p);
-                                break;
+                    for (Iterator<? extends CaseLabelTree> it = 
labels.iterator(); it.hasNext();) {
+                        CaseLabelTree label = it.next();
+                        scan(label, p);
+                        if (it.hasNext()) {
+                            spaces(0);
+                            accept(COMMA);
+                            space();
                         }
                     }
                 }
-            } else if (node.getExpressions().size() > 0) {
+            } else if (!node.getExpressions().isEmpty()) {
                 List<? extends ExpressionTree> exprs = node.getExpressions();
                 accept(CASE);
                 space();
@@ -3016,15 +3030,14 @@ public class Reformatter implements ReformatTask {
                 if (tokens.offset() >= endPos) {
                     break;
                 }
-                if (tokens.token().id() == forToken) {
-                    break;
-                }
                 if (tokens.token().id() == WHITESPACE) {
                     String text = tokens.token().text().toString();
                     String ind = getIndent();
                     if (!ind.equals(text)) {
                         addDiff(new Diff(tokens.offset(), tokens.offset() + 
tokens.token().length(), " "));
                     }
+                } else if (forToken == null || tokens.token().id() == 
forToken) {
+                    break;
                 }
             } while (tokens.moveNext());
         }
diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java
 
b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java
index e6be578501..1632cf2db0 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java
@@ -709,9 +709,9 @@ public class Reindenter implements IndentTask {
                 }
                     if (t != null) {
                         int i = getCurrentIndent(t, path);
-                        currentIndent = i < 0 ? getStmtIndent(startOffset, 
endOffset, EnumSet.of(tokenId), getEndPosition(((CaseTree) 
last).getExpression()), currentIndent) : i;
+                        currentIndent = i < 0 ? getStmtIndent(startOffset, 
endOffset, EnumSet.of(tokenId), getEndPosition(((CaseTree) 
last).getExpression()), currentIndent) : i; // TODO
                     } else {
-                        currentIndent = getStmtIndent(startOffset, endOffset, 
EnumSet.of(tokenId), getEndPosition(((CaseTree) last).getExpression()), 
currentIndent);
+                        currentIndent = getStmtIndent(startOffset, endOffset, 
EnumSet.of(tokenId), getEndPosition(((CaseTree) last).getExpression()), 
currentIndent); // TODO
                     }
 
                 break;
@@ -881,10 +881,10 @@ public class Reindenter implements IndentTask {
                     }
                     if (t != null) {
                         int i = getCurrentIndent(t, path);
-                        currentIndent = i < 0 ? getStmtIndent(startOffset, 
endOffset, EnumSet.of(JavaTokenId.COLON), getEndPosition(ct.getExpression()), 
currentIndent) : i;
+                        currentIndent = i < 0 ? getStmtIndent(startOffset, 
endOffset, EnumSet.of(JavaTokenId.COLON), getEndPosition(ct.getExpression()), 
currentIndent) : i; // TODO
                     } else {
                         int i = getCurrentIndent(ct, path);
-                        currentIndent = i < 0 ? getStmtIndent(startOffset, 
endOffset, EnumSet.of(JavaTokenId.COLON), getEndPosition(ct.getExpression()), 
currentIndent) : i;
+                        currentIndent = i < 0 ? getStmtIndent(startOffset, 
endOffset, EnumSet.of(JavaTokenId.COLON), getEndPosition(ct.getExpression()), 
currentIndent) : i; // TODO
                         currentIndent += cs.getIndentSize();
                     }
                 } else {
diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java
 
b/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java
index 7844e18854..63c21faf45 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java
@@ -318,16 +318,20 @@ public class ImmutableTreeTranslator implements 
TreeVisitor<Tree,Object> {
  * Visitor methods
  ****************************************************************************/
 
+    @Override
     public Tree visitCompilationUnit(CompilationUnitTree tree, Object p) {
        CompilationUnitTree result = rewriteChildren(tree);
         return result;
     }
+    @Override
     public Tree visitPackage(PackageTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitImport(ImportTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitClass(ClassTree tree, Object p) {
         Element oldSym = currentSym;
         importAnalysis.classEntered(tree);
@@ -337,6 +341,7 @@ public class ImmutableTreeTranslator implements 
TreeVisitor<Tree,Object> {
         currentSym = oldSym;
         return result;
     }
+    @Override
     public Tree visitMethod(MethodTree tree, Object p) {
         Element oldSym = currentSym;
         currentSym = model.getElement(tree);
@@ -345,6 +350,7 @@ public class ImmutableTreeTranslator implements 
TreeVisitor<Tree,Object> {
         return result;
     }
        
+    @Override
     public Tree visitVariable(VariableTree tree, Object p) {
         Element oldSym = currentSym;
         currentSym = model.getElement(tree);
@@ -353,105 +359,139 @@ public class ImmutableTreeTranslator implements 
TreeVisitor<Tree,Object> {
         return result;
     }
        
+    @Override
     public Tree visitEmptyStatement(EmptyStatementTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitBlock(BlockTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitUnionType(UnionTypeTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitDoWhileLoop(DoWhileLoopTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitWhileLoop(WhileLoopTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitForLoop(ForLoopTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitEnhancedForLoop(EnhancedForLoopTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitLabeledStatement(LabeledStatementTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitLambdaExpression(LambdaExpressionTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitSwitch(SwitchTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitCase(CaseTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitSynchronized(SynchronizedTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitTry(TryTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitCatch(CatchTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitConditionalExpression(ConditionalExpressionTree tree, 
Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitIf(IfTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitExpressionStatement(ExpressionStatementTree tree, Object 
p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitBreak(BreakTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitContinue(ContinueTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitReturn(ReturnTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitThrow(ThrowTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitAssert(AssertTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitMethodInvocation(MethodInvocationTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitNewClass(NewClassTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitNewArray(NewArrayTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitParenthesized(ParenthesizedTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitAssignment(AssignmentTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitCompoundAssignment(CompoundAssignmentTree tree, Object p) 
{
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitUnary(UnaryTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitBinary(BinaryTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitTypeCast(TypeCastTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitInstanceOf(InstanceOfTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitIntersectionType(IntersectionTypeTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitArrayAccess(ArrayAccessTree tree, Object p) {
        return rewriteChildren(tree);
     }
@@ -459,6 +499,7 @@ public class ImmutableTreeTranslator implements 
TreeVisitor<Tree,Object> {
     public Tree visitMemberReference(MemberReferenceTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitMemberSelect(MemberSelectTree tree, Object p) {
         if (tree instanceof QualIdentTree) {
             QualIdentTree qit = (QualIdentTree) tree;
@@ -477,75 +518,107 @@ public class ImmutableTreeTranslator implements 
TreeVisitor<Tree,Object> {
             return rewriteChildren(tree);
         }
     }
+    @Override
     public Tree visitIdentifier(IdentifierTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitLiteral(LiteralTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitPrimitiveType(PrimitiveTypeTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitArrayType(ArrayTypeTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitParameterizedType(ParameterizedTypeTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitTypeParameter(TypeParameterTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitWildcard(WildcardTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitAnnotatedType(AnnotatedTypeTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitAnnotation(AnnotationTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitModifiers(ModifiersTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitErroneous(ErroneousTree tree, Object p) {
        return rewriteChildren(tree);
     }
+    @Override
     public Tree visitModule(ModuleTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitExports(ExportsTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitOpens(OpensTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitProvides(ProvidesTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitRequires(RequiresTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitUses(UsesTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitBindingPattern(BindingPatternTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitDefaultCaseLabel(DefaultCaseLabelTree tree, Object p) {
         return rewriteChildren(tree);
     }
-    public Tree visitGuardedPattern(GuardedPatternTree tree, Object p) {
+    @Override
+    public Tree visitConstantCaseLabel(ConstantCaseLabelTree tree, Object p) {
+        return rewriteChildren(tree);
+    }
+    @Override
+    public Tree visitPatternCaseLabel(PatternCaseLabelTree tree, Object p) {
+        return rewriteChildren(tree);
+    }
+    @Override
+    public Tree visitDeconstructionPattern(DeconstructionPatternTree tree, 
Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitParenthesizedPattern(ParenthesizedPatternTree tree, 
Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitSwitchExpression(SwitchExpressionTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitYield(YieldTree tree, Object p) {
         return rewriteChildren(tree);
     }
+    @Override
     public Tree visitOther(Tree tree, Object p) {
        throw new Error("Tree not overloaded: "+tree);
     }
@@ -1429,15 +1502,40 @@ public class ImmutableTreeTranslator implements 
TreeVisitor<Tree,Object> {
         return tree;
     }
 
-    private GuardedPatternTree rewriteChildren(GuardedPatternTree tree) {
+    private ConstantCaseLabelTree rewriteChildren(ConstantCaseLabelTree tree) {
+        ExpressionTree newExpression = (ExpressionTree) 
translate(tree.getConstantExpression());
+        if (newExpression != tree.getConstantExpression()) {
+            ConstantCaseLabelTree n = make.ConstantCaseLabel(newExpression);
+            model.setType(n, model.getType(tree));
+            copyCommentTo(tree, n);
+            copyPosTo(tree, n);
+            tree = n;
+        }
+        return tree;
+    }
+
+    private PatternCaseLabelTree rewriteChildren(PatternCaseLabelTree tree) {
+        ExpressionTree newGuard = (ExpressionTree) translate(tree.getGuard());
         PatternTree newPattern = (PatternTree) translate(tree.getPattern());
-        ExpressionTree newGuard = (ExpressionTree) 
translate(tree.getExpression());
-        if (newPattern != tree.getPattern() ||
-            newGuard != tree.getExpression()) {
-            GuardedPatternTree n = make.GuardedPattern(newPattern, newGuard);
+        if (newGuard != tree.getGuard() || newPattern != tree.getPattern()) {
+            PatternCaseLabelTree n = make.PatternCaseLabel(newPattern, 
newGuard);
             model.setType(n, model.getType(tree));
-            copyCommentTo(tree,n);
-            copyPosTo(tree,n);
+            copyCommentTo(tree, n);
+            copyPosTo(tree, n);
+            tree = n;
+        }
+        return tree;
+    }
+
+    private DeconstructionPatternTree 
rewriteChildren(DeconstructionPatternTree tree) {
+        ExpressionTree newDeconstructor = (ExpressionTree) 
translate(tree.getDeconstructor());
+        List<? extends PatternTree> newNestedPatterns = 
translate(tree.getNestedPatterns());
+        VariableTree newVariable = (VariableTree) 
translate(tree.getVariable());
+        if (newDeconstructor != tree.getDeconstructor() || newVariable != 
tree.getVariable() || !Objects.equals(newNestedPatterns, 
tree.getNestedPatterns())) {
+            DeconstructionPatternTree n = 
make.DeconstructionPattern(newDeconstructor, newNestedPatterns, newVariable);
+            model.setType(n, model.getType(tree));
+            copyCommentTo(tree, n);
+            copyPosTo(tree, n);
             tree = n;
         }
         return tree;
diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/transform/TreeDuplicator.java
 
b/java/java.source.base/src/org/netbeans/modules/java/source/transform/TreeDuplicator.java
index 39c57437d9..35646e2c97 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/transform/TreeDuplicator.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/transform/TreeDuplicator.java
@@ -34,7 +34,9 @@ import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.CompilationUnitTree;
 import com.sun.source.tree.CompoundAssignmentTree;
 import com.sun.source.tree.ConditionalExpressionTree;
+import com.sun.source.tree.ConstantCaseLabelTree;
 import com.sun.source.tree.ContinueTree;
+import com.sun.source.tree.DeconstructionPatternTree;
 import com.sun.source.tree.DefaultCaseLabelTree;
 import com.sun.source.tree.DoWhileLoopTree;
 import com.sun.source.tree.EmptyStatementTree;
@@ -44,7 +46,6 @@ import com.sun.source.tree.ExportsTree;
 import com.sun.source.tree.ExpressionStatementTree;
 import com.sun.source.tree.ExpressionTree;
 import com.sun.source.tree.ForLoopTree;
-import com.sun.source.tree.GuardedPatternTree;
 import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.IfTree;
 import com.sun.source.tree.ImportTree;
@@ -66,6 +67,7 @@ import com.sun.source.tree.PackageTree;
 import com.sun.source.tree.ParameterizedTypeTree;
 import com.sun.source.tree.ParenthesizedPatternTree;
 import com.sun.source.tree.ParenthesizedTree;
+import com.sun.source.tree.PatternCaseLabelTree;
 import com.sun.source.tree.PrimitiveTypeTree;
 import com.sun.source.tree.ProvidesTree;
 import com.sun.source.tree.RequiresTree;
@@ -192,7 +194,9 @@ public class TreeDuplicator implements TreeVisitor<Tree, 
Void> {
 
     @Override
     public Tree visitCase(CaseTree tree, Void p) {
-        CaseTree n = make.Case(tree.getExpression(), tree.getStatements());
+        CaseTree n = tree.getCaseKind() == CaseTree.CaseKind.STATEMENT
+                ? make.Case(tree.getExpressions(), tree.getStatements())
+                : make.Case(tree.getExpressions(), tree.getBody());
         model.setType(n, model.getType(tree));
         comments.copyComments(tree, n);
         model.setPos(n, model.getPos(tree));
@@ -678,8 +682,26 @@ public class TreeDuplicator implements TreeVisitor<Tree, 
Void> {
     }
 
     @Override
-    public Tree visitGuardedPattern(GuardedPatternTree tree, Void p) {
-        GuardedPatternTree n = make.GuardedPattern(tree.getPattern(), 
tree.getExpression());
+    public Tree visitConstantCaseLabel(ConstantCaseLabelTree tree, Void p) {
+        ConstantCaseLabelTree n = 
make.ConstantCaseLabel(tree.getConstantExpression());
+        model.setType(n, model.getType(tree));
+        comments.copyComments(tree, n);
+        model.setPos(n, model.getPos(tree));
+        return n;
+    }
+
+    @Override
+    public Tree visitPatternCaseLabel(PatternCaseLabelTree tree, Void p) {
+        PatternCaseLabelTree n = make.PatternCaseLabel(tree.getPattern(), 
tree.getGuard());
+        model.setType(n, model.getType(tree));
+        comments.copyComments(tree, n);
+        model.setPos(n, model.getPos(tree));
+        return n;
+    }
+
+    @Override
+    public Tree visitDeconstructionPattern(DeconstructionPatternTree tree, 
Void p) {
+        DeconstructionPatternTree n = 
make.DeconstructionPattern(tree.getDeconstructor(), tree.getNestedPatterns(), 
tree.getVariable());
         model.setType(n, model.getType(tree));
         comments.copyComments(tree, n);
         model.setPos(n, model.getPos(tree));
diff --git 
a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/SwitchRuleFormattingTest.java
 
b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/SwitchRuleFormattingTest.java
index 0ef62eeb50..16d92c0b97 100644
--- 
a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/SwitchRuleFormattingTest.java
+++ 
b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/SwitchRuleFormattingTest.java
@@ -205,46 +205,42 @@ public void testSwitchRuleFormatting2() throws Exception {
                 SwitchTree switchBlock = (SwitchTree) ((BlockTree) 
method.getBody()).getStatements().get(0);
                 List<? extends CaseTree> cases;
                 List<ExpressionTree> patterns = new ArrayList<>();
-                if(switchBlock!=null){
+                if(switchBlock != null){
                 boolean switchExpressionFlag = switchBlock.getKind() == 
Kind.SWITCH_EXPRESSION;
-                if (switchExpressionFlag) {
-                    cases = ((SwitchExpressionTree) switchBlock).getCases();
-                } else {
-                    cases = ((SwitchTree) switchBlock).getCases();
-                }
-                for (Iterator<? extends CaseTree> it = cases.iterator(); 
it.hasNext();) {
-                    CaseTree ct = it.next();
-                    patterns.addAll(ct.getExpressions());
-                    List<StatementTree> statements;
-                    if (ct.getStatements() == null) {
-                        statements = new ArrayList<>(((JCTree.JCCase) 
ct).stats);
+                    if (switchExpressionFlag) {
+                        cases = ((SwitchExpressionTree) 
switchBlock).getCases();
                     } else {
-                        statements = new ArrayList<>(ct.getStatements());
-                        if(!statements.isEmpty() && 
statements.get(statements.size()-1) instanceof JCTree.JCBreak){
-                            statements.remove(statements.size()-1);
-                        }
+                        cases = ((SwitchTree) switchBlock).getCases();
                     }
-                    if (statements.isEmpty()) {
-                        if (it.hasNext()) {
-                            continue;
+                    for (Iterator<? extends CaseTree> it = cases.iterator(); 
it.hasNext();) {
+                        CaseTree ct = it.next();
+                        patterns.addAll(ct.getExpressions());
+                        List<StatementTree> statements;
+                        if (ct.getStatements() == null) {
+                            statements = new ArrayList<>(((JCTree.JCCase) 
ct).stats);
+                        } else {
+                            statements = new ArrayList<>(ct.getStatements());
+                            if(!statements.isEmpty() && 
statements.get(statements.size()-1) instanceof JCTree.JCBreak){
+                                statements.remove(statements.size()-1);
+                            }
                         }
-                    }
-                    Set<Element> seenVariables = new HashSet<>();
-                    int idx = 0;
-                    for (StatementTree statement : new 
ArrayList<>(statements)) {
-                        Tree body = make.Block(statements, false);
-                        if (statements.size() == 1) {
-                            if (statements.get(0).getKind() == 
Tree.Kind.EXPRESSION_STATEMENT
-                                    || statements.get(0).getKind() == 
Tree.Kind.THROW
-                                    || statements.get(0).getKind() == 
Tree.Kind.BLOCK) {
-                                body = statements.get(0);
+                        if (statements.isEmpty()) {
+                            if (it.hasNext()) {
+                                continue;
+                            }
+                        } else {
+                            Tree body = make.Block(statements, false);
+                            if (statements.size() == 1) {
+                                if (statements.get(0).getKind() == 
Tree.Kind.EXPRESSION_STATEMENT
+                                        || statements.get(0).getKind() == 
Tree.Kind.THROW
+                                        || statements.get(0).getKind() == 
Tree.Kind.BLOCK) {
+                                    body = statements.get(0);
+                                }
                             }
+                            newCases.add(make.Case(patterns, body));
+                            patterns = new ArrayList<>();
                         }
-                        newCases.add(make.Case(patterns, body));
-                        patterns = new ArrayList<>();
                     }
-                }
-                  
                     workingCopy.rewrite((SwitchTree) switchBlock , 
make.Switch(((SwitchTree) switchBlock).getExpression(), newCases));
                 }
             }
diff --git 
a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/SwitchTest.java
 
b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/SwitchTest.java
index ae896dbdd9..252714d433 100644
--- 
a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/SwitchTest.java
+++ 
b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/SwitchTest.java
@@ -289,7 +289,7 @@ public class SwitchTest extends GeneratorTestBase {
                              labels.remove(0);
                              return 
copy.getTreeMaker().CaseMultipleLabels(labels, tree.getStatements());
                          },
-                         "case " + /*XXX: too many spaces:*/ " " + "0, 1:"),
+                         "case 0, 1:"),
             new TestCase("case -1, 0, 1:",
                          (copy, tree) -> {
                              List<ExpressionTree> labels = new 
ArrayList<>(tree.getExpressions());
diff --git 
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java
 
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java
index d2ebd92e30..a55ea973d0 100644
--- 
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java
+++ 
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java
@@ -2853,7 +2853,7 @@ public class FormatingTest extends NbTestCase {
                 + "        Object str = \"pattern matching switch\";\n"
                 + "        switch (str) {\n"
                 + "case \n"
-                + "      String       s &&       s.length() == 1\n"
+                + "      String       s when       s.length() == 1\n"
                 + "                    \n"
                 + "                    ->\n"
                 + "                System.out.println(\"case with guarded 
pattern formatting\");\n"
@@ -2871,7 +2871,7 @@ public class FormatingTest extends NbTestCase {
                 + "    void testSwitchCaseGuardedPattern() {\n"
                 + "        Object str = \"pattern matching switch\";\n"
                 + "        switch (str) {\n"
-                + "            case String s && s.length() == 1 ->\n"
+                + "            case String s when s.length() == 1 ->\n"
                 + "                System.out.println(\"case with guarded 
pattern formatting\");\n"
                 + "            default ->\n"
                 + "                System.out.println(\"default 
formatting\");\n"
@@ -2903,7 +2903,7 @@ public class FormatingTest extends NbTestCase {
                 + "        switch (str) {\n"
                 + "case            \n"
                 + "                    null,\n"
-                + "      String       s &&       s.length() == 1\n"
+                + "      String       s when       s.length() == 1\n"
                 + "                    \n"
                 + "                    ->\n"
                 + "                System.out.println(\"case with null and 
guarded pattern formatting\");\n"
@@ -2921,7 +2921,7 @@ public class FormatingTest extends NbTestCase {
                 + "    void testSwitchCaseNullAndGuardedPattern() {\n"
                 + "        Object str = \"pattern matching switch\";\n"
                 + "        switch (str) {\n"
-                + "            case null, String s && s.length() == 1 ->\n"
+                + "            case null, String s when s.length() == 1 ->\n"
                 + "                System.out.println(\"case with null and 
guarded pattern formatting\");\n"
                 + "            default ->\n"
                 + "                System.out.println(\"default 
formatting\");\n"
@@ -3052,9 +3052,8 @@ public class FormatingTest extends NbTestCase {
                 + "        switch (str) {\n"
                 + "case \n"
                 + "        (String       \n"
-                + "        s       &&\n"
+                + "        s)       when\n"
                 + "        s.length() == 1\n"
-                + "        )\n"
                 + "                    \n"
                 + "                    ->\n"
                 + "                System.out.println(\"case with 
Parenthesized Guarded Pattern formatting\");default ->\n"
@@ -3071,7 +3070,7 @@ public class FormatingTest extends NbTestCase {
                 + "    void testSwitchCaseParenthesizedGuardedPattern() {\n"
                 + "        Object str = \"pattern matching switch\";\n"
                 + "        switch (str) {\n"
-                + "            case (String s && s.length() == 1) ->\n"
+                + "            case (String s) when s.length() == 1 ->\n"
                 + "                System.out.println(\"case with 
Parenthesized Guarded Pattern formatting\");\n"
                 + "            default ->\n"
                 + "                System.out.println(\"default 
formatting\");\n"
@@ -3103,9 +3102,9 @@ public class FormatingTest extends NbTestCase {
                 + "        switch (str) {\n"
                 + "case \n"
                 + "        (String       \n"
-                + "        s       &&\n"
+                + "        s)       when\n"
                 + "        s.length() == 1\n"
-                + "        ) , \n"
+                + "        , \n"
                 + "        null\n"
                 + "                    \n"
                 + "                    ->\n"
@@ -3123,7 +3122,7 @@ public class FormatingTest extends NbTestCase {
                 + "    void testSwitchCaseParenthesizedGuardedPatternAndNull() 
{\n"
                 + "        Object str = \"pattern matching switch\";\n"
                 + "        switch (str) {\n"
-                + "            case (String s && s.length() == 1) , null ->\n"
+                + "            case (String s) when s.length() == 1, null ->\n"
                 + "                System.out.println(\"case with 
Parenthesized Binding Pattern formatting\");\n"
                 + "            default ->\n"
                 + "                System.out.println(\"default 
formatting\");\n"
@@ -3134,58 +3133,6 @@ public class FormatingTest extends NbTestCase {
         reformat(doc, content, golden);
     }
    
-    public void 
testSwitchCaseGuardedPatternNestedParenthesizedPatternWithNull() throws 
Exception {
-        try {
-            SourceVersion.valueOf("RELEASE_17"); //NOI18N
-        } catch (IllegalArgumentException ex) {
-            //OK, no RELEASE_17, skip test
-            return;
-        }
-        testFile = new File(getWorkDir(), "Test.java");
-        TestUtilities.copyStringToFile(testFile, "");
-        FileObject testSourceFO = FileUtil.toFileObject(testFile);
-        DataObject testSourceDO = DataObject.find(testSourceFO);
-        EditorCookie ec = (EditorCookie) 
testSourceDO.getCookie(EditorCookie.class);
-        final Document doc = ec.openDocument();
-        doc.putProperty(Language.class, JavaTokenId.language());
-        String content = "package p;"
-                + "public class Test{    \n"
-                + "void 
testSwitchCaseGuardedPatternNestedParenthesizedPattern() {\n"
-                + "        Object str = \"pattern matching switch\";\n"
-                + "        switch (str) {\n"
-                + "case \n"
-                + "        (String       \n"
-                + "        s )      &&\n"
-                + "        s.length() == 1\n"
-                + "         , \n"
-                + "        null\n"
-                + "                    \n"
-                + "                    ->\n"
-                + "                
System.out.println(\"SwitchCaseGuardedPatternNestedParenthesizedPattern\");default
 ->\n"
-                + "                System.out.println(\"default 
formatting\");\n"
-                + "        }\n"
-                + "    }"
-                + "}";
-
-        String golden
-                = "package p;\n"
-                + "\n"
-                + "public class Test {\n"
-                + "\n"
-                + "    void 
testSwitchCaseGuardedPatternNestedParenthesizedPattern() {\n"
-                + "        Object str = \"pattern matching switch\";\n"
-                + "        switch (str) {\n"
-                + "            case (String s) && s.length() == 1 , null ->\n"
-                + "                
System.out.println(\"SwitchCaseGuardedPatternNestedParenthesizedPattern\");\n"
-                + "            default ->\n"
-                + "                System.out.println(\"default 
formatting\");\n"
-                + "        }\n"
-                + "    }\n"
-                + "}\n"
-                + "";
-        reformat(doc, content, golden);
-    }
-    
     public void testSwitchCaseGuardedPatternNestedParenthesizedPattern() 
throws Exception {
         try {
             SourceVersion.valueOf("RELEASE_17"); //NOI18N
@@ -3206,7 +3153,7 @@ public class FormatingTest extends NbTestCase {
                 + "        Object str = \"pattern matching switch\";\n"
                 + "        switch (str) {\n"
                 + "case (  \n"
-                + "                String s) && s.length() >= 2 && \n"
+                + "                String s) when s.length() >= 2 && \n"
                 + "                \n"
                 + "                            (s.contains(\"@\") || 
s.contains(\"!\")) \n"
                 + "                \n"
@@ -3225,7 +3172,7 @@ public class FormatingTest extends NbTestCase {
                 + "    void 
testSwitchCaseGuardedPatternNestedParenthesizedPattern() {\n"
                 + "        Object str = \"pattern matching switch\";\n"
                 + "        switch (str) {\n"
-                + "            case ( String s) && s.length() >= 2\n"
+                + "            case (String s) when s.length() >= 2\n"
                 + "            && (s.contains(\"@\") || s.contains(\"!\")) 
->\n"
                 + "                String.format(\"Valid string value is %s\", 
s);\n"
                 + "            default ->\n"
@@ -3260,11 +3207,11 @@ public class FormatingTest extends NbTestCase {
                 + "case null ->\n"
                 + "     System.out.println(\"case with null formatting\");\n"
                 + "  case String string\n"
-                + "          && (string.length()==  iso.filter(i -> i / 2 == 
0).count() || string.length() == 0)\n"
+                + "          when (string.length()==  iso.filter(i -> i / 2 == 
0).count() || string.length() == 0)\n"
                 + "          ->\n"
                 + "      System.out.println(\"case with pattern matching + 
condition + lambda expression formatting\");\n"
-                + "  case                  String s && s.length() == 1 
->System.out.println(\"case with pattern matching + condition formatting\");\n"
-                + "  case      (String s &&    true )-> \n"
+                + "  case                  String s when s.length() == 1 
->System.out.println(\"case with pattern matching + condition formatting\");\n"
+                + "  case      (String s )-> \n"
                 + "      System.out.println(\"case with pattern matching + 
condition formatting\");\n"
                 + "  case CharSequence\n"
                 + "          s ->\n"
@@ -3288,11 +3235,11 @@ public class FormatingTest extends NbTestCase {
                 + "        switch (str) {\n"
                 + "            case null ->\n"
                 + "                System.out.println(\"case with null 
formatting\");\n"
-                + "            case String string && (string.length() == 
iso.filter(i -> i / 2 == 0).count() || string.length() == 0) ->\n"
+                + "            case String string when (string.length() == 
iso.filter(i -> i / 2 == 0).count() || string.length() == 0) ->\n"
                 + "                System.out.println(\"case with pattern 
matching + condition + lambda expression formatting\");\n"
-                + "            case String s && s.length() == 1 ->\n"
+                + "            case String s when s.length() == 1 ->\n"
                 + "                System.out.println(\"case with pattern 
matching + condition formatting\");\n"
-                + "            case (String s && true) ->\n"
+                + "            case (String s) ->\n"
                 + "                System.out.println(\"case with pattern 
matching + condition formatting\");\n"
                 + "            case CharSequence s ->\n"
                 + "                System.out.println(\"case with pattern 
matching formatting\");\n"
@@ -3329,11 +3276,11 @@ public class FormatingTest extends NbTestCase {
                 + "case null ->\n"
                 + "     \"case with null formatting\";\n"
                 + "  case String string\n"
-                + "          && (string.length()==  iso.filter(i -> i / 2 == 
0).count() || string.length() == 0)\n"
+                + "          when (string.length()==  iso.filter(i -> i / 2 == 
0).count() || string.length() == 0)\n"
                 + "          ->\n"
                 + "      \"case with pattern matching + condition + lambda 
expression formatting\";\n"
-                + "  case                  String s && s.length() == 1 
->\"case with pattern matching + condition formatting\";\n"
-                + "  case      (String s &&    true )-> \n"
+                + "  case                  String s when s.length() == 1 
->\"case with pattern matching + condition formatting\";\n"
+                + "  case      (String s )-> \n"
                 + "      \"case with pattern matching + condition 
formatting\";\n"
                 + "  case CharSequence\n"
                 + "          s ->\n"
@@ -3357,11 +3304,11 @@ public class FormatingTest extends NbTestCase {
                 + "        String retVal = switch (str) {\n"
                 + "            case null ->\n"
                 + "                \"case with null formatting\";\n"
-                + "            case String string && (string.length() == 
iso.filter(i -> i / 2 == 0).count() || string.length() == 0) ->\n"
+                + "            case String string when (string.length() == 
iso.filter(i -> i / 2 == 0).count() || string.length() == 0) ->\n"
                 + "                \"case with pattern matching + condition + 
lambda expression formatting\";\n"
-                + "            case String s && s.length() == 1 ->\n"
+                + "            case String s when s.length() == 1 ->\n"
                 + "                \"case with pattern matching + condition 
formatting\";\n"
-                + "            case (String s && true) ->\n"
+                + "            case (String s) ->\n"
                 + "                \"case with pattern matching + condition 
formatting\";\n"
                 + "            case CharSequence s ->\n"
                 + "                \"case with pattern matching 
formatting\";\n"
diff --git a/java/java.source/nbproject/org-netbeans-modules-java-source.sig 
b/java/java.source/nbproject/org-netbeans-modules-java-source.sig
index 05ec978dc5..95f3426a40 100644
--- a/java/java.source/nbproject/org-netbeans-modules-java-source.sig
+++ b/java/java.source/nbproject/org-netbeans-modules-java-source.sig
@@ -27,7 +27,6 @@ meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitErroneous(com.sun.
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.tree.TreeVisitor%1})
-meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.tree.TreeVisitor%1})
@@ -108,7 +107,6 @@ meth public {com.sun.source.util.TreeScanner%0} 
visitErroneous(com.sun.source.tr
 meth public {com.sun.source.util.TreeScanner%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.util.TreeScanner%1})
-meth public {com.sun.source.util.TreeScanner%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.util.TreeScanner%1})
diff --git a/java/java.source/nbproject/project.properties 
b/java/java.source/nbproject/project.properties
index 627e2cdfba..b9bdb142b3 100644
--- a/java/java.source/nbproject/project.properties
+++ b/java/java.source/nbproject/project.properties
@@ -22,7 +22,7 @@ javadoc.name=Java Source
 javadoc.title=Java Source
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
-spec.version.base=0.182.0
+spec.version.base=0.183.0
 
test.qa-functional.cp.extra=${refactoring.java.dir}/modules/ext/nb-javac-api.jar
 test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:\
     ${o.n.core.dir}/lib/boot.jar:\
diff --git a/java/libs.javacapi/external/binaries-list 
b/java/libs.javacapi/external/binaries-list
index cb152e08fa..b42feac2b1 100644
--- a/java/libs.javacapi/external/binaries-list
+++ b/java/libs.javacapi/external/binaries-list
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-ECA15E615777CE6E7550F71EF312B8CEEBCBE0BD 
com.dukescript.nbjavac:nb-javac:jdk-18.0.1+10:api
-3AD512FBC8830D89AC70D0CA59397C4868789DCC 
com.dukescript.nbjavac:nb-javac:jdk-18.0.1+10
+DBA592C75DD52B97EC88A6B06ADF71D4F3C3DED9 
com.dukescript.nbjavac:nb-javac:jdk-19+33:api
+A36688EDA1DE51508A039AED3518771C6F75E416 
com.dukescript.nbjavac:nb-javac:jdk-19+33
diff --git a/java/libs.javacapi/external/nb-javac-jdk-18.0.1+10-license.txt 
b/java/libs.javacapi/external/nb-javac-jdk-19+33-license.txt
similarity index 99%
rename from java/libs.javacapi/external/nb-javac-jdk-18.0.1+10-license.txt
rename to java/libs.javacapi/external/nb-javac-jdk-19+33-license.txt
index 2329bc0bf7..8123b5ff80 100644
--- a/java/libs.javacapi/external/nb-javac-jdk-18.0.1+10-license.txt
+++ b/java/libs.javacapi/external/nb-javac-jdk-19+33-license.txt
@@ -1,10 +1,10 @@
 Name: Javac Compiler Implementation
 Description: Javac Compiler Implementation
-Version: 18.0.1+10
-Files: nb-javac-jdk-18.0.1+10-api.jar nb-javac-jdk-18.0.1+10.jar
+Version: jdk-19+33
+Files: nb-javac-jdk-19+33-api.jar nb-javac-jdk-19+33.jar
 License: GPL-2-CP
-Origin: OpenJDK (https://github.com/openjdk/jdk18)
-Source: https://github.com/openjdk/jdk18
+Origin: OpenJDK (https://github.com/openjdk/jdk19)
+Source: https://github.com/openjdk/jdk19
 Type: optional,reviewed
 Comment: The binary has been reviewed to be under the Classpath Exception as a 
whole. Optional at runtime, but used by default.
 
diff --git a/java/libs.javacapi/nbproject/org-netbeans-libs-javacapi.sig 
b/java/libs.javacapi/nbproject/org-netbeans-libs-javacapi.sig
index e3a6abe47d..808227321f 100644
--- a/java/libs.javacapi/nbproject/org-netbeans-libs-javacapi.sig
+++ b/java/libs.javacapi/nbproject/org-netbeans-libs-javacapi.sig
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 8.39.0
+#Version 8.41.0
 
 CLSS public abstract interface com.sun.source.doctree.AttributeTree
 innr public final static !enum ValueKind
@@ -380,10 +380,20 @@ meth public abstract com.sun.source.tree.ExpressionTree 
getCondition()
 meth public abstract com.sun.source.tree.ExpressionTree getFalseExpression()
 meth public abstract com.sun.source.tree.ExpressionTree getTrueExpression()
 
+CLSS public abstract interface com.sun.source.tree.ConstantCaseLabelTree
+intf com.sun.source.tree.CaseLabelTree
+meth public abstract com.sun.source.tree.ExpressionTree getConstantExpression()
+
 CLSS public abstract interface com.sun.source.tree.ContinueTree
 intf com.sun.source.tree.StatementTree
 meth public abstract javax.lang.model.element.Name getLabel()
 
+CLSS public abstract interface com.sun.source.tree.DeconstructionPatternTree
+intf com.sun.source.tree.PatternTree
+meth public abstract com.sun.source.tree.ExpressionTree getDeconstructor()
+meth public abstract com.sun.source.tree.VariableTree getVariable()
+meth public abstract java.util.List<? extends com.sun.source.tree.PatternTree> 
getNestedPatterns()
+
 CLSS public abstract interface com.sun.source.tree.DefaultCaseLabelTree
 intf com.sun.source.tree.CaseLabelTree
 
@@ -418,7 +428,6 @@ intf com.sun.source.tree.StatementTree
 meth public abstract com.sun.source.tree.ExpressionTree getExpression()
 
 CLSS public abstract interface com.sun.source.tree.ExpressionTree
-intf com.sun.source.tree.CaseLabelTree
 intf com.sun.source.tree.Tree
 
 CLSS public abstract interface com.sun.source.tree.ForLoopTree
@@ -428,11 +437,6 @@ meth public abstract com.sun.source.tree.StatementTree 
getStatement()
 meth public abstract java.util.List<? extends 
com.sun.source.tree.ExpressionStatementTree> getUpdate()
 meth public abstract java.util.List<? extends 
com.sun.source.tree.StatementTree> getInitializer()
 
-CLSS public abstract interface com.sun.source.tree.GuardedPatternTree
-intf com.sun.source.tree.PatternTree
-meth public abstract com.sun.source.tree.ExpressionTree getExpression()
-meth public abstract com.sun.source.tree.PatternTree getPattern()
-
 CLSS public abstract interface com.sun.source.tree.IdentifierTree
 intf com.sun.source.tree.ExpressionTree
 meth public abstract javax.lang.model.element.Name getName()
@@ -587,8 +591,12 @@ CLSS public abstract interface 
com.sun.source.tree.ParenthesizedTree
 intf com.sun.source.tree.ExpressionTree
 meth public abstract com.sun.source.tree.ExpressionTree getExpression()
 
-CLSS public abstract interface com.sun.source.tree.PatternTree
+CLSS public abstract interface com.sun.source.tree.PatternCaseLabelTree
 intf com.sun.source.tree.CaseLabelTree
+meth public abstract com.sun.source.tree.ExpressionTree getGuard()
+meth public abstract com.sun.source.tree.PatternTree getPattern()
+
+CLSS public abstract interface com.sun.source.tree.PatternTree
 intf com.sun.source.tree.Tree
 
 CLSS public abstract interface com.sun.source.tree.PrimitiveTypeTree
@@ -667,7 +675,9 @@ fld public final static com.sun.source.tree.Tree$Kind 
COMPILATION_UNIT
 fld public final static com.sun.source.tree.Tree$Kind CONDITIONAL_AND
 fld public final static com.sun.source.tree.Tree$Kind CONDITIONAL_EXPRESSION
 fld public final static com.sun.source.tree.Tree$Kind CONDITIONAL_OR
+fld public final static com.sun.source.tree.Tree$Kind CONSTANT_CASE_LABEL
 fld public final static com.sun.source.tree.Tree$Kind CONTINUE
+fld public final static com.sun.source.tree.Tree$Kind DECONSTRUCTION_PATTERN
 fld public final static com.sun.source.tree.Tree$Kind DEFAULT_CASE_LABEL
 fld public final static com.sun.source.tree.Tree$Kind DIVIDE
 fld public final static com.sun.source.tree.Tree$Kind DIVIDE_ASSIGNMENT
@@ -685,7 +695,6 @@ fld public final static com.sun.source.tree.Tree$Kind 
FLOAT_LITERAL
 fld public final static com.sun.source.tree.Tree$Kind FOR_LOOP
 fld public final static com.sun.source.tree.Tree$Kind GREATER_THAN
 fld public final static com.sun.source.tree.Tree$Kind GREATER_THAN_EQUAL
-fld public final static com.sun.source.tree.Tree$Kind GUARDED_PATTERN
 fld public final static com.sun.source.tree.Tree$Kind IDENTIFIER
 fld public final static com.sun.source.tree.Tree$Kind IF
 fld public final static com.sun.source.tree.Tree$Kind IMPORT
@@ -723,6 +732,7 @@ fld public final static com.sun.source.tree.Tree$Kind 
PACKAGE
 fld public final static com.sun.source.tree.Tree$Kind PARAMETERIZED_TYPE
 fld public final static com.sun.source.tree.Tree$Kind PARENTHESIZED
 fld public final static com.sun.source.tree.Tree$Kind PARENTHESIZED_PATTERN
+fld public final static com.sun.source.tree.Tree$Kind PATTERN_CASE_LABEL
 fld public final static com.sun.source.tree.Tree$Kind PLUS
 fld public final static com.sun.source.tree.Tree$Kind PLUS_ASSIGNMENT
 fld public final static com.sun.source.tree.Tree$Kind POSTFIX_DECREMENT
@@ -783,7 +793,9 @@ meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitClass(com.sun.sour
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.tree.TreeVisitor%1})
@@ -792,7 +804,6 @@ meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitErroneous(com.sun.
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.tree.TreeVisitor%1})
-meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.tree.TreeVisitor%1})
@@ -815,6 +826,7 @@ meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitPackage(com.sun.so
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.tree.TreeVisitor%1})
+meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.tree.TreeVisitor%1})
@@ -1117,7 +1129,9 @@ meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitClass(com.sun.source.
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.util.SimpleTreeVisitor%1})
+meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.util.SimpleTreeVisitor%1})
+meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.util.SimpleTreeVisitor%1})
@@ -1126,7 +1140,6 @@ meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitErroneous(com.sun.sou
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.util.SimpleTreeVisitor%1})
-meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.util.SimpleTreeVisitor%1})
@@ -1149,6 +1162,7 @@ meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitPackage(com.sun.sourc
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.util.SimpleTreeVisitor%1})
+meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.util.SimpleTreeVisitor%1})
 meth public {com.sun.source.util.SimpleTreeVisitor%0} 
visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.util.SimpleTreeVisitor%1})
@@ -1247,7 +1261,9 @@ meth public {com.sun.source.util.TreeScanner%0} 
visitClass(com.sun.source.tree.C
 meth public {com.sun.source.util.TreeScanner%0} 
visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} 
visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} 
visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.util.TreeScanner%1})
@@ -1256,7 +1272,6 @@ meth public {com.sun.source.util.TreeScanner%0} 
visitErroneous(com.sun.source.tr
 meth public {com.sun.source.util.TreeScanner%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.util.TreeScanner%1})
-meth public {com.sun.source.util.TreeScanner%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.util.TreeScanner%1})
@@ -1279,6 +1294,7 @@ meth public {com.sun.source.util.TreeScanner%0} 
visitPackage(com.sun.source.tree
 meth public {com.sun.source.util.TreeScanner%0} 
visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{com.sun.source.util.TreeScanner%1})
+meth public {com.sun.source.util.TreeScanner%0} 
visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.util.TreeScanner%1})
@@ -1584,6 +1600,7 @@ fld public final static javax.lang.model.SourceVersion 
RELEASE_15
 fld public final static javax.lang.model.SourceVersion RELEASE_16
 fld public final static javax.lang.model.SourceVersion RELEASE_17
 fld public final static javax.lang.model.SourceVersion RELEASE_18
+fld public final static javax.lang.model.SourceVersion RELEASE_19
 fld public final static javax.lang.model.SourceVersion RELEASE_2
 fld public final static javax.lang.model.SourceVersion RELEASE_3
 fld public final static javax.lang.model.SourceVersion RELEASE_4
@@ -1676,8 +1693,12 @@ fld public final static 
javax.lang.model.element.ElementKind RESOURCE_VARIABLE
 fld public final static javax.lang.model.element.ElementKind STATIC_INIT
 fld public final static javax.lang.model.element.ElementKind TYPE_PARAMETER
 meth public boolean isClass()
+meth public boolean isDeclaredType()
+meth public boolean isExecutable()
 meth public boolean isField()
+meth public boolean isInitializer()
 meth public boolean isInterface()
+meth public boolean isVariable()
 meth public static javax.lang.model.element.ElementKind 
valueOf(java.lang.String)
 meth public static javax.lang.model.element.ElementKind[] values()
 supr java.lang.Enum<javax.lang.model.element.ElementKind>
@@ -2024,7 +2045,7 @@ meth public abstract javax.lang.model.type.TypeMirror 
getExtendsBound()
 meth public abstract javax.lang.model.type.TypeMirror getSuperBound()
 
 CLSS public abstract javax.lang.model.util.AbstractAnnotationValueVisitor14<%0 
extends java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 supr 
javax.lang.model.util.AbstractAnnotationValueVisitor9<{javax.lang.model.util.AbstractAnnotationValueVisitor14%0},{javax.lang.model.util.AbstractAnnotationValueVisitor14%1}>
 
@@ -2055,7 +2076,7 @@ cons protected init()
 supr 
javax.lang.model.util.AbstractAnnotationValueVisitor8<{javax.lang.model.util.AbstractAnnotationValueVisitor9%0},{javax.lang.model.util.AbstractAnnotationValueVisitor9%1}>
 
 CLSS public abstract javax.lang.model.util.AbstractElementVisitor14<%0 extends 
java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 meth public abstract {javax.lang.model.util.AbstractElementVisitor14%0} 
visitRecordComponent(javax.lang.model.element.RecordComponentElement,{javax.lang.model.util.AbstractElementVisitor14%1})
 supr 
javax.lang.model.util.AbstractElementVisitor9<{javax.lang.model.util.AbstractElementVisitor14%0},{javax.lang.model.util.AbstractElementVisitor14%1}>
@@ -2090,7 +2111,7 @@ meth public abstract 
{javax.lang.model.util.AbstractElementVisitor9%0} visitModu
 supr 
javax.lang.model.util.AbstractElementVisitor8<{javax.lang.model.util.AbstractElementVisitor9%0},{javax.lang.model.util.AbstractElementVisitor9%1}>
 
 CLSS public abstract javax.lang.model.util.AbstractTypeVisitor14<%0 extends 
java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 supr 
javax.lang.model.util.AbstractTypeVisitor9<{javax.lang.model.util.AbstractTypeVisitor14%0},{javax.lang.model.util.AbstractTypeVisitor14%1}>
 
@@ -2148,7 +2169,7 @@ supr java.lang.Object
 hfds 
CONSTRUCTOR_KIND,FIELD_KINDS,METHOD_KIND,MODULE_KIND,PACKAGE_KIND,RECORD_COMPONENT_KIND,TYPE_KINDS
 
 CLSS public javax.lang.model.util.ElementKindVisitor14<%0 extends 
java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 cons protected init({javax.lang.model.util.ElementKindVisitor14%0})
 meth public {javax.lang.model.util.ElementKindVisitor14%0} 
visitRecordComponent(javax.lang.model.element.RecordComponentElement,{javax.lang.model.util.ElementKindVisitor14%1})
@@ -2208,7 +2229,7 @@ meth public {javax.lang.model.util.ElementKindVisitor9%0} 
visitModule(javax.lang
 supr 
javax.lang.model.util.ElementKindVisitor8<{javax.lang.model.util.ElementKindVisitor9%0},{javax.lang.model.util.ElementKindVisitor9%1}>
 
 CLSS public javax.lang.model.util.ElementScanner14<%0 extends 
java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 cons protected init({javax.lang.model.util.ElementScanner14%0})
 meth public {javax.lang.model.util.ElementScanner14%0} 
visitExecutable(javax.lang.model.element.ExecutableElement,{javax.lang.model.util.ElementScanner14%1})
@@ -2299,7 +2320,7 @@ meth public static 
javax.lang.model.util.Elements$Origin[] values()
 supr java.lang.Enum<javax.lang.model.util.Elements$Origin>
 
 CLSS public javax.lang.model.util.SimpleAnnotationValueVisitor14<%0 extends 
java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 cons protected init({javax.lang.model.util.SimpleAnnotationValueVisitor14%0})
 supr 
javax.lang.model.util.SimpleAnnotationValueVisitor9<{javax.lang.model.util.SimpleAnnotationValueVisitor14%0},{javax.lang.model.util.SimpleAnnotationValueVisitor14%1}>
@@ -2348,7 +2369,7 @@ cons protected 
init({javax.lang.model.util.SimpleAnnotationValueVisitor9%0})
 supr 
javax.lang.model.util.SimpleAnnotationValueVisitor8<{javax.lang.model.util.SimpleAnnotationValueVisitor9%0},{javax.lang.model.util.SimpleAnnotationValueVisitor9%1}>
 
 CLSS public javax.lang.model.util.SimpleElementVisitor14<%0 extends 
java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 cons protected init({javax.lang.model.util.SimpleElementVisitor14%0})
 meth public {javax.lang.model.util.SimpleElementVisitor14%0} 
visitRecordComponent(javax.lang.model.element.RecordComponentElement,{javax.lang.model.util.SimpleElementVisitor14%1})
@@ -2392,7 +2413,7 @@ meth public 
{javax.lang.model.util.SimpleElementVisitor9%0} visitModule(javax.la
 supr 
javax.lang.model.util.SimpleElementVisitor8<{javax.lang.model.util.SimpleElementVisitor9%0},{javax.lang.model.util.SimpleElementVisitor9%1}>
 
 CLSS public javax.lang.model.util.SimpleTypeVisitor14<%0 extends 
java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 cons protected init({javax.lang.model.util.SimpleTypeVisitor14%0})
 supr 
javax.lang.model.util.SimpleTypeVisitor9<{javax.lang.model.util.SimpleTypeVisitor14%0},{javax.lang.model.util.SimpleTypeVisitor14%1}>
@@ -2439,7 +2460,7 @@ cons protected 
init({javax.lang.model.util.SimpleTypeVisitor9%0})
 supr 
javax.lang.model.util.SimpleTypeVisitor8<{javax.lang.model.util.SimpleTypeVisitor9%0},{javax.lang.model.util.SimpleTypeVisitor9%1}>
 
 CLSS public javax.lang.model.util.TypeKindVisitor14<%0 extends 
java.lang.Object, %1 extends java.lang.Object>
- anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_18)
+ anno 0 
javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion
 value=RELEASE_19)
 cons protected init()
 cons protected init({javax.lang.model.util.TypeKindVisitor14%0})
 supr 
javax.lang.model.util.TypeKindVisitor9<{javax.lang.model.util.TypeKindVisitor14%0},{javax.lang.model.util.TypeKindVisitor14%1}>
diff --git a/java/libs.javacapi/nbproject/project.properties 
b/java/libs.javacapi/nbproject/project.properties
index a988ae1bf6..f7f3deb603 100644
--- a/java/libs.javacapi/nbproject/project.properties
+++ b/java/libs.javacapi/nbproject/project.properties
@@ -20,6 +20,6 @@ is.autoload=true
 javadoc.title=Javac API
 nbm.homepage=http://jackpot.netbeans.org/
 nbm.module.author=Petr Hrebejk
-spec.version.base=8.40.0
+spec.version.base=8.41.0
 javadoc.arch=${basedir}/arch.xml
 module.javadoc.packages=com.sun.source.tree,com.sun.source.util
diff --git a/java/libs.javacapi/nbproject/project.xml 
b/java/libs.javacapi/nbproject/project.xml
index 905d81bf35..35901e2eb3 100644
--- a/java/libs.javacapi/nbproject/project.xml
+++ b/java/libs.javacapi/nbproject/project.xml
@@ -40,11 +40,11 @@
             </public-packages>
             <class-path-extension>
                 <runtime-relative-path />
-                
<binary-origin>external/nb-javac-jdk-18.0.1+10-api.jar</binary-origin>
+                
<binary-origin>external/nb-javac-jdk-19+33-api.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path />
-                
<binary-origin>external/nb-javac-jdk-18.0.1+10.jar</binary-origin>
+                <binary-origin>external/nb-javac-jdk-19+33.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git a/java/libs.nbjavacapi/external/binaries-list 
b/java/libs.nbjavacapi/external/binaries-list
index cb152e08fa..b42feac2b1 100644
--- a/java/libs.nbjavacapi/external/binaries-list
+++ b/java/libs.nbjavacapi/external/binaries-list
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-ECA15E615777CE6E7550F71EF312B8CEEBCBE0BD 
com.dukescript.nbjavac:nb-javac:jdk-18.0.1+10:api
-3AD512FBC8830D89AC70D0CA59397C4868789DCC 
com.dukescript.nbjavac:nb-javac:jdk-18.0.1+10
+DBA592C75DD52B97EC88A6B06ADF71D4F3C3DED9 
com.dukescript.nbjavac:nb-javac:jdk-19+33:api
+A36688EDA1DE51508A039AED3518771C6F75E416 
com.dukescript.nbjavac:nb-javac:jdk-19+33
diff --git a/java/libs.nbjavacapi/external/nb-javac-jdk-18.0.1+10-license.txt 
b/java/libs.nbjavacapi/external/nb-javac-jdk-19+33-license.txt
similarity index 99%
rename from java/libs.nbjavacapi/external/nb-javac-jdk-18.0.1+10-license.txt
rename to java/libs.nbjavacapi/external/nb-javac-jdk-19+33-license.txt
index 6d324e9cf5..770d20b881 100644
--- a/java/libs.nbjavacapi/external/nb-javac-jdk-18.0.1+10-license.txt
+++ b/java/libs.nbjavacapi/external/nb-javac-jdk-19+33-license.txt
@@ -1,10 +1,10 @@
 Name: Javac Compiler Implementation
 Description: Javac Compiler Implementation
-Files: nb-javac-jdk-18.0.1+10-api.jar nb-javac-jdk-18.0.1+10.jar
-Version: jdk-18.0.1+10
+Files: nb-javac-jdk-19+33-api.jar nb-javac-jdk-19+33.jar
+Version: jdk-19+33
 License: GPL-2-CP
-Origin: OpenJDK (https://github.com/openjdk/jdk18)
-Source: https://github.com/openjdk/jdk18
+Origin: OpenJDK (https://github.com/openjdk/jdk19)
+Source: https://github.com/openjdk/jdk19
 Type: compile-time,optional
 Comment: Used at compile and design time to compile against; optional at 
runtime.
 
diff --git a/java/libs.nbjavacapi/manifest.mf b/java/libs.nbjavacapi/manifest.mf
index 5debd3fc6d..3310a0fddd 100644
--- a/java/libs.nbjavacapi/manifest.mf
+++ b/java/libs.nbjavacapi/manifest.mf
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 AutoUpdate-Show-In-Client: true
 OpenIDE-Module: org.netbeans.libs.nbjavacapi
 OpenIDE-Module-Localizing-Bundle: 
org/netbeans/modules/nbjavac/api/Bundle.properties
-OpenIDE-Module-Specification-Version: 18.2
+OpenIDE-Module-Specification-Version: 19.0
 OpenIDE-Module-Hide-Classpath-Packages: com.sun.javadoc.**, com.sun.source.**, 
javax.annotation.processing.**, javax.lang.model.**, javax.tools.**, 
com.sun.tools.javac.** com.sun.tools.javac.**, com.sun.tools.javadoc.**, 
com.sun.tools.javap.**, com.sun.tools.classfile.**, com.sun.tools.doclint.**
 OpenIDE-Module-Fragment-Host: org.netbeans.libs.javacapi
 OpenIDE-Module-Provides: org.netbeans.libs.nbjavac
diff --git a/java/libs.nbjavacapi/nbproject/project.properties 
b/java/libs.nbjavacapi/nbproject/project.properties
index 1bd61ee27f..f48dd15bac 100644
--- a/java/libs.nbjavacapi/nbproject/project.properties
+++ b/java/libs.nbjavacapi/nbproject/project.properties
@@ -18,5 +18,5 @@
 javac.source=1.7
 javac.compilerargs=-Xlint -Xlint:-serial
 license.file.override=${nb_all}/nbbuild/licenses/GPL-2-CP
-release.external/nb-javac-jdk-18.0.1+10-api.jar=modules/ext/nb-javac-jdk-18-api.jar
-release.external/nb-javac-jdk-18.0.1+10.jar=modules/ext/nb-javac-jdk-18.jar
+release.external/nb-javac-jdk-19+33-api.jar=modules/ext/nb-javac-jdk-19-api.jar
+release.external/nb-javac-jdk-19+33.jar=modules/ext/nb-javac-jdk-19.jar
diff --git a/java/libs.nbjavacapi/nbproject/project.xml 
b/java/libs.nbjavacapi/nbproject/project.xml
index 7dc8a083b2..5b801b83fb 100644
--- a/java/libs.nbjavacapi/nbproject/project.xml
+++ b/java/libs.nbjavacapi/nbproject/project.xml
@@ -36,12 +36,12 @@
             </module-dependencies>
             <public-packages/>
             <class-path-extension>
-                
<runtime-relative-path>ext/nb-javac-jdk-18-api.jar</runtime-relative-path>
-                
<binary-origin>external/nb-javac-jdk-18.0.1+10-api.jar</binary-origin>
+                
<runtime-relative-path>ext/nb-javac-jdk-19-api.jar</runtime-relative-path>
+                
<binary-origin>external/nb-javac-jdk-19+33-api.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                
<runtime-relative-path>ext/nb-javac-jdk-18.jar</runtime-relative-path>
-                
<binary-origin>external/nb-javac-jdk-18.0.1+10.jar</binary-origin>
+                
<runtime-relative-path>ext/nb-javac-jdk-19.jar</runtime-relative-path>
+                <binary-origin>external/nb-javac-jdk-19+33.jar</binary-origin>
             </class-path-extension>
         </data>
     </configuration>
diff --git 
a/java/libs.nbjavacapi/src/org/netbeans/modules/nbjavac/api/Bundle.properties 
b/java/libs.nbjavacapi/src/org/netbeans/modules/nbjavac/api/Bundle.properties
index c5c441aaf1..e9a4b6bdf4 100644
--- 
a/java/libs.nbjavacapi/src/org/netbeans/modules/nbjavac/api/Bundle.properties
+++ 
b/java/libs.nbjavacapi/src/org/netbeans/modules/nbjavac/api/Bundle.properties
@@ -18,6 +18,6 @@
 OpenIDE-Module-Display-Category=Java
 OpenIDE-Module-Long-Description=\
     This library provides a Java language parser for the IDE. \
-    Supports JDK-18 features.
+    Supports JDK-19 features.
 OpenIDE-Module-Name=The nb-javac Java editing support library
 OpenIDE-Module-Short-Description=The nb-javac Java editing support library
diff --git 
a/java/refactoring.java/nbproject/org-netbeans-modules-refactoring-java.sig 
b/java/refactoring.java/nbproject/org-netbeans-modules-refactoring-java.sig
index bc7ee9eade..26adf5aa7f 100644
--- a/java/refactoring.java/nbproject/org-netbeans-modules-refactoring-java.sig
+++ b/java/refactoring.java/nbproject/org-netbeans-modules-refactoring-java.sig
@@ -66,7 +66,6 @@ meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitErroneous(com.sun.
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.tree.TreeVisitor%1})
-meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.tree.TreeVisitor%1})
 meth public abstract {com.sun.source.tree.TreeVisitor%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.tree.TreeVisitor%1})
@@ -147,7 +146,6 @@ meth public {com.sun.source.util.TreeScanner%0} 
visitErroneous(com.sun.source.tr
 meth public {com.sun.source.util.TreeScanner%0} 
visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.util.TreeScanner%1})
-meth public {com.sun.source.util.TreeScanner%0} 
visitGuardedPattern(com.sun.source.tree.GuardedPatternTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitIf(com.sun.source.tree.IfTree,{com.sun.source.util.TreeScanner%1})
 meth public {com.sun.source.util.TreeScanner%0} 
visitImport(com.sun.source.tree.ImportTree,{com.sun.source.util.TreeScanner%1})
diff --git a/java/refactoring.java/nbproject/project.properties 
b/java/refactoring.java/nbproject/project.properties
index bc377cf795..e21b31afd2 100644
--- a/java/refactoring.java/nbproject/project.properties
+++ b/java/refactoring.java/nbproject/project.properties
@@ -18,7 +18,7 @@ javac.source=1.8
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 
-spec.version.base=1.79.0
+spec.version.base=1.80.0
 #test configs
 test.config.find.includes=\
     **/FindUsagesSuite.class
diff --git 
a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java
 
b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java
index dab12e1323..b0accad67d 100644
--- 
a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java
+++ 
b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java
@@ -74,6 +74,7 @@ import com.sun.tools.javac.tree.JCTree;
 import com.sun.tools.javac.tree.JCTree.JCCase;
 import com.sun.tools.javac.tree.JCTree.JCCatch;
 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
+import com.sun.tools.javac.tree.JCTree.JCConstantCaseLabel;
 import com.sun.tools.javac.tree.JCTree.JCExpression;
 import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
 import com.sun.tools.javac.tree.JCTree.JCIdent;
@@ -1444,9 +1445,9 @@ public class Utilities {
                         }
 
                         JCIdent identTree = F.at(pos).Ident(name);
-
+                        JCConstantCaseLabel labelTree = 
F.at(pos).ConstantCaseLabel(identTree);
                         return com.sun.tools.javac.util.List.of(
-                                new JackpotTrees.CaseWildcard(name, identTree, 
STATEMENT, com.sun.tools.javac.util.List.of(identTree), 
com.sun.tools.javac.util.List.nil(), null)
+                                new JackpotTrees.CaseWildcard(name, identTree, 
STATEMENT, com.sun.tools.javac.util.List.of(labelTree), 
com.sun.tools.javac.util.List.nil(), null)
                         );
                     }
                 }
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps 
b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
index 9553042e08..07ff8afd0e 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
@@ -118,8 +118,8 @@ webcommon/javascript2.jsdoc/external/testfiles-jsdoc-1.zip 
webcommon/javascript2
 harness/apisupport.harness/external/launcher-12.5-distribution.zip 
platform/o.n.bootstrap/external/launcher-12.5-distribution.zip
 
 # only one is part of the product:
-java/libs.javacapi/external/nb-javac-jdk-18.0.1+10-api.jar 
java/libs.nbjavacapi/external/nb-javac-jdk-18.0.1+10-api.jar
-java/libs.javacapi/external/nb-javac-jdk-18.0.1+10.jar 
java/libs.nbjavacapi/external/nb-javac-jdk-18.0.1+10.jar
+java/libs.javacapi/external/nb-javac-jdk-19+33-api.jar 
java/libs.nbjavacapi/external/nb-javac-jdk-19+33-api.jar
+java/libs.javacapi/external/nb-javac-jdk-19+33.jar 
java/libs.nbjavacapi/external/nb-javac-jdk-19+33.jar
 
 # Maven and Gradle are self-contained distributions - ignoring overlaps
 platform/o.apache.commons.lang3/external/commons-lang3-3.8.1.jar 
java/maven.embedder/external/apache-maven-3.8.6-bin.zip


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to