in src/com/facebook/buck/java/JavacInMemoryStep.java [287:349]
protected int buildWithClasspath(ExecutionContext context, Set<String> buildClasspathEntries) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
Preconditions.checkNotNull(compiler,
"If using JRE instead of JDK, ToolProvider.getSystemJavaCompiler() may be null.");
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> compilationUnits;
try {
compilationUnits = createCompilationUnits(
fileManager, context.getProjectFilesystem().getPathRelativizer());
} catch (IOException e) {
e.printStackTrace(context.getStdErr());
return 1;
}
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
List<String> options = getOptions(context, buildClasspathEntries);
List<String> classNamesForAnnotationProcessing = ImmutableList.of();
Writer compilerOutputWriter = new PrintWriter(context.getStdErr());
JavaCompiler.CompilationTask compilationTask = compiler.getTask(
compilerOutputWriter,
fileManager,
diagnostics,
options,
classNamesForAnnotationProcessing,
compilationUnits);
// Invoke the compilation and inspect the result.
boolean isSuccess = compilationTask.call();
if (isSuccess) {
if (abiKeyFile != null) {
try {
String firstLine = Files.readFirstLine(abiKeyFile, Charsets.UTF_8);
if (firstLine != null) {
abiKey = new Sha1HashCode(firstLine);
}
} catch (IOException e) {
e.printStackTrace(context.getStdErr());
return 1;
}
}
return 0;
} else {
if (context.getVerbosity().shouldPrintStandardInformation()) {
int numErrors = 0;
int numWarnings = 0;
for (Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) {
Diagnostic.Kind kind = diagnostic.getKind();
if (kind == Diagnostic.Kind.ERROR) {
++numErrors;
} else if (kind == Diagnostic.Kind.WARNING || kind == Diagnostic.Kind.MANDATORY_WARNING) {
++numWarnings;
}
context.getStdErr().println(diagnostic);
}
if (numErrors > 0 || numWarnings > 0) {
context.getStdErr().printf("Errors: %d. Warnings: %d.\n", numErrors, numWarnings);
}
}
return 1;
}
}