Log daemon exception for In process compilation into error.log

This commit is contained in:
nataliya.valtman
2022-09-29 13:28:33 +02:00
committed by Space Team
parent 242b83edbd
commit 2379185398
6 changed files with 22 additions and 11 deletions
@@ -22,6 +22,8 @@ import org.jetbrains.kotlin.gradle.utils.stackTraceAsString
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.ClasspathChanges
import org.jetbrains.kotlin.incremental.IncrementalModuleInfo
import org.jetbrains.kotlin.incremental.util.ExceptionLocation
import org.jetbrains.kotlin.incremental.util.reportException
import org.jetbrains.kotlin.util.removeSuffixIfPresent
import org.slf4j.LoggerFactory
import java.io.*
@@ -153,6 +155,7 @@ internal class GradleKotlinCompilerWork @Inject constructor(
try {
return compileWithDaemon(messageCollector) to KotlinCompilerExecutionStrategy.DAEMON
} catch (e: Throwable) {
messageCollector.reportException(e, ExceptionLocation.DAEMON)
if (!compilerExecutionSettings.useDaemonFallbackStrategy) {
throw RuntimeException(
"Failed to compile with Kotlin daemon. Fallback strategy (compiling without Kotlin daemon) is turned off. " +
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback
import org.jetbrains.kotlin.gradle.logging.GradleErrorMessageCollector
import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
import org.jetbrains.org.objectweb.asm.ClassReader
@@ -107,13 +108,13 @@ internal fun runToolInSeparateProcess(
compilerClassName,
"@${compilerOptions.absolutePath}"
)
val messageCollector = createLoggingMessageCollector(logger)
val messageCollector = GradleErrorMessageCollector(createLoggingMessageCollector(logger))
val process = launchProcessWithFallback(builder, DaemonReportingTargets(messageCollector = messageCollector))
// important to read inputStream, otherwise the process may hang on some systems
val readErrThread = thread {
process.errorStream!!.bufferedReader().forEachLine {
logger.error(it)
messageCollector.report(CompilerMessageSeverity.EXCEPTION, it)
}
}