From 5fd070a9b9f2e33f00ef65003cfa93a27dbd2246 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 6 Nov 2018 16:40:33 +0900 Subject: [PATCH] Kapt: Add option for showing annotation processor timings (KT-28024) --- .../kapt/Kapt3KotlinGradleSubplugin.kt | 1 + .../kotlin/gradle/plugin/KaptExtension.kt | 2 ++ .../kotlin/kapt3/base/KaptOptions.kt | 1 + .../kotlin/kapt3/base/annotationProcessing.kt | 19 +++++++++++++++---- plugins/kapt3/kapt3-cli/src/KaptCliOption.kt | 7 +++++++ .../org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt | 1 + 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt index b9ec9267bd2..b6e2278b82d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt @@ -343,6 +343,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { pluginOptions += SubpluginOption("correctErrorTypes", "${kaptExtension.correctErrorTypes}") pluginOptions += SubpluginOption("mapDiagnosticLocations", "${kaptExtension.mapDiagnosticLocations}") pluginOptions += SubpluginOption("strictMode", "${kaptExtension.strictMode}") + pluginOptions += SubpluginOption("showProcessorTimings", "${kaptExtension.showProcessorTimings}") pluginOptions += SubpluginOption("detectMemoryLeaks", kaptExtension.detectMemoryLeaks) pluginOptions += SubpluginOption("infoAsWarnings", "${project.isInfoAsWarnings()}") pluginOptions += FilesSubpluginOption("stubs", listOf(getKaptStubsDir())) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KaptExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KaptExtension.kt index a8cea04d17d..e3933dcbf5f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KaptExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KaptExtension.kt @@ -32,6 +32,8 @@ open class KaptExtension { open var mapDiagnosticLocations: Boolean = false open var strictMode: Boolean = false + + open var showProcessorTimings: Boolean = false open var detectMemoryLeaks: String = "default" diff --git a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/KaptOptions.kt b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/KaptOptions.kt index f2274d725e2..4c35397c6f3 100644 --- a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/KaptOptions.kt +++ b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/KaptOptions.kt @@ -82,6 +82,7 @@ interface KaptFlags { } enum class KaptFlag(val description: String) { + SHOW_PROCESSOR_TIMINGS("Show processor time"), VERBOSE("Verbose mode"), INFO_AS_WARNINGS("Info as warnings"), USE_LIGHT_ANALYSIS("Use light analysis"), diff --git a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/annotationProcessing.kt b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/annotationProcessing.kt index 5e9bfe234a3..b44efe19fcd 100644 --- a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/annotationProcessing.kt +++ b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/annotationProcessing.kt @@ -11,6 +11,7 @@ import com.sun.tools.javac.processing.AnnotationProcessingError import com.sun.tools.javac.processing.JavacFiler import com.sun.tools.javac.processing.JavacProcessingEnvironment import com.sun.tools.javac.tree.JCTree +import org.jetbrains.kotlin.base.kapt3.KaptFlag import org.jetbrains.kotlin.kapt3.base.util.KaptBaseError import org.jetbrains.kotlin.kapt3.base.util.isJava9OrLater import org.jetbrains.kotlin.kapt3.base.util.measureTimeMillisWithResult @@ -68,12 +69,15 @@ fun KaptContext.doAnnotationProcessing( if (logger.isVerbose) { logger.info("Annotation processing complete, errors: $errorCount, warnings: $warningCount") + } - logger.info("Annotation processor stats:") - wrappedProcessors.forEach { processor -> - logger.info(processor.renderSpentTime()) - } + val showProcessorTimings = options[KaptFlag.SHOW_PROCESSOR_TIMINGS] + if (logger.isVerbose || showProcessorTimings) { + val loggerFun = if (showProcessorTimings) logger::warn else logger::info + showProcessorTimings(wrappedProcessors, loggerFun) + } + if (logger.isVerbose) { filer.displayState() } @@ -86,6 +90,13 @@ fun KaptContext.doAnnotationProcessing( } } +private fun showProcessorTimings(wrappedProcessors: List, logger: (String) -> Unit) { + logger("Annotation processor stats:") + wrappedProcessors.forEach { processor -> + logger(processor.renderSpentTime()) + } +} + private class ProcessorWrapper(private val delegate: Processor) : Processor by delegate { private var initTime: Long = 0 private val roundTime = mutableListOf() diff --git a/plugins/kapt3/kapt3-cli/src/KaptCliOption.kt b/plugins/kapt3/kapt3-cli/src/KaptCliOption.kt index 2ba1b60d823..40c2233fcfc 100644 --- a/plugins/kapt3/kapt3-cli/src/KaptCliOption.kt +++ b/plugins/kapt3/kapt3-cli/src/KaptCliOption.kt @@ -134,6 +134,13 @@ enum class KaptCliOption( cliToolOption = CliToolOption("-Kapt-verbose", FLAG) ), + SHOW_PROCESSOR_TIMINGS( + "showProcessorTimings", + "true | false", + "Show processor timings", + cliToolOption = CliToolOption("-Kapt-show-processor-timings", FLAG) + ), + STRICT_MODE_OPTION( "strict", "true | false", diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt index 7fd6b45d962..72fc58d160c 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt @@ -108,6 +108,7 @@ class Kapt3CommandLineProcessor : CommandLineProcessor { MAP_DIAGNOSTIC_LOCATIONS_OPTION -> setFlag(KaptFlag.MAP_DIAGNOSTIC_LOCATIONS, value) INFO_AS_WARNINGS_OPTION -> setFlag(KaptFlag.INFO_AS_WARNINGS, value) STRICT_MODE_OPTION -> setFlag(KaptFlag.STRICT, value) + SHOW_PROCESSOR_TIMINGS -> setFlag(KaptFlag.SHOW_PROCESSOR_TIMINGS, value) DETECT_MEMORY_LEAKS_OPTION -> setSelector(enumValues(), value) { detectMemoryLeaks = it } APT_MODE_OPTION -> setSelector(enumValues(), value) { mode = it }