From 73d2686bc26cbba41eb8bd1dd22d40de6cb4128a Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Sat, 24 Jun 2023 16:51:39 +0200 Subject: [PATCH] [jdk21] Add support for new guard field in JCCase --- src/delombok/lombok/delombok/PrettyPrinter.java | 6 ++++++ src/utils/lombok/javac/JavacTreeMaker.java | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/delombok/lombok/delombok/PrettyPrinter.java b/src/delombok/lombok/delombok/PrettyPrinter.java index bcf19f43..d7434454 100644 --- a/src/delombok/lombok/delombok/PrettyPrinter.java +++ b/src/delombok/lombok/delombok/PrettyPrinter.java @@ -1355,6 +1355,12 @@ public class PrettyPrinter extends JCTree.Visitor { } else { aPrint("case "); print(pats, ", "); + + JCExpression guard = readObject(tree, "guard", null); // JDK 21+ + if (guard != null) { + print(" when "); + print(guard); + } } Enum caseKind = readObject(tree, "caseKind", null); // JDK 12+ diff --git a/src/utils/lombok/javac/JavacTreeMaker.java b/src/utils/lombok/javac/JavacTreeMaker.java index 09855951..04f0e208 100644 --- a/src/utils/lombok/javac/JavacTreeMaker.java +++ b/src/utils/lombok/javac/JavacTreeMaker.java @@ -589,9 +589,10 @@ public class JavacTreeMaker { //javac versions: 6-11 private static final MethodId Case11 = MethodId("Case", JCCase.class, JCExpression.class, com.sun.tools.javac.util.List.class); //javac version: 12+ - public static class Case12 { + public static class Case { private static final Class CASE_KIND_CLASS = classForName(TreeMaker.class, "com.sun.source.tree.CaseTree$CaseKind"); static final MethodId Case12 = MethodId("Case", JCCase.class, CASE_KIND_CLASS, com.sun.tools.javac.util.List.class, com.sun.tools.javac.util.List.class, JCTree.class); + static final MethodId Case21 = MethodId("Case", JCCase.class, CASE_KIND_CLASS, com.sun.tools.javac.util.List.class, JCExpression.class, com.sun.tools.javac.util.List.class, JCTree.class); static final Object CASE_KIND_STATEMENT = CASE_KIND_CLASS.getEnumConstants()[0]; } @@ -615,7 +616,10 @@ public class JavacTreeMaker { } else { labels = List.of(pat); } - return invoke(Case12.Case12, Case12.CASE_KIND_STATEMENT, labels, stats, null); + if (tryResolve(Case.Case12)) { + return invoke(Case.Case12, Case.CASE_KIND_STATEMENT, labels, stats, null); + } + return invoke(Case.Case21, Case.CASE_KIND_STATEMENT, labels, null, stats, null); } //javac versions: 17