diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt index d3e477d82e9..dfea75bfe4d 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt @@ -38,19 +38,12 @@ import kotlin.system.exitProcess abstract class CLITool { 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 { 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 { } @JvmStatic - fun doMainNoExit(compiler: CLITool<*>, args: Array): ExitCode = try { - compiler.exec(System.err, *args) + @JvmOverloads + fun doMainNoExit( + compiler: CLITool<*>, + args: Array, + messageRenderer: MessageRenderer = defaultMessageRenderer() + ): ExitCode = try { + compiler.exec(System.err, messageRenderer, *args) } catch (e: CompileEnvironmentException) { System.err.println(e.message) ExitCode.INTERNAL_ERROR