< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java

Print this page

  68 import com.sun.tools.javac.platform.PlatformDescription;
  69 import com.sun.tools.javac.processing.*;
  70 import com.sun.tools.javac.tree.*;
  71 import com.sun.tools.javac.tree.JCTree.JCClassDecl;
  72 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
  73 import com.sun.tools.javac.tree.JCTree.JCExpression;
  74 import com.sun.tools.javac.tree.JCTree.JCLambda;
  75 import com.sun.tools.javac.tree.JCTree.JCMemberReference;
  76 import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
  77 import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
  78 import com.sun.tools.javac.util.*;
  79 import com.sun.tools.javac.util.Context.Key;
  80 import com.sun.tools.javac.util.DefinedBy.Api;
  81 import com.sun.tools.javac.util.JCDiagnostic.Factory;
  82 import com.sun.tools.javac.util.Log.DiagnosticHandler;
  83 import com.sun.tools.javac.util.Log.DiscardDiagnosticHandler;
  84 import com.sun.tools.javac.util.Log.WriterKind;
  85 
  86 import static com.sun.tools.javac.code.Kinds.Kind.*;
  87 
  88 import com.sun.tools.javac.code.Lint;
  89 import com.sun.tools.javac.code.Lint.LintCategory;
  90 import com.sun.tools.javac.code.Symbol.ModuleSymbol;
  91 
  92 import com.sun.tools.javac.resources.CompilerProperties.Errors;
  93 import com.sun.tools.javac.resources.CompilerProperties.Fragments;
  94 import com.sun.tools.javac.resources.CompilerProperties.Notes;
  95 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
  96 
  97 import static com.sun.tools.javac.code.TypeTag.CLASS;
  98 import static com.sun.tools.javac.main.Option.*;
  99 import com.sun.tools.javac.tree.JCTree.JCBindingPattern;
 100 import com.sun.tools.javac.tree.JCTree.JCInstanceOf;
 101 import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*;
 102 
 103 import static javax.tools.StandardLocation.CLASS_OUTPUT;
 104 import static javax.tools.StandardLocation.ANNOTATION_PROCESSOR_PATH;
 105 
 106 import com.sun.tools.javac.tree.JCTree.JCModuleDecl;
 107 import com.sun.tools.javac.tree.JCTree.JCRecordPattern;
 108 import com.sun.tools.javac.tree.JCTree.JCSwitch;
 109 import com.sun.tools.javac.tree.JCTree.JCSwitchExpression;

1603             }
1604             @Override
1605             public void visitRecordPattern(JCRecordPattern that) {
1606                 hasPatterns = true;
1607                 super.visitRecordPattern(that);
1608             }
1609             @Override
1610             public void visitSwitch(JCSwitch tree) {
1611                 hasPatterns |= tree.patternSwitch;
1612                 super.visitSwitch(tree);
1613             }
1614             @Override
1615             public void visitSwitchExpression(JCSwitchExpression tree) {
1616                 hasPatterns |= tree.patternSwitch;
1617                 super.visitSwitchExpression(tree);
1618             }
1619         }
1620         ScanNested scanner = new ScanNested();
1621         scanner.scan(env.tree);
1622         for (Env<AttrContext> dep: scanner.dependencies) {
1623         if (!compileStates.isDone(dep, CompileState.WARN))
1624             desugaredEnvs.put(dep, desugar(warn(flow(attribute(dep)))));
1625         }
1626 
1627         //We need to check for error another time as more classes might
1628         //have been attributed and analyzed at this stage
1629         if (shouldStop(CompileState.TRANSTYPES))
1630             return;
1631 
1632         if (verboseCompilePolicy)
1633             printNote("[desugar " + env.enclClass.sym + "]");
1634 
1635         JavaFileObject prev = log.useSource(env.enclClass.sym.sourcefile != null ?
1636                                   env.enclClass.sym.sourcefile :
1637                                   env.toplevel.sourcefile);
1638         try {
1639             //save tree prior to rewriting
1640             JCTree untranslated = env.tree;
1641 
1642             make.at(Position.FIRSTPOS);
1643             TreeMaker localMake = make.forToplevel(env.toplevel);
1644 

1684                 return;
1685             }
1686 
1687             //translate out inner classes
1688             List<JCTree> cdefs = lower.translateTopLevelClass(env, env.tree, localMake);
1689             compileStates.put(env, CompileState.LOWER);
1690 
1691             if (shouldStop(CompileState.LOWER))
1692                 return;
1693 
1694             if (scanner.hasLambdas) {
1695                 if (shouldStop(CompileState.UNLAMBDA))
1696                     return;
1697 
1698                 for (JCTree def : cdefs) {
1699                     LambdaToMethod.instance(context).translateTopLevelClass(env, def, localMake);
1700                 }
1701                 compileStates.put(env, CompileState.UNLAMBDA);
1702             }
1703 







1704             //generate code for each class
1705             for (List<JCTree> l = cdefs; l.nonEmpty(); l = l.tail) {
1706                 JCClassDecl cdef = (JCClassDecl)l.head;
1707                 results.add(new Pair<>(env, cdef));
1708             }
1709         }
1710         finally {
1711             log.useSource(prev);
1712         }
1713 
1714     }
1715 
1716     /** Generates the source or class file for a list of classes.
1717      * The decision to generate a source file or a class file is
1718      * based upon the compiler's options.
1719      * Generation stops if an error occurs while writing files.
1720      */
1721     public void generate(Queue<Pair<Env<AttrContext>, JCClassDecl>> queue) {
1722         generate(queue, null);
1723     }

  68 import com.sun.tools.javac.platform.PlatformDescription;
  69 import com.sun.tools.javac.processing.*;
  70 import com.sun.tools.javac.tree.*;
  71 import com.sun.tools.javac.tree.JCTree.JCClassDecl;
  72 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
  73 import com.sun.tools.javac.tree.JCTree.JCExpression;
  74 import com.sun.tools.javac.tree.JCTree.JCLambda;
  75 import com.sun.tools.javac.tree.JCTree.JCMemberReference;
  76 import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
  77 import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
  78 import com.sun.tools.javac.util.*;
  79 import com.sun.tools.javac.util.Context.Key;
  80 import com.sun.tools.javac.util.DefinedBy.Api;
  81 import com.sun.tools.javac.util.JCDiagnostic.Factory;
  82 import com.sun.tools.javac.util.Log.DiagnosticHandler;
  83 import com.sun.tools.javac.util.Log.DiscardDiagnosticHandler;
  84 import com.sun.tools.javac.util.Log.WriterKind;
  85 
  86 import static com.sun.tools.javac.code.Kinds.Kind.*;
  87 


  88 import com.sun.tools.javac.code.Symbol.ModuleSymbol;
  89 
  90 import com.sun.tools.javac.resources.CompilerProperties.Errors;
  91 import com.sun.tools.javac.resources.CompilerProperties.Fragments;
  92 import com.sun.tools.javac.resources.CompilerProperties.Notes;
  93 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
  94 
  95 import static com.sun.tools.javac.code.TypeTag.CLASS;
  96 import static com.sun.tools.javac.main.Option.*;
  97 import com.sun.tools.javac.tree.JCTree.JCBindingPattern;
  98 import com.sun.tools.javac.tree.JCTree.JCInstanceOf;
  99 import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*;
 100 
 101 import static javax.tools.StandardLocation.CLASS_OUTPUT;
 102 import static javax.tools.StandardLocation.ANNOTATION_PROCESSOR_PATH;
 103 
 104 import com.sun.tools.javac.tree.JCTree.JCModuleDecl;
 105 import com.sun.tools.javac.tree.JCTree.JCRecordPattern;
 106 import com.sun.tools.javac.tree.JCTree.JCSwitch;
 107 import com.sun.tools.javac.tree.JCTree.JCSwitchExpression;

1601             }
1602             @Override
1603             public void visitRecordPattern(JCRecordPattern that) {
1604                 hasPatterns = true;
1605                 super.visitRecordPattern(that);
1606             }
1607             @Override
1608             public void visitSwitch(JCSwitch tree) {
1609                 hasPatterns |= tree.patternSwitch;
1610                 super.visitSwitch(tree);
1611             }
1612             @Override
1613             public void visitSwitchExpression(JCSwitchExpression tree) {
1614                 hasPatterns |= tree.patternSwitch;
1615                 super.visitSwitchExpression(tree);
1616             }
1617         }
1618         ScanNested scanner = new ScanNested();
1619         scanner.scan(env.tree);
1620         for (Env<AttrContext> dep: scanner.dependencies) {
1621             if (!compileStates.isDone(dep, CompileState.WARN))
1622                 desugaredEnvs.put(dep, desugar(warn(flow(attribute(dep)))));
1623         }
1624 
1625         //We need to check for error another time as more classes might
1626         //have been attributed and analyzed at this stage
1627         if (shouldStop(CompileState.TRANSTYPES))
1628             return;
1629 
1630         if (verboseCompilePolicy)
1631             printNote("[desugar " + env.enclClass.sym + "]");
1632 
1633         JavaFileObject prev = log.useSource(env.enclClass.sym.sourcefile != null ?
1634                                   env.enclClass.sym.sourcefile :
1635                                   env.toplevel.sourcefile);
1636         try {
1637             //save tree prior to rewriting
1638             JCTree untranslated = env.tree;
1639 
1640             make.at(Position.FIRSTPOS);
1641             TreeMaker localMake = make.forToplevel(env.toplevel);
1642 

1682                 return;
1683             }
1684 
1685             //translate out inner classes
1686             List<JCTree> cdefs = lower.translateTopLevelClass(env, env.tree, localMake);
1687             compileStates.put(env, CompileState.LOWER);
1688 
1689             if (shouldStop(CompileState.LOWER))
1690                 return;
1691 
1692             if (scanner.hasLambdas) {
1693                 if (shouldStop(CompileState.UNLAMBDA))
1694                     return;
1695 
1696                 for (JCTree def : cdefs) {
1697                     LambdaToMethod.instance(context).translateTopLevelClass(env, def, localMake);
1698                 }
1699                 compileStates.put(env, CompileState.UNLAMBDA);
1700             }
1701 
1702             if (shouldStop(CompileState.STRICT_FIELDS_PROXIES))
1703                 return;
1704             for (JCTree def : cdefs) {
1705                 LocalProxyVarsGen.instance(context).translateTopLevelClass(def, localMake);
1706             }
1707             compileStates.put(env, CompileState.STRICT_FIELDS_PROXIES);
1708 
1709             //generate code for each class
1710             for (List<JCTree> l = cdefs; l.nonEmpty(); l = l.tail) {
1711                 JCClassDecl cdef = (JCClassDecl)l.head;
1712                 results.add(new Pair<>(env, cdef));
1713             }
1714         }
1715         finally {
1716             log.useSource(prev);
1717         }
1718 
1719     }
1720 
1721     /** Generates the source or class file for a list of classes.
1722      * The decision to generate a source file or a class file is
1723      * based upon the compiler's options.
1724      * Generation stops if an error occurs while writing files.
1725      */
1726     public void generate(Queue<Pair<Env<AttrContext>, JCClassDecl>> queue) {
1727         generate(queue, null);
1728     }
< prev index next >