1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

Fallback to javac if the compiler API can't find the compiler.

This commit is contained in:
Cedric Beust 2015-12-10 23:12:10 -08:00
parent c5f2368a29
commit b3fd1a43ad

View file

@ -28,32 +28,57 @@ class JavaCompiler @Inject constructor(val jvmCompiler: JvmCompiler) {
return TaskResult()
}
val allArgs = arrayListOf(
"-d", KFiles.makeDir(info.directory!!, info.outputDir.path).path)
if (info.dependencies.size > 0) {
allArgs.add("-classpath")
allArgs.add(info.dependencies.map { it.jarFile.get() }.joinToString(File.pathSeparator))
}
allArgs.addAll(info.compilerArgs)
var command: String
var errorMessage: String
val compiler = ToolProvider.getSystemJavaCompiler()
val fileManager = compiler.getStandardFileManager(null, null, null)
val fileObjects = fileManager.getJavaFileObjectsFromFiles(info.sourceFiles.map { File(it) })
val dc = DiagnosticCollector<JavaFileObject>()
val classes = arrayListOf<String>()
val writer = PrintWriter(System.out)
val task = compiler.getTask(writer, fileManager, dc, allArgs, classes, fileObjects)
val result =
if (compiler != null) {
log(2, "Found system Java compiler, using the compiler API")
val allArgs = arrayListOf(
"-d", KFiles.makeDir(info.directory!!, info.outputDir.path).path)
if (info.dependencies.size > 0) {
allArgs.add("-classpath")
allArgs.add(info.dependencies.map { it.jarFile.get() }.joinToString(File.pathSeparator))
}
allArgs.addAll(info.compilerArgs)
val command = "javac " + allArgs.joinToString(" ") + " " + info.sourceFiles.joinToString(" ")
log(2, "Launching\n$command")
val fileManager = compiler.getStandardFileManager(null, null, null)
val fileObjects = fileManager.getJavaFileObjectsFromFiles(info.sourceFiles.map { File(it) })
val dc = DiagnosticCollector<JavaFileObject>()
val classes = arrayListOf<String>()
val writer = PrintWriter(System.out)
val task = compiler.getTask(writer, fileManager, dc, allArgs, classes, fileObjects)
val result = task.call()
command = "javac " + allArgs.joinToString(" ") + " " + info.sourceFiles.joinToString(" ")
log(2, "Launching\n$command")
val result = task.call()
errorMessage = dc.diagnostics.joinToString("\n")
result
} else {
log(2, "Didn't find system Java compiler, forking javac")
val allArgs = arrayListOf(
executable.absolutePath,
"-d", KFiles.makeDir(info.directory!!, info.outputDir.path).path)
allArgs.addAll(info.sourceFiles)
val pb = ProcessBuilder(allArgs)
pb.inheritIO()
val line = allArgs.joinToString(" ")
log(1, " Compiling ${info.sourceFiles.size} files")
log(2, " Compiling $line")
command = allArgs.joinToString(" ") + " " + info.sourceFiles.joinToString(" ")
val process = pb.start()
val errorCode = process.waitFor()
errorMessage = "Something went wrong running javac, need to switch to RunCommand"
errorCode == 0
}
return if (result) {
TaskResult(true, "Compilation succeeded")
} else {
val message = "Compilation errors, command:\n$command" +
dc.diagnostics.joinToString("\n")
val message = "Compilation errors, command:\n$command" + errorMessage
log(1, message)
TaskResult(false, message)
}