From f46245621fc3528aa893ae7f820a13dec1ae08b1 Mon Sep 17 00:00:00 2001 From: "Nataliya.Valtman" Date: Fri, 1 Sep 2023 13:01:05 +0200 Subject: [PATCH] Log created error file in debug log KT-59451 Fixed --- .../jetbrains/kotlin/gradle/BuildReportsIT.kt | 22 ++++++++++--------- .../GradleKotlinCompilerWork.kt | 2 +- .../kotlin/compilerRunner/reportUtils.kt | 2 +- .../logging/GradleErrorMessageCollector.kt | 12 +++++++++- .../kotlin/gradle/tasks/Kotlin2JsCompile.kt | 2 +- .../kotlin/gradle/tasks/KotlinCompile.kt | 2 +- .../gradle/tasks/KotlinCompileCommon.kt | 3 ++- 7 files changed, 29 insertions(+), 16 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt index 177738cd879..d513f185d2a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt @@ -283,21 +283,21 @@ class BuildReportsIT : KGPBaseTest() { } """.trimIndent() ) - build("compileKotlin") { + build("compileKotlin", buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) { assertTrue { projectPath.resolve(kotlinErrorPath).listDirectoryEntries().isEmpty() } + assertOutputDoesNotContain("errors were stored into file") } val kotlinFile = kotlinSourcesDir().resolve("helloWorld.kt") kotlinFile.modify { it.replace("ArrayList", "skjfghsjk") } - buildAndFail("compileKotlin") { - val buildErrorDir = projectPath.resolve(kotlinErrorPath).toFile() - val files = buildErrorDir.listFiles() - assertTrue { files?.first()?.exists() ?: false } - files?.first()?.bufferedReader().use { reader -> - val kotlinVersion = reader?.readLine() + buildAndFail("compileKotlin", buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) { + assertOutputContains("errors were stored into file") + val file = projectPath.getSingleFileInDir(kotlinErrorPath) + file.bufferedReader().use { reader -> + val kotlinVersion = reader.readLine() assertTrue("kotlin version should be in the error file") { kotlinVersion != null && kotlinVersion.trim().equals("kotlin version: ${buildOptions.kotlinVersion}") } - val errorMessage = reader?.readLine() + val errorMessage = reader.readLine() assertTrue("Error message should start with 'error message: ' to parse it on IDEA side") { errorMessage != null && errorMessage.trim().startsWith("error message:") } @@ -314,13 +314,15 @@ class BuildReportsIT : KGPBaseTest() { @GradleTest fun testErrorsFileWithCompilationError(gradleVersion: GradleVersion) { project("simpleProject", gradleVersion) { - build("compileKotlin") { + build("compileKotlin", buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) { assertTrue { projectPath.resolve(kotlinErrorPath).listDirectoryEntries().isEmpty() } + assertOutputDoesNotContain("errors were stored into file") } val kotlinFile = kotlinSourcesDir().resolve("helloWorld.kt") kotlinFile.modify { it.replace("ArrayList", "skjfghsjk") } - buildAndFail("compileKotlin") { + buildAndFail("compileKotlin", buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) { assertTrue { projectPath.resolve(kotlinErrorPath).listDirectoryEntries().isEmpty() } + assertOutputDoesNotContain("errors were stored into file") } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt index 9299e1b6eac..8218a5d8f5e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt @@ -130,7 +130,7 @@ internal class GradleKotlinCompilerWork @Inject constructor( metrics.startMeasure(GradleBuildTime.RUN_COMPILATION_IN_WORKER) try { val gradlePrintingMessageCollector = GradlePrintingMessageCollector(log, allWarningsAsErrors) - val gradleMessageCollector = GradleErrorMessageCollector(gradlePrintingMessageCollector, kotlinPluginVersion = kotlinPluginVersion) + val gradleMessageCollector = GradleErrorMessageCollector(log, gradlePrintingMessageCollector, kotlinPluginVersion = kotlinPluginVersion) val (exitCode, executionStrategy) = compileWithDaemonOrFallbackImpl(gradleMessageCollector) if (incrementalCompilationEnvironment?.disableMultiModuleIC == true) { incrementalCompilationEnvironment.multiModuleICSettings.buildHistoryFile.delete() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt index 27292d5c413..98321050696 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt @@ -120,7 +120,7 @@ internal fun runToolInSeparateProcess( compilerClassName, "@${compilerOptions.absolutePath}" ) - val messageCollector = GradleErrorMessageCollector(createLoggingMessageCollector(logger)) + val messageCollector = GradleErrorMessageCollector(logger, createLoggingMessageCollector(logger)) val process = launchProcessWithFallback(builder, DaemonReportingTargets(messageCollector = messageCollector)) // important to read inputStream, otherwise the process may hang on some systems diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/logging/GradleErrorMessageCollector.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/logging/GradleErrorMessageCollector.kt index d5c01c49500..bd60d93b935 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/logging/GradleErrorMessageCollector.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/logging/GradleErrorMessageCollector.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.gradle.logging +import org.gradle.api.logging.Logger +import org.jetbrains.kotlin.buildtools.api.KotlinLogger import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation import org.jetbrains.kotlin.cli.common.messages.MessageCollector @@ -12,11 +14,19 @@ import java.io.File import java.io.FileWriter class GradleErrorMessageCollector( + private val logger: KotlinLogger, private val delegate: MessageCollector? = null, private val acceptableMessageSeverity: List = listOf(CompilerMessageSeverity.EXCEPTION), private val kotlinPluginVersion: String? = null ) : MessageCollector { + constructor( + logger: Logger, + delegate: MessageCollector? = null, + acceptableMessageSeverity: List = listOf(CompilerMessageSeverity.EXCEPTION), + kotlinPluginVersion: String? = null, + ) : this(GradleKotlinLogger(logger), delegate, acceptableMessageSeverity, kotlinPluginVersion) + private val errors = ArrayList() override fun clear() { @@ -47,7 +57,6 @@ class GradleErrorMessageCollector( return } file.createNewFile() - println("Errors were stored into ${file.absolutePath}") FileWriter(file).use { kotlinPluginVersion?.also { version -> it.append("kotlin version: $version\n") } for (error in errors) { @@ -55,6 +64,7 @@ class GradleErrorMessageCollector( } it.flush() } + logger.debug("${errors.count()} errors were stored into file ${file.absolutePath}") clear() } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt index 207e00709be..c3b23e4f67f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt @@ -318,7 +318,7 @@ abstract class Kotlin2JsCompile @Inject constructor( val gradlePrintingMessageCollector = GradlePrintingMessageCollector(logger, args.allWarningsAsErrors) val gradleMessageCollector = - GradleErrorMessageCollector(gradlePrintingMessageCollector, kotlinPluginVersion = getKotlinPluginVersion(logger)) + GradleErrorMessageCollector(logger, gradlePrintingMessageCollector, kotlinPluginVersion = getKotlinPluginVersion(logger)) val outputItemCollector = OutputItemsCollectorImpl() val compilerRunner = compilerRunner.get() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt index c360f541e22..77c1bc3a3d6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt @@ -310,7 +310,7 @@ abstract class KotlinCompile @Inject constructor( val gradlePrintingMessageCollector = GradlePrintingMessageCollector(logger, args.allWarningsAsErrors) val gradleMessageCollector = GradleErrorMessageCollector( - gradlePrintingMessageCollector, kotlinPluginVersion = getKotlinPluginVersion(logger) + logger, gradlePrintingMessageCollector, kotlinPluginVersion = getKotlinPluginVersion(logger) ) val outputItemCollector = OutputItemsCollectorImpl() val compilerRunner = compilerRunner.get() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt index b2935927e83..41d07600a28 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.internal.tasks.allOutputFiles import org.jetbrains.kotlin.gradle.logging.GradleErrorMessageCollector +import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger import org.jetbrains.kotlin.gradle.logging.GradlePrintingMessageCollector import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerArgumentsProducer.CreateCompilerArgumentsContext import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerArgumentsProducer.CreateCompilerArgumentsContext.Companion.create @@ -135,7 +136,7 @@ abstract class KotlinCompileCommon @Inject constructor( taskOutputsBackup: TaskOutputsBackup? ) { val gradlePrintingMessageCollector = GradlePrintingMessageCollector(logger, args.allWarningsAsErrors) - val gradleMessageCollector = GradleErrorMessageCollector(gradlePrintingMessageCollector) + val gradleMessageCollector = GradleErrorMessageCollector(logger, gradlePrintingMessageCollector) val outputItemCollector = OutputItemsCollectorImpl() val compilerRunner = compilerRunner.get() val environment = GradleCompilerEnvironment(