mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 16:28:12 -07:00
Fallback to javac if the compiler API can't find the compiler.
This commit is contained in:
parent
c5f2368a29
commit
b3fd1a43ad
1 changed files with 44 additions and 19 deletions
|
@ -28,32 +28,57 @@ class JavaCompiler @Inject constructor(val jvmCompiler: JvmCompiler) {
|
||||||
return TaskResult()
|
return TaskResult()
|
||||||
}
|
}
|
||||||
|
|
||||||
val allArgs = arrayListOf(
|
var command: String
|
||||||
"-d", KFiles.makeDir(info.directory!!, info.outputDir.path).path)
|
var errorMessage: String
|
||||||
if (info.dependencies.size > 0) {
|
|
||||||
allArgs.add("-classpath")
|
|
||||||
allArgs.add(info.dependencies.map { it.jarFile.get() }.joinToString(File.pathSeparator))
|
|
||||||
}
|
|
||||||
allArgs.addAll(info.compilerArgs)
|
|
||||||
|
|
||||||
val compiler = ToolProvider.getSystemJavaCompiler()
|
val compiler = ToolProvider.getSystemJavaCompiler()
|
||||||
val fileManager = compiler.getStandardFileManager(null, null, null)
|
val result =
|
||||||
val fileObjects = fileManager.getJavaFileObjectsFromFiles(info.sourceFiles.map { File(it) })
|
if (compiler != null) {
|
||||||
val dc = DiagnosticCollector<JavaFileObject>()
|
log(2, "Found system Java compiler, using the compiler API")
|
||||||
val classes = arrayListOf<String>()
|
val allArgs = arrayListOf(
|
||||||
val writer = PrintWriter(System.out)
|
"-d", KFiles.makeDir(info.directory!!, info.outputDir.path).path)
|
||||||
val task = compiler.getTask(writer, fileManager, dc, allArgs, classes, fileObjects)
|
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(" ")
|
val fileManager = compiler.getStandardFileManager(null, null, null)
|
||||||
log(2, "Launching\n$command")
|
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) {
|
return if (result) {
|
||||||
TaskResult(true, "Compilation succeeded")
|
TaskResult(true, "Compilation succeeded")
|
||||||
} else {
|
} else {
|
||||||
val message = "Compilation errors, command:\n$command" +
|
val message = "Compilation errors, command:\n$command" + errorMessage
|
||||||
dc.diagnostics.joinToString("\n")
|
|
||||||
log(1, message)
|
log(1, message)
|
||||||
TaskResult(false, message)
|
TaskResult(false, message)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue