[jdk17] Add support for default cases

This commit is contained in:
Rawi01 committed 2021-08-18 09:31:21 +02:00
1 parent e050dafc90
commit 91859536db
2 files changed
+20 -5

No files matched your search

@@ -1324,13 +1324,16 @@ public class PrettyPrinter extends JCTree.Visitor {
@Override public void visitCase(JCCase tree) {
// Starting with JDK12, switches allow multiple expressions per case, and can take the form of an expression (preview feature).
List<JCExpression> pats = readObject(tree, "pats", null); // JDK 12+
List<JCTree> pats = readObject(tree, "labels", null); // JDK 17+
if (pats == null) {
JCExpression pat = readObject(tree, "pat", null); // JDK -11
pats = pat == null ? List.<JCExpression>nil() : List.of(pat);
pats = readObject(tree, "pats", null); // JDK 12-17
}
if (pats == null) {
JCTree pat = readObject(tree, "pat", null); // JDK -11
pats = pat == null ? List.<JCTree>nil() : List.of(pat);
}
if (pats.isEmpty()) {
if (pats.isEmpty() || pats.get(0).getClass().getName().endsWith("$JCDefaultCaseLabel")) {
aPrint("default");
} else {
aPrint("case ");
+13 -1
View File
@@ -607,7 +607,19 @@ public class JavacTreeMaker {
public JCCase Case(JCExpression pat, List<JCStatement> stats) {
if (tryResolve(Case11)) return invoke(Case11, pat, stats);
return invoke(Case12.Case12, Case12.CASE_KIND_STATEMENT, pat == null ? com.sun.tools.javac.util.List.nil() : com.sun.tools.javac.util.List.of(pat), stats, null);
List<JCTree> labels;
if (pat == null) {
labels = tryResolve(DefaultCaseLabel) ? List.of(DefaultCaseLabel()) : List.<JCTree>nil();
} else {
labels = List.<JCTree>of(pat);
}
return invoke(Case12.Case12, Case12.CASE_KIND_STATEMENT, labels, stats, null);
}
//javac versions: 17
private static final MethodId<JCTree> DefaultCaseLabel = MethodId("DefaultCaseLabel", JCTree.class);
public JCTree DefaultCaseLabel() {
return invoke(DefaultCaseLabel);
}
//javac versions: 6-8