From 0ab8d07e23c229ba15538972b249646c72777dbe Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Fri, 10 Feb 2023 20:39:31 +0100 Subject: [PATCH] [Gradle] Don't trigger all root project properties evaluation on FUS report `Project.properties` triggers all the properties computation to return them as `Map`. We should query only for a required property instead. #KT-56421 Fixed --- .../gradle/kpm/idea/IdeaKpmDependencyLogger.kt | 5 ++++- .../plugin/statistics/KotlinBuildStatHandler.kt | 2 +- .../plugin/statistics/KotlinBuildStatsService.kt | 12 ++++++++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyLogger.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyLogger.kt index 5c27afd4865..841fab37cef 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyLogger.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmDependencyLogger.kt @@ -9,11 +9,14 @@ import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmDependency import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path +private const val IDEA_KOTLIN_LOG_DEPENDENCIES = "idea.kotlin.log.dependencies" + internal object IdeaKpmDependencyLogger : IdeaKpmDependencyEffect { override fun invoke( fragment: GradleKpmFragment, dependencies: Set ) { - val fragmentPathRegex = fragment.project.properties["idea.kotlin.log.dependencies"]?.toString() ?: return + if (!fragment.project.hasProperty(IDEA_KOTLIN_LOG_DEPENDENCIES)) return + val fragmentPathRegex = fragment.project.property(IDEA_KOTLIN_LOG_DEPENDENCIES).toString() if (!fragment.path.matches(Regex(fragmentPathRegex))) return val message = buildString { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt index 0651c833e18..cf805e845d0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt @@ -80,7 +80,7 @@ class KotlinBuildStatHandler { sessionLogger.report(NumericalMetrics.GRADLE_DAEMON_HEAP_SIZE, Runtime.getRuntime().maxMemory()) sessionLogger.report( BooleanMetrics.KOTLIN_OFFICIAL_CODESTYLE, - gradle.rootProject.properties["kotlin.code.style"] == "official" + gradle.rootProject.providers.gradleProperty("kotlin.code.style").orNull == "official" ) // constants are saved in IDEA plugin and could not be accessed directly gradle.taskGraph.whenReady() { taskExecutionGraph -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt index 630897171f0..72ce0ebbddb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt @@ -152,7 +152,11 @@ internal abstract class KotlinBuildStatsService internal constructor() : BuildAd return if (File(gradle.gradleUserHomeDir, DISABLE_STATISTICS_FILE_NAME).exists()) { false } else { - gradle.rootProject.properties[ENABLE_STATISTICS_PROPERTY_NAME]?.toString()?.toBoolean() ?: DEFAULT_STATISTICS_STATE + if (gradle.rootProject.hasProperty(ENABLE_STATISTICS_PROPERTY_NAME)) { + gradle.rootProject.property(ENABLE_STATISTICS_PROPERTY_NAME).toString().toBoolean() + } else { + DEFAULT_STATISTICS_STATE + } } } } @@ -194,7 +198,11 @@ internal class DefaultKotlinBuildStatsService internal constructor( gradle: Gradle, val beanName: ObjectName ) : KotlinBuildStatsService(), KotlinBuildStatsMXBean { - private val forcePropertiesValidation = gradle.rootProject.properties[FORCE_VALUES_VALIDATION]?.toString()?.toBoolean() ?: false + private val forcePropertiesValidation = if (gradle.rootProject.hasProperty(FORCE_VALUES_VALIDATION)) { + gradle.rootProject.property(FORCE_VALUES_VALIDATION).toString().toBoolean() + } else { + false + } private val sessionLogger = BuildSessionLogger(gradle.gradleUserHomeDir, forceValuesValidation = forcePropertiesValidation) private fun gradleBuildStartTime(gradle: Gradle): Long? {