langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/comp/SjavacImpl.java
changeset 26991 88d998b3bb4b
parent 26107 a4a156a33c94
child 26992 92e69fa21956
equal deleted inserted replaced
26990:e3fd4b46d39d 26991:88d998b3bb4b
    31 import java.util.Arrays;
    31 import java.util.Arrays;
    32 import java.util.List;
    32 import java.util.List;
    33 import java.util.Set;
    33 import java.util.Set;
    34 import java.util.concurrent.atomic.AtomicBoolean;
    34 import java.util.concurrent.atomic.AtomicBoolean;
    35 
    35 
    36 import javax.tools.JavaCompiler.CompilationTask;
       
    37 import javax.tools.JavaFileObject;
    36 import javax.tools.JavaFileObject;
    38 import javax.tools.StandardJavaFileManager;
    37 import javax.tools.StandardJavaFileManager;
    39 
    38 
    40 import com.sun.tools.javac.api.JavacTaskImpl;
    39 import com.sun.tools.javac.api.JavacTaskImpl;
    41 import com.sun.tools.javac.api.JavacTool;
    40 import com.sun.tools.javac.api.JavacTool;
       
    41 import com.sun.tools.javac.code.Symbol.PackageSymbol;
    42 import com.sun.tools.javac.util.Context;
    42 import com.sun.tools.javac.util.Context;
    43 import com.sun.tools.javac.util.ListBuffer;
    43 import com.sun.tools.javac.util.ListBuffer;
    44 import com.sun.tools.javac.util.Options;
    44 import com.sun.tools.javac.util.Options;
       
    45 import com.sun.tools.sjavac.Util;
       
    46 import com.sun.tools.sjavac.comp.dependencies.DependencyCollector;
    45 import com.sun.tools.sjavac.server.CompilationResult;
    47 import com.sun.tools.sjavac.server.CompilationResult;
    46 import com.sun.tools.sjavac.server.Sjavac;
    48 import com.sun.tools.sjavac.server.Sjavac;
    47 import com.sun.tools.sjavac.server.SysInfo;
    49 import com.sun.tools.sjavac.server.SysInfo;
    48 
    50 
    49 /**
    51 /**
    74 
    76 
    75         JavacTool compiler = JavacTool.create();
    77         JavacTool compiler = JavacTool.create();
    76         StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
    78         StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
    77         SmartFileManager smartFileManager = new SmartFileManager(fileManager);
    79         SmartFileManager smartFileManager = new SmartFileManager(fileManager);
    78         Context context = new Context();
    80         Context context = new Context();
    79         ResolveWithDeps.preRegister(context);
       
    80         AttrWithDeps.preRegister(context);
       
    81         JavaCompilerWithDeps.preRegister(context, new SjavacErrorHandler() {
    81         JavaCompilerWithDeps.preRegister(context, new SjavacErrorHandler() {
    82             @Override
    82             @Override
    83             public void logError(String msg) {
    83             public void logError(String msg) {
    84                 forcedExit.set(true);
    84                 forcedExit.set(true);
    85             }
    85             }
   100         }
   100         }
   101         for (JavaFileObject i : fileManager.getJavaFileObjectsFromFiles(sourcesToCompileFiles)) {
   101         for (JavaFileObject i : fileManager.getJavaFileObjectsFromFiles(sourcesToCompileFiles)) {
   102             compilationUnits.append(i);
   102             compilationUnits.append(i);
   103         }
   103         }
   104         forcedExit.set(false);
   104         forcedExit.set(false);
       
   105 
       
   106 
   105         // Create a new logger.
   107         // Create a new logger.
   106         StringWriter stdoutLog = new StringWriter();
   108         StringWriter stdoutLog = new StringWriter();
   107         StringWriter stderrLog = new StringWriter();
   109         StringWriter stderrLog = new StringWriter();
   108         PrintWriter stdout = new PrintWriter(stdoutLog);
   110         PrintWriter stdout = new PrintWriter(stdoutLog);
   109         PrintWriter stderr = new PrintWriter(stderrLog);
   111         PrintWriter stderr = new PrintWriter(stderrLog);
   110         com.sun.tools.javac.main.Main.Result rc = com.sun.tools.javac.main.Main.Result.OK;
   112         com.sun.tools.javac.main.Main.Result rc = com.sun.tools.javac.main.Main.Result.OK;
       
   113         DependencyCollector depsCollector = new DependencyCollector();
   111         try {
   114         try {
   112             if (compilationUnits.size() > 0) {
   115             if (compilationUnits.size() > 0) {
   113                 smartFileManager.setVisibleSources(visibleSources);
   116                 smartFileManager.setVisibleSources(visibleSources);
   114                 smartFileManager.cleanArtifacts();
   117                 smartFileManager.cleanArtifacts();
   115                 smartFileManager.setLog(stdout);
   118                 smartFileManager.setLog(stdout);
   116 
   119 
   117                 // Do the compilation!
   120                 // Do the compilation!
   118                 CompilationTask task = compiler.getTask(stderr,
   121                 JavacTaskImpl task =
   119                                                         smartFileManager,
   122                         (JavacTaskImpl) compiler.getTask(stderr,
   120                                                         null,
   123                                                          smartFileManager,
   121                                                         Arrays.asList(args),
   124                                                          null,
   122                                                         null,
   125                                                          Arrays.asList(args),
   123                                                         compilationUnits,
   126                                                          null,
   124                                                         context);
   127                                                          compilationUnits,
       
   128                                                          context);
   125                 smartFileManager.setSymbolFileEnabled(!Options.instance(context).isSet("ignore.symbol.file"));
   129                 smartFileManager.setSymbolFileEnabled(!Options.instance(context).isSet("ignore.symbol.file"));
   126                 rc = ((JavacTaskImpl) task).doCall();
   130                 task.addTaskListener(depsCollector);
       
   131                 rc = task.doCall();
   127                 smartFileManager.flush();
   132                 smartFileManager.flush();
   128             }
   133             }
   129         } catch (Exception e) {
   134         } catch (Exception e) {
   130             stderrLog.append(e.getMessage());
   135             stderrLog.append(Util.getStackTrace(e));
   131             forcedExit.set(true);
   136             forcedExit.set(true);
   132         }
   137         }
   133 
   138 
   134         compilationResult.packageArtifacts = smartFileManager.getPackageArtifacts();
   139         compilationResult.packageArtifacts = smartFileManager.getPackageArtifacts();
   135 
   140 
   136         Dependencies deps = Dependencies.instance(context);
   141         Dependencies deps = Dependencies.instance(context);
       
   142         for (PackageSymbol from : depsCollector.getSourcePackages()) {
       
   143             for (PackageSymbol to : depsCollector.getDependenciesForPkg(from))
       
   144                 deps.collect(from.fullname, to.fullname);
       
   145         }
       
   146 
   137         compilationResult.packageDependencies = deps.getDependencies();
   147         compilationResult.packageDependencies = deps.getDependencies();
   138         compilationResult.packagePubapis = deps.getPubapis();
   148         compilationResult.packagePubapis = deps.getPubapis();
   139 
   149 
   140         compilationResult.stdout = stdoutLog.toString();
   150         compilationResult.stdout = stdoutLog.toString();
   141         compilationResult.stderr = stderrLog.toString();
   151         compilationResult.stderr = stderrLog.toString();