Resolve #KT-26865 and related issues
CLITool.exec is used in konanc to perform compilation of native project. Due to some internal limitation, this function runs in separate process. After this change, there will be a possibility to choose MessageRenderer used in CLITool.exec via system property org.jetbrains.kotlin.cliMessageRenderer. Reviewed at KOTLIN-CR-2698.
This commit is contained in:
+2
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.compilerRunner
|
||||
import org.gradle.api.Named
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
||||
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
||||
import org.jetbrains.kotlin.konan.KonanVersion
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
@@ -103,6 +104,7 @@ internal abstract class KonanCliRunner(
|
||||
|
||||
override val additionalSystemProperties = mutableMapOf(
|
||||
"konan.home" to project.konanHome,
|
||||
MessageRenderer.PROPERTY_KEY to MessageRenderer.GRADLE_STYLE.name,
|
||||
"java.library.path" to "${project.konanHome}/konan/nativelib"
|
||||
)
|
||||
|
||||
|
||||
+8
-17
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.logging
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.GradleStyleMessageRenderer
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.compilerRunner.KotlinLogger
|
||||
|
||||
@@ -17,6 +18,8 @@ internal class GradlePrintingMessageCollector(val logger: KotlinLogger) :
|
||||
|
||||
private var hasErrors = false
|
||||
|
||||
private val messageRenderer = GradleStyleMessageRenderer()
|
||||
|
||||
override fun hasErrors() = hasErrors
|
||||
|
||||
override fun clear() {
|
||||
@@ -24,37 +27,25 @@ internal class GradlePrintingMessageCollector(val logger: KotlinLogger) :
|
||||
}
|
||||
|
||||
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) {
|
||||
fun formatMsg(prefix: String) =
|
||||
buildString {
|
||||
append("$prefix: ")
|
||||
|
||||
location?.apply {
|
||||
append("$path: ")
|
||||
if (line > 0 && column > 0) {
|
||||
append("($line, $column): ")
|
||||
}
|
||||
}
|
||||
|
||||
append(message)
|
||||
}
|
||||
val renderedMessage = messageRenderer.render(severity, message, location)
|
||||
|
||||
when (severity) {
|
||||
CompilerMessageSeverity.ERROR,
|
||||
CompilerMessageSeverity.EXCEPTION -> {
|
||||
hasErrors = true
|
||||
logger.error(formatMsg("e"))
|
||||
logger.error(renderedMessage)
|
||||
}
|
||||
|
||||
CompilerMessageSeverity.WARNING,
|
||||
CompilerMessageSeverity.STRONG_WARNING -> {
|
||||
logger.warn(formatMsg("w"))
|
||||
logger.warn(renderedMessage)
|
||||
}
|
||||
CompilerMessageSeverity.INFO -> {
|
||||
logger.info(formatMsg("i"))
|
||||
logger.info(renderedMessage)
|
||||
}
|
||||
CompilerMessageSeverity.LOGGING,
|
||||
CompilerMessageSeverity.OUTPUT -> {
|
||||
logger.debug(formatMsg("v"))
|
||||
logger.debug(renderedMessage)
|
||||
}
|
||||
}!! // !! is used to force compile-time exhaustiveness
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user