From 839e4ecff2324fcaa91410c42758f758398cbf34 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Tue, 12 May 2020 19:37:00 +0700 Subject: [PATCH] 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 --- .../jetbrains/kotlin/cli/common/CLITool.kt | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) 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