Allow passing a MessageRenderer to CLITool.mainNoExit
Earlier a system property was used to configure a message renderer for the K/N compiler. The fix for KT-37550 requires getting rid of using properties when the compiler is started in a Gradle process. This patch allows us to specify a correct message renderer at the K/N side depending on entry point used to run the compiler. Issue #KT-37550
This commit is contained in:
@@ -38,19 +38,12 @@ import kotlin.system.exitProcess
|
||||
|
||||
abstract class CLITool<A : CommonToolArguments> {
|
||||
fun exec(errStream: PrintStream, vararg args: String): ExitCode {
|
||||
val rendererType = System.getProperty(MessageRenderer.PROPERTY_KEY)
|
||||
|
||||
val messageRenderer = when (rendererType) {
|
||||
MessageRenderer.XML.name -> MessageRenderer.XML
|
||||
MessageRenderer.GRADLE_STYLE.name -> MessageRenderer.GRADLE_STYLE
|
||||
MessageRenderer.WITHOUT_PATHS.name -> MessageRenderer.WITHOUT_PATHS
|
||||
MessageRenderer.PLAIN_FULL_PATHS.name -> MessageRenderer.PLAIN_FULL_PATHS
|
||||
else -> MessageRenderer.PLAIN_RELATIVE_PATHS
|
||||
}
|
||||
|
||||
return exec(errStream, Services.EMPTY, messageRenderer, args)
|
||||
return exec(errStream, Services.EMPTY, defaultMessageRenderer(), args)
|
||||
}
|
||||
|
||||
fun exec(errStream: PrintStream, messageRenderer: MessageRenderer, vararg args: String): ExitCode
|
||||
= exec(errStream, Services.EMPTY, messageRenderer, args)
|
||||
|
||||
protected fun exec(
|
||||
errStream: PrintStream,
|
||||
services: Services,
|
||||
@@ -192,6 +185,16 @@ abstract class CLITool<A : CommonToolArguments> {
|
||||
abstract fun executableScriptFileName(): String
|
||||
|
||||
companion object {
|
||||
|
||||
private fun defaultMessageRenderer(): MessageRenderer =
|
||||
when (System.getProperty(MessageRenderer.PROPERTY_KEY)) {
|
||||
MessageRenderer.XML.name -> MessageRenderer.XML
|
||||
MessageRenderer.GRADLE_STYLE.name -> MessageRenderer.GRADLE_STYLE
|
||||
MessageRenderer.WITHOUT_PATHS.name -> MessageRenderer.WITHOUT_PATHS
|
||||
MessageRenderer.PLAIN_FULL_PATHS.name -> MessageRenderer.PLAIN_FULL_PATHS
|
||||
else -> MessageRenderer.PLAIN_RELATIVE_PATHS
|
||||
}
|
||||
|
||||
/**
|
||||
* Useful main for derived command line tools
|
||||
*/
|
||||
@@ -215,8 +218,13 @@ abstract class CLITool<A : CommonToolArguments> {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun doMainNoExit(compiler: CLITool<*>, args: Array<String>): ExitCode = try {
|
||||
compiler.exec(System.err, *args)
|
||||
@JvmOverloads
|
||||
fun doMainNoExit(
|
||||
compiler: CLITool<*>,
|
||||
args: Array<String>,
|
||||
messageRenderer: MessageRenderer = defaultMessageRenderer()
|
||||
): ExitCode = try {
|
||||
compiler.exec(System.err, messageRenderer, *args)
|
||||
} catch (e: CompileEnvironmentException) {
|
||||
System.err.println(e.message)
|
||||
ExitCode.INTERNAL_ERROR
|
||||
|
||||
Reference in New Issue
Block a user