From f0a8f5d44fd7767a4cd978d6fa00f624a073c8eb Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Tue, 28 Oct 2014 16:44:23 -0400 Subject: [PATCH] Create a new API for calling Java toolchains. * Create a new sbt.compiler.javac package * Create new interfaces to control running `javac` and `javadoc` whether forked or local. * Ensure new interfaces make use of `xsbti.Reporter`. * Create new method on `xsbti.compiler.JavaCompiler` which takes a `xsbti.Reporter` * Create a new mechanism to parse (more accurately) Warnings + Errors, to distinguish the two. * Ensure older xsbti.Compiler implementations still succeed via catcing NoSuchMethodError. * Feed new toolchain through sbt.actions.Compiler API via dirty hackery until we can break things in sbt 1.0 * Added a set of unit tests for parsing errors from Javac/Javadoc * Added a new integration test for hidden compilerReporter key, including testing threading of javac reports. Fixes #875, Fixes #1542, Related #1178 could be looked into/cleaned up. --- .../main/java/xsbti/compile/JavaCompiler.java | 16 ++++++++++++++-- util/log/src/main/scala/sbt/Logger.scala | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/interface/src/main/java/xsbti/compile/JavaCompiler.java b/interface/src/main/java/xsbti/compile/JavaCompiler.java index ff6b83cc3..95f9fb992 100644 --- a/interface/src/main/java/xsbti/compile/JavaCompiler.java +++ b/interface/src/main/java/xsbti/compile/JavaCompiler.java @@ -2,6 +2,7 @@ package xsbti.compile; import java.io.File; import xsbti.Logger; +import xsbti.Reporter; /** * Interface to a Java compiler. @@ -9,6 +10,17 @@ import xsbti.Logger; public interface JavaCompiler { /** Compiles Java sources using the provided classpath, output directory, and additional options. - * Output should be sent to the provided logger.*/ + * Output should be sent to the provided logger. + * + * @deprecated 0.13.8 - Use compileWithReporter instead + */ void compile(File[] sources, File[] classpath, Output output, String[] options, Logger log); -} + + /** + * Compiles java sources using the provided classpath, output directory and additional options. + * + * Output should be sent to the provided logger. + * Failures should be passed to the provided Reporter. + */ + void compileWithReporter(File[] sources, File[] classpath, Output output, String[] options, Reporter reporter, Logger log); +} \ No newline at end of file diff --git a/util/log/src/main/scala/sbt/Logger.scala b/util/log/src/main/scala/sbt/Logger.scala index c507484ce..3c3dd92e1 100644 --- a/util/log/src/main/scala/sbt/Logger.scala +++ b/util/log/src/main/scala/sbt/Logger.scala @@ -104,6 +104,7 @@ object Logger { val position = pos val message = msg val severity = sev + override def toString = s"[$severity] $pos: $message" } }