< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java

Print this page
rev 51258 : imported patch switch


  31 import com.sun.tools.javac.code.Attribute.TypeCompound;
  32 import com.sun.tools.javac.code.Source.Feature;
  33 import com.sun.tools.javac.code.Symbol.*;
  34 import com.sun.tools.javac.code.Type.IntersectionClassType;
  35 import com.sun.tools.javac.code.Types.FunctionDescriptorLookupError;
  36 import com.sun.tools.javac.resources.CompilerProperties.Errors;
  37 import com.sun.tools.javac.tree.*;
  38 import com.sun.tools.javac.tree.JCTree.*;
  39 import com.sun.tools.javac.tree.JCTree.JCMemberReference.ReferenceKind;
  40 import com.sun.tools.javac.util.*;
  41 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
  42 import com.sun.tools.javac.util.List;
  43 
  44 import static com.sun.tools.javac.code.Flags.*;
  45 import static com.sun.tools.javac.code.Kinds.Kind.*;
  46 import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
  47 import static com.sun.tools.javac.code.TypeTag.CLASS;
  48 import static com.sun.tools.javac.code.TypeTag.TYPEVAR;
  49 import static com.sun.tools.javac.code.TypeTag.VOID;
  50 import static com.sun.tools.javac.comp.CompileStates.CompileState;

  51 
  52 /** This pass translates Generic Java to conventional Java.
  53  *
  54  *  <p><b>This is NOT part of any supported API.
  55  *  If you write code that depends on this, you do so at your own risk.
  56  *  This code and its internal interfaces are subject to change or
  57  *  deletion without notice.</b>
  58  */
  59 public class TransTypes extends TreeTranslator {
  60     /** The context key for the TransTypes phase. */
  61     protected static final Context.Key<TransTypes> transTypesKey = new Context.Key<>();
  62 
  63     /** Get the instance for this context. */
  64     public static TransTypes instance(Context context) {
  65         TransTypes instance = context.get(transTypesKey);
  66         if (instance == null)
  67             instance = new TransTypes(context);
  68         return instance;
  69     }
  70 


 544                 tree.type = types.erasure(types.findDescriptorSymbol(tree.type.tsym).owner.type);
 545             }
 546             result = tree;
 547         }
 548         finally {
 549             returnType = prevRetType;
 550         }
 551     }
 552 
 553     public void visitSwitch(JCSwitch tree) {
 554         Type selsuper = types.supertype(tree.selector.type);
 555         boolean enumSwitch = selsuper != null &&
 556             selsuper.tsym == syms.enumSym;
 557         Type target = enumSwitch ? erasure(tree.selector.type) : syms.intType;
 558         tree.selector = translate(tree.selector, target);
 559         tree.cases = translateCases(tree.cases);
 560         result = tree;
 561     }
 562 
 563     public void visitCase(JCCase tree) {
 564         tree.pat = translate(tree.pat, null);
 565         tree.stats = translate(tree.stats);
 566         result = tree;
 567     }
 568 











 569     public void visitSynchronized(JCSynchronized tree) {
 570         tree.lock = translate(tree.lock, erasure(tree.lock.type));
 571         tree.body = translate(tree.body);
 572         result = tree;
 573     }
 574 
 575     public void visitTry(JCTry tree) {
 576         tree.resources = translate(tree.resources, syms.autoCloseableType);
 577         tree.body = translate(tree.body);
 578         tree.catchers = translateCatchers(tree.catchers);
 579         tree.finalizer = translate(tree.finalizer);
 580         result = tree;
 581     }
 582 
 583     public void visitConditional(JCConditional tree) {
 584         tree.cond = translate(tree.cond, syms.booleanType);
 585         tree.truepart = translate(tree.truepart, erasure(tree.type));
 586         tree.falsepart = translate(tree.falsepart, erasure(tree.type));
 587         tree.type = erasure(tree.type);
 588         result = retype(tree, tree.type, pt);
 589     }
 590 
 591    public void visitIf(JCIf tree) {
 592         tree.cond = translate(tree.cond, syms.booleanType);
 593         tree.thenpart = translate(tree.thenpart);
 594         tree.elsepart = translate(tree.elsepart);
 595         result = tree;
 596     }
 597 
 598     public void visitExec(JCExpressionStatement tree) {
 599         tree.expr = translate(tree.expr, null);
 600         result = tree;
 601     }
 602 
 603     public void visitReturn(JCReturn tree) {
 604         if (!returnType.hasTag(VOID))
 605             tree.expr = translate(tree.expr, returnType);










 606         result = tree;
 607     }
 608 
 609     public void visitThrow(JCThrow tree) {
 610         tree.expr = translate(tree.expr, erasure(tree.expr.type));
 611         result = tree;
 612     }
 613 
 614     public void visitAssert(JCAssert tree) {
 615         tree.cond = translate(tree.cond, syms.booleanType);
 616         if (tree.detail != null)
 617             tree.detail = translate(tree.detail, erasure(tree.detail.type));
 618         result = tree;
 619     }
 620 
 621     public void visitApply(JCMethodInvocation tree) {
 622         tree.meth = translate(tree.meth, null);
 623         Symbol meth = TreeInfo.symbol(tree.meth);
 624         Type mt = meth.erasure(types);
 625         boolean useInstantiatedPtArgs =




  31 import com.sun.tools.javac.code.Attribute.TypeCompound;
  32 import com.sun.tools.javac.code.Source.Feature;
  33 import com.sun.tools.javac.code.Symbol.*;
  34 import com.sun.tools.javac.code.Type.IntersectionClassType;
  35 import com.sun.tools.javac.code.Types.FunctionDescriptorLookupError;
  36 import com.sun.tools.javac.resources.CompilerProperties.Errors;
  37 import com.sun.tools.javac.tree.*;
  38 import com.sun.tools.javac.tree.JCTree.*;
  39 import com.sun.tools.javac.tree.JCTree.JCMemberReference.ReferenceKind;
  40 import com.sun.tools.javac.util.*;
  41 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
  42 import com.sun.tools.javac.util.List;
  43 
  44 import static com.sun.tools.javac.code.Flags.*;
  45 import static com.sun.tools.javac.code.Kinds.Kind.*;
  46 import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
  47 import static com.sun.tools.javac.code.TypeTag.CLASS;
  48 import static com.sun.tools.javac.code.TypeTag.TYPEVAR;
  49 import static com.sun.tools.javac.code.TypeTag.VOID;
  50 import static com.sun.tools.javac.comp.CompileStates.CompileState;
  51 import com.sun.tools.javac.tree.JCTree.JCBreak;
  52 
  53 /** This pass translates Generic Java to conventional Java.
  54  *
  55  *  <p><b>This is NOT part of any supported API.
  56  *  If you write code that depends on this, you do so at your own risk.
  57  *  This code and its internal interfaces are subject to change or
  58  *  deletion without notice.</b>
  59  */
  60 public class TransTypes extends TreeTranslator {
  61     /** The context key for the TransTypes phase. */
  62     protected static final Context.Key<TransTypes> transTypesKey = new Context.Key<>();
  63 
  64     /** Get the instance for this context. */
  65     public static TransTypes instance(Context context) {
  66         TransTypes instance = context.get(transTypesKey);
  67         if (instance == null)
  68             instance = new TransTypes(context);
  69         return instance;
  70     }
  71 


 545                 tree.type = types.erasure(types.findDescriptorSymbol(tree.type.tsym).owner.type);
 546             }
 547             result = tree;
 548         }
 549         finally {
 550             returnType = prevRetType;
 551         }
 552     }
 553 
 554     public void visitSwitch(JCSwitch tree) {
 555         Type selsuper = types.supertype(tree.selector.type);
 556         boolean enumSwitch = selsuper != null &&
 557             selsuper.tsym == syms.enumSym;
 558         Type target = enumSwitch ? erasure(tree.selector.type) : syms.intType;
 559         tree.selector = translate(tree.selector, target);
 560         tree.cases = translateCases(tree.cases);
 561         result = tree;
 562     }
 563 
 564     public void visitCase(JCCase tree) {
 565         tree.pats = translate(tree.pats, null);
 566         tree.stats = translate(tree.stats);
 567         result = tree;
 568     }
 569 
 570     public void visitSwitchExpression(JCSwitchExpression tree) {
 571         Type selsuper = types.supertype(tree.selector.type);
 572         boolean enumSwitch = selsuper != null &&
 573             selsuper.tsym == syms.enumSym;
 574         Type target = enumSwitch ? erasure(tree.selector.type) : syms.intType;
 575         tree.selector = translate(tree.selector, target);
 576         tree.cases = translate(tree.cases);
 577         tree.type = erasure(tree.type);
 578         result = retype(tree, tree.type, pt);
 579     }
 580 
 581     public void visitSynchronized(JCSynchronized tree) {
 582         tree.lock = translate(tree.lock, erasure(tree.lock.type));
 583         tree.body = translate(tree.body);
 584         result = tree;
 585     }
 586 
 587     public void visitTry(JCTry tree) {
 588         tree.resources = translate(tree.resources, syms.autoCloseableType);
 589         tree.body = translate(tree.body);
 590         tree.catchers = translateCatchers(tree.catchers);
 591         tree.finalizer = translate(tree.finalizer);
 592         result = tree;
 593     }
 594 
 595     public void visitConditional(JCConditional tree) {
 596         tree.cond = translate(tree.cond, syms.booleanType);
 597         tree.truepart = translate(tree.truepart, erasure(tree.type));
 598         tree.falsepart = translate(tree.falsepart, erasure(tree.type));
 599         tree.type = erasure(tree.type);
 600         result = retype(tree, tree.type, pt);
 601     }
 602 
 603    public void visitIf(JCIf tree) {
 604         tree.cond = translate(tree.cond, syms.booleanType);
 605         tree.thenpart = translate(tree.thenpart);
 606         tree.elsepart = translate(tree.elsepart);
 607         result = tree;
 608     }
 609 
 610     public void visitExec(JCExpressionStatement tree) {
 611         tree.expr = translate(tree.expr, null);
 612         result = tree;
 613     }
 614 
 615     public void visitReturn(JCReturn tree) {
 616         if (!returnType.hasTag(VOID))
 617             tree.expr = translate(tree.expr, returnType);
 618         result = tree;
 619     }
 620 
 621     @Override
 622     public void visitBreak(JCBreak tree) {
 623         if (tree.isValueBreak()) {
 624             tree.value = translate(tree.value, erasure(tree.value.type));
 625             tree.value.type = erasure(tree.value.type);
 626             tree.value = retype(tree.value, tree.value.type, pt);
 627         }
 628         result = tree;
 629     }
 630 
 631     public void visitThrow(JCThrow tree) {
 632         tree.expr = translate(tree.expr, erasure(tree.expr.type));
 633         result = tree;
 634     }
 635 
 636     public void visitAssert(JCAssert tree) {
 637         tree.cond = translate(tree.cond, syms.booleanType);
 638         if (tree.detail != null)
 639             tree.detail = translate(tree.detail, erasure(tree.detail.type));
 640         result = tree;
 641     }
 642 
 643     public void visitApply(JCMethodInvocation tree) {
 644         tree.meth = translate(tree.meth, null);
 645         Symbol meth = TreeInfo.symbol(tree.meth);
 646         Type mt = meth.erasure(types);
 647         boolean useInstantiatedPtArgs =


< prev index next >