Add verbose mode to build reports
#KT-12700 Verbose mode can be enabled by adding `kotlin.build.report.verbose=true` to `gradle.properties` file.
This commit is contained in:
+2
-1
@@ -39,7 +39,8 @@ internal class GradleCompilationResults(
|
||||
log.kotlinDebug { "compiler exit code: $exitCode" }
|
||||
}
|
||||
}
|
||||
CompilationResultCategory.IC_LOG.code -> {
|
||||
CompilationResultCategory.BUILD_REPORT_LINES.code,
|
||||
CompilationResultCategory.VERBOSE_BUILD_REPORT_LINES.code -> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
icLogLines = value as? List<String>
|
||||
}
|
||||
|
||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.compilerRunner
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.jetbrains.kotlin.config.Services
|
||||
import org.jetbrains.kotlin.gradle.logging.GradlePrintingMessageCollector
|
||||
import org.jetbrains.kotlin.gradle.report.BuildReportMode
|
||||
import org.jetbrains.kotlin.gradle.tasks.findToolsJar
|
||||
import java.io.File
|
||||
|
||||
@@ -16,7 +17,7 @@ internal class GradleCompilerEnvironment(
|
||||
messageCollector: GradlePrintingMessageCollector,
|
||||
outputItemsCollector: OutputItemsCollector,
|
||||
val outputFiles: FileCollection,
|
||||
val reportExecutionResult: Boolean,
|
||||
val buildReportMode: BuildReportMode?,
|
||||
val incrementalCompilationEnvironment: IncrementalCompilationEnvironment? = null
|
||||
) : CompilerEnvironment(Services.EMPTY, messageCollector, outputItemsCollector) {
|
||||
val toolsJar: File? by lazy { findToolsJar() }
|
||||
|
||||
+1
-1
@@ -142,7 +142,7 @@ internal open class GradleCompilerRunner(protected val task: Task) {
|
||||
buildFile = buildFile,
|
||||
outputFiles = environment.outputFiles.toList(),
|
||||
taskPath = task.path,
|
||||
reportExecutionResult = environment.reportExecutionResult
|
||||
buildReportMode = environment.buildReportMode
|
||||
)
|
||||
TaskLoggers.put(task.path, task.logger)
|
||||
runCompilerAsync(workArgs)
|
||||
|
||||
+9
-6
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.daemon.common.*
|
||||
import org.jetbrains.kotlin.gradle.logging.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers
|
||||
import org.jetbrains.kotlin.gradle.report.BuildReportMode
|
||||
import org.jetbrains.kotlin.gradle.report.TaskExecutionResult
|
||||
import org.jetbrains.kotlin.gradle.tasks.throwGradleExceptionIfError
|
||||
import org.jetbrains.kotlin.gradle.utils.stackTraceAsString
|
||||
@@ -54,7 +55,7 @@ internal class GradleKotlinCompilerWorkArguments(
|
||||
val buildFile: File?,
|
||||
val outputFiles: List<File>,
|
||||
val taskPath: String,
|
||||
val reportExecutionResult: Boolean
|
||||
val buildReportMode: BuildReportMode?
|
||||
) : Serializable {
|
||||
companion object {
|
||||
const val serialVersionUID: Long = 0
|
||||
@@ -92,7 +93,7 @@ internal class GradleKotlinCompilerWork @Inject constructor(
|
||||
private val buildFile = config.buildFile
|
||||
private val outputFiles = config.outputFiles
|
||||
private val taskPath = config.taskPath
|
||||
private val reportExecutionResult = config.reportExecutionResult
|
||||
private val buildReportMode = config.buildReportMode
|
||||
|
||||
private val log: KotlinLogger =
|
||||
TaskLoggers.get(taskPath)?.let { GradleKotlinLogger(it).apply { debug("Using '$taskPath' logger") } }
|
||||
@@ -253,9 +254,11 @@ internal class GradleKotlinCompilerWork @Inject constructor(
|
||||
val knownChangedFiles = icEnv.changedFiles as? ChangedFiles.Known
|
||||
|
||||
val requestedCompilationResults = EnumSet.of(CompilationResultCategory.IC_COMPILE_ITERATION)
|
||||
if (reportExecutionResult) {
|
||||
requestedCompilationResults.add(CompilationResultCategory.IC_LOG)
|
||||
}
|
||||
when (buildReportMode) {
|
||||
BuildReportMode.SIMPLE -> CompilationResultCategory.BUILD_REPORT_LINES
|
||||
BuildReportMode.VERBOSE -> CompilationResultCategory.VERBOSE_BUILD_REPORT_LINES
|
||||
null -> null
|
||||
}?.let { requestedCompilationResults.add(it) }
|
||||
|
||||
val compilationOptions = IncrementalCompilationOptions(
|
||||
areFileChangesKnown = knownChangedFiles != null,
|
||||
@@ -366,7 +369,7 @@ internal class GradleKotlinCompilerWork @Inject constructor(
|
||||
}
|
||||
|
||||
private inline fun reportExecutionResultIfNeeded(fn: () -> TaskExecutionResult) {
|
||||
if (reportExecutionResult) {
|
||||
if (buildReportMode != null) {
|
||||
val result = fn()
|
||||
TaskExecutionResults[taskPath] = result
|
||||
}
|
||||
|
||||
+1
-1
@@ -64,7 +64,7 @@ open class KaptWithKotlincTask : KaptTask(), CompilerArgumentAwareWithInput<K2JV
|
||||
val outputItemCollector = OutputItemsCollectorImpl()
|
||||
val environment = GradleCompilerEnvironment(
|
||||
compilerClasspath, messageCollector, outputItemCollector,
|
||||
reportExecutionResult = kotlinCompileTask.reportExecutionResult,
|
||||
buildReportMode = kotlinCompileTask.buildReportMode,
|
||||
outputFiles = allOutputFiles()
|
||||
)
|
||||
if (environment.toolsJar == null && !isAtLeastJava9) {
|
||||
|
||||
+3
@@ -59,6 +59,9 @@ internal class PropertiesProvider(private val project: Project) {
|
||||
val buildReportEnabled: Boolean
|
||||
get() = booleanProperty("kotlin.build.report.enable") ?: false
|
||||
|
||||
val buildReportVerbose: Boolean
|
||||
get() = booleanProperty("kotlin.build.report.verbose") ?: false
|
||||
|
||||
val buildReportDir: File?
|
||||
get() = property("kotlin.build.report.dir")?.let { File(it) }
|
||||
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.report
|
||||
|
||||
enum class BuildReportMode {
|
||||
SIMPLE,
|
||||
VERBOSE
|
||||
}
|
||||
+3
-1
@@ -43,10 +43,12 @@ internal fun configureBuildReporter(gradle: Gradle, log: Logger) {
|
||||
val reporter = KotlinBuildReporter(perfReportFile)
|
||||
gradle.addBuildListener(reporter)
|
||||
|
||||
val buildReportMode = if (properties.buildReportVerbose) BuildReportMode.VERBOSE else BuildReportMode.SIMPLE
|
||||
|
||||
gradle.taskGraph.whenReady { graph ->
|
||||
graph.allTasks.asSequence()
|
||||
.filterIsInstance<AbstractKotlinCompile<*>>()
|
||||
.forEach { it.reportExecutionResult = true }
|
||||
.forEach { it.buildReportMode = buildReportMode }
|
||||
}
|
||||
|
||||
log.kotlinDebug { "Configured Kotlin build reporter" }
|
||||
|
||||
+1
-1
@@ -71,7 +71,7 @@ open class KotlinCompileCommon : AbstractKotlinCompile<K2MetadataCompilerArgumen
|
||||
val compilerRunner = compilerRunner()
|
||||
val environment = GradleCompilerEnvironment(
|
||||
computedCompilerClasspath, messageCollector, outputItemCollector,
|
||||
reportExecutionResult = reportExecutionResult,
|
||||
buildReportMode = buildReportMode,
|
||||
outputFiles = allOutputFiles()
|
||||
)
|
||||
compilerRunner.runMetadataCompilerAsync(sourceRoots.kotlinSourceFiles, args, environment)
|
||||
|
||||
+4
-3
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.gradle.internal.tasks.TaskWithLocalState
|
||||
import org.jetbrains.kotlin.gradle.internal.tasks.allOutputFiles
|
||||
import org.jetbrains.kotlin.gradle.logging.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.report.BuildReportMode
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import org.jetbrains.kotlin.incremental.ChangedFiles
|
||||
import org.jetbrains.kotlin.incremental.classpathAsList
|
||||
@@ -133,7 +134,7 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments>() : AbstractKo
|
||||
}
|
||||
|
||||
@get:Internal
|
||||
var reportExecutionResult: Boolean = false
|
||||
internal var buildReportMode: BuildReportMode? = null
|
||||
|
||||
@get:Internal
|
||||
internal val buildHistoryFile: File
|
||||
@@ -439,7 +440,7 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
|
||||
val environment = GradleCompilerEnvironment(
|
||||
computedCompilerClasspath, messageCollector, outputItemCollector,
|
||||
outputFiles = allOutputFiles(),
|
||||
reportExecutionResult = reportExecutionResult,
|
||||
buildReportMode = buildReportMode,
|
||||
incrementalCompilationEnvironment = icEnv
|
||||
)
|
||||
compilerRunner.runJvmCompilerAsync(
|
||||
@@ -597,7 +598,7 @@ open class Kotlin2JsCompile : AbstractKotlinCompile<K2JSCompilerArguments>(), Ko
|
||||
val environment = GradleCompilerEnvironment(
|
||||
computedCompilerClasspath, messageCollector, outputItemCollector,
|
||||
outputFiles = allOutputFiles(),
|
||||
reportExecutionResult = reportExecutionResult,
|
||||
buildReportMode = buildReportMode,
|
||||
incrementalCompilationEnvironment = icEnv
|
||||
)
|
||||
compilerRunner.runJsCompilerAsync(sourceRoots.kotlinSourceFiles, commonSourceSet.toList(), args, environment)
|
||||
|
||||
Reference in New Issue
Block a user