/** * Recompiles the module. * * <p>Prerequisite: either {@link #precompile} or {@link #initWithoutPrecompile} should have been * called first. * * <p>Sets the job's result and returns normally whether the compile succeeds or not. * * @param job should already be in the "in progress" state. */ synchronized Job.Result recompile(Job job) { Job.Result result; try { result = compile(job); } catch (UnableToCompleteException e) { // No point in logging a stack trace for this exception job.getLogger().log(TreeLogger.Type.WARN, "recompile failed"); result = new Result(null, null, e); } catch (Throwable error) { job.getLogger().log(TreeLogger.Type.WARN, "recompile failed", error); result = new Result(null, null, error); } job.onFinished(result); return result; }
/** * Calls the GWT compiler with the appropriate settings. Side-effect: a MinimalRebuildCache for * the current binding properties will be found or created. * * @param job used for reporting progress. (Its result will not be set.) * @return a non-error Job.Result if successful. * @throws UnableToCompleteException for compile failures. */ private Job.Result compile(Job job) throws UnableToCompleteException { assert job.wasSubmitted(); if (compilesDone == 0) { System.setProperty("java.awt.headless", "true"); if (System.getProperty("gwt.speedtracerlog") == null) { System.setProperty( "gwt.speedtracerlog", outboxDir.getSpeedTracerLogFile().getAbsolutePath()); } compilerContext = compilerContextBuilder.unitCache(unitCache).build(); } long startTime = System.currentTimeMillis(); int compileId = ++compilesDone; CompileDir compileDir = outboxDir.makeCompileDir(job.getLogger()); TreeLogger compileLogger = makeCompileLogger(compileDir, job.getLogger()); try { job.onStarted(compileId, compileDir); boolean success = doCompile(compileLogger, compileDir, job); if (!success) { compileLogger.log(TreeLogger.Type.ERROR, "Compiler returned false"); throw new UnableToCompleteException(); } } finally { // Make the error log available no matter what happens lastBuild.set(compileDir); } long elapsedTime = System.currentTimeMillis() - startTime; compileLogger.log( TreeLogger.Type.INFO, String.format("%.3fs total -- Compile completed", elapsedTime / 1000d)); return new Result(publishedCompileDir, outputModuleName.get(), null); }