--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java Tue Aug 28 09:01:54 2018 +0200
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java Wed Aug 29 09:36:17 2018 +0200
@@ -48,6 +48,7 @@
import static com.sun.tools.javac.code.TypeTag.TYPEVAR;
import static com.sun.tools.javac.code.TypeTag.VOID;
import static com.sun.tools.javac.comp.CompileStates.CompileState;
+import com.sun.tools.javac.tree.JCTree.JCBreak;
/** This pass translates Generic Java to conventional Java.
*
@@ -561,11 +562,22 @@
}
public void visitCase(JCCase tree) {
- tree.pat = translate(tree.pat, null);
+ tree.pats = translate(tree.pats, null);
tree.stats = translate(tree.stats);
result = tree;
}
+ public void visitSwitchExpression(JCSwitchExpression tree) {
+ Type selsuper = types.supertype(tree.selector.type);
+ boolean enumSwitch = selsuper != null &&
+ selsuper.tsym == syms.enumSym;
+ Type target = enumSwitch ? erasure(tree.selector.type) : syms.intType;
+ tree.selector = translate(tree.selector, target);
+ tree.cases = translate(tree.cases);
+ tree.type = erasure(tree.type);
+ result = retype(tree, tree.type, pt);
+ }
+
public void visitSynchronized(JCSynchronized tree) {
tree.lock = translate(tree.lock, erasure(tree.lock.type));
tree.body = translate(tree.body);
@@ -606,6 +618,16 @@
result = tree;
}
+ @Override
+ public void visitBreak(JCBreak tree) {
+ if (tree.isValueBreak()) {
+ tree.value = translate(tree.value, erasure(tree.value.type));
+ tree.value.type = erasure(tree.value.type);
+ tree.value = retype(tree.value, tree.value.type, pt);
+ }
+ result = tree;
+ }
+
public void visitThrow(JCThrow tree) {
tree.expr = translate(tree.expr, erasure(tree.expr.type));
result = tree;