< prev index next >
src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java
Print this page
rev 51104 : imported patch switch
*** 46,55 ****
--- 46,56 ----
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.CLASS;
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.
*
* <p><b>This is NOT part of any supported API.
* If you write code that depends on this, you do so at your own risk.
*** 559,573 ****
tree.cases = translateCases(tree.cases);
result = tree;
}
public void visitCase(JCCase tree) {
! tree.pat = translate(tree.pat, null);
tree.stats = translate(tree.stats);
result = tree;
}
public void visitSynchronized(JCSynchronized tree) {
tree.lock = translate(tree.lock, erasure(tree.lock.type));
tree.body = translate(tree.body);
result = tree;
}
--- 560,585 ----
tree.cases = translateCases(tree.cases);
result = tree;
}
public void visitCase(JCCase tree) {
! 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);
result = tree;
}
*** 604,613 ****
--- 616,635 ----
if (!returnType.hasTag(VOID))
tree.expr = translate(tree.expr, returnType);
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;
}
< prev index next >