mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 16:15:16 +00:00
[jdk13] support for switch expression's yield keyword.
This commit is contained in:
4 files changed
+138
-1
No files matched your search
@@ -1312,6 +1312,11 @@ public class PrettyPrinter extends JCTree.Visitor {
|
||||
print(";");
|
||||
needsNewLine = true;
|
||||
needsAlign = true;
|
||||
} else if (tree.stats.head.getClass().getSimpleName().equals("JCYield")) {
|
||||
print((JCExpression) readObject(tree.stats.head, "value", null));
|
||||
print(";");
|
||||
needsNewLine = true;
|
||||
needsAlign = true;
|
||||
} else {
|
||||
print(tree.stats.head);
|
||||
if (tree.stats.head instanceof JCBlock) needsNewLine = false;
|
||||
@@ -1341,7 +1346,10 @@ public class PrettyPrinter extends JCTree.Visitor {
|
||||
print(")");
|
||||
}
|
||||
println(" {");
|
||||
boolean ruleStyle = isCaseRuleStyle(tree.cases.head);
|
||||
if (ruleStyle) indent++;
|
||||
print(tree.cases, "");
|
||||
if (ruleStyle) indent--;
|
||||
aPrintln("}", tree);
|
||||
}
|
||||
|
||||
@@ -1357,10 +1365,20 @@ public class PrettyPrinter extends JCTree.Visitor {
|
||||
}
|
||||
println(" {");
|
||||
List<JCCase> cases = readObject(tree, "cases", null);
|
||||
boolean ruleStyle = isCaseRuleStyle(cases.head);
|
||||
if (ruleStyle) indent++;
|
||||
print(cases, "");
|
||||
if (ruleStyle) indent--;
|
||||
aPrint("}");
|
||||
}
|
||||
|
||||
void printYieldExpression(JCTree tree) {
|
||||
aPrint("yield ");
|
||||
JCExpression value = readObject(tree, "value", null);
|
||||
print(value);
|
||||
println(";", tree);
|
||||
}
|
||||
|
||||
@Override public void visitTry(JCTry tree) {
|
||||
aPrint("try ");
|
||||
List<?> resources = readObject(tree, "resources", List.nil());
|
||||
@@ -1581,11 +1599,19 @@ public class PrettyPrinter extends JCTree.Visitor {
|
||||
// Starting with JDK9, this is inside the import list, but we've already printed it. Just ignore it.
|
||||
} else if ("JCSwitchExpression".equals(simpleName)) { // Introduced as preview feature in JDK12
|
||||
printSwitchExpression(tree);
|
||||
} else if ("JCYield".equals(simpleName)) { // Introduced as preview feature in JDK13, part of switch expressions.
|
||||
printYieldExpression(tree);
|
||||
} else {
|
||||
throw new AssertionError("Unhandled tree type: " + tree.getClass() + ": " + tree);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isCaseRuleStyle(JCCase tree) {
|
||||
if (tree == null) return false;
|
||||
Enum<?> caseKind = readObject(tree, "caseKind", null); // JDK 12+
|
||||
return caseKind != null && caseKind.name().equalsIgnoreCase("RULE");
|
||||
}
|
||||
|
||||
private boolean jcAnnotatedTypeInit = false;
|
||||
private Class<?> jcAnnotatedTypeClass = null;
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
public class Switch13 {
|
||||
public void basic() {
|
||||
switch (5) {
|
||||
case 1:
|
||||
case 2:
|
||||
System.out.println("OK");
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
public void multiCase() {
|
||||
switch (5) {
|
||||
case 1, 2:
|
||||
System.out.println("OK");
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
public int switchExpr1() {
|
||||
return switch (5) {
|
||||
case 1, 2 -> 0;
|
||||
case 3 -> {
|
||||
yield 10;
|
||||
}
|
||||
default -> 10;
|
||||
} + 10;
|
||||
}
|
||||
|
||||
public int switchExpr2() {
|
||||
return switch (5) {
|
||||
case 1, 2:
|
||||
System.out.println("Hello");
|
||||
case 3:
|
||||
yield 10;
|
||||
default:
|
||||
yield 20;
|
||||
} + 10;
|
||||
}
|
||||
|
||||
public void arrowSwitch() {
|
||||
switch (5) {
|
||||
case 1, 2 -> System.out.println("Hello");
|
||||
case 3 -> {
|
||||
System.out.println("");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void emptySwitch() {
|
||||
switch (5) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// version 12:
|
||||
// version 12:12
|
||||
public class Switch12 {
|
||||
public void basic() {
|
||||
switch (5) {
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
// version 13:
|
||||
public class Switch13 {
|
||||
public void basic() {
|
||||
switch (5) {
|
||||
case 1:
|
||||
case 2:
|
||||
System.out.println("OK");
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
public void multiCase() {
|
||||
switch (5) {
|
||||
case 1, 2:
|
||||
System.out.println("OK");
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
public int switchExpr1() {
|
||||
return switch (5) {
|
||||
case 1, 2 -> 0;
|
||||
case 3 -> {
|
||||
yield 10;
|
||||
}
|
||||
default -> 10;
|
||||
} + 10;
|
||||
}
|
||||
|
||||
public int switchExpr2() {
|
||||
return switch (5) {
|
||||
case 1, 2:
|
||||
System.out.println("Hello");
|
||||
case 3:
|
||||
yield 10;
|
||||
default:
|
||||
yield 20;
|
||||
} + 10;
|
||||
}
|
||||
|
||||
public void arrowSwitch() {
|
||||
switch (5) {
|
||||
case 1, 2 -> System.out.println("Hello");
|
||||
case 3 -> {
|
||||
System.out.println("");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void emptySwitch() {
|
||||
switch (5) {
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user