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> {
|
abstract class CLITool<A : CommonToolArguments> {
|
||||||
fun exec(errStream: PrintStream, vararg args: String): ExitCode {
|
fun exec(errStream: PrintStream, vararg args: String): ExitCode {
|
||||||
val rendererType = System.getProperty(MessageRenderer.PROPERTY_KEY)
|
return exec(errStream, Services.EMPTY, defaultMessageRenderer(), args)
|
||||||
|
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun exec(errStream: PrintStream, messageRenderer: MessageRenderer, vararg args: String): ExitCode
|
||||||
|
= exec(errStream, Services.EMPTY, messageRenderer, args)
|
||||||
|
|
||||||
protected fun exec(
|
protected fun exec(
|
||||||
errStream: PrintStream,
|
errStream: PrintStream,
|
||||||
services: Services,
|
services: Services,
|
||||||
@@ -192,6 +185,16 @@ abstract class CLITool<A : CommonToolArguments> {
|
|||||||
abstract fun executableScriptFileName(): String
|
abstract fun executableScriptFileName(): String
|
||||||
|
|
||||||
companion object {
|
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
|
* Useful main for derived command line tools
|
||||||
*/
|
*/
|
||||||
@@ -215,8 +218,13 @@ abstract class CLITool<A : CommonToolArguments> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun doMainNoExit(compiler: CLITool<*>, args: Array<String>): ExitCode = try {
|
@JvmOverloads
|
||||||
compiler.exec(System.err, *args)
|
fun doMainNoExit(
|
||||||
|
compiler: CLITool<*>,
|
||||||
|
args: Array<String>,
|
||||||
|
messageRenderer: MessageRenderer = defaultMessageRenderer()
|
||||||
|
): ExitCode = try {
|
||||||
|
compiler.exec(System.err, messageRenderer, *args)
|
||||||
} catch (e: CompileEnvironmentException) {
|
} catch (e: CompileEnvironmentException) {
|
||||||
System.err.println(e.message)
|
System.err.println(e.message)
|
||||||
ExitCode.INTERNAL_ERROR
|
ExitCode.INTERNAL_ERROR
|
||||||
|
|||||||
Reference in New Issue
Block a user