From 57294f91fe3ca9514d8a52fc6ff0f4e4561c3d0c Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Fri, 25 Aug 2023 18:15:22 +0200 Subject: [PATCH] [Gradle] Get rid of `StartParameterInternal.isConfigurationCache` calls #KT-61457 Fixed --- .../CompilerSystemPropertiesService.kt | 4 ++-- .../plugin/mpp/apple/XcodeMessageReporting.kt | 4 ++-- .../gradle/plugin/statistics/BuildFlowService.kt | 10 +++++----- .../kotlin/gradle/report/BuildMetricsService.kt | 9 +++++---- .../native/performance/KotlinPerformancePlugin.kt | 4 ++-- .../kotlin/gradle/utils/configurationCache.kt | 13 +++---------- 6 files changed, 19 insertions(+), 25 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/CompilerSystemPropertiesService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/CompilerSystemPropertiesService.kt index 0772a807bb5..6e32fc12d2d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/CompilerSystemPropertiesService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/CompilerSystemPropertiesService.kt @@ -15,10 +15,10 @@ import org.gradle.api.services.BuildServiceParameters import org.gradle.api.tasks.Internal import org.jetbrains.kotlin.cli.common.CompilerSystemProperties import org.jetbrains.kotlin.gradle.plugin.internal.configurationTimePropertiesAccessor +import org.jetbrains.kotlin.gradle.plugin.internal.isConfigurationCacheRequested import org.jetbrains.kotlin.gradle.plugin.internal.usedAtConfigurationTime import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject -import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable internal interface UsesCompilerSystemPropertiesService : Task { @get:Internal @@ -67,7 +67,7 @@ internal abstract class CompilerSystemPropertiesService : BuildService - if (isConfigurationCacheAvailable(project.gradle)) { + if (project.isConfigurationCacheRequested) { service.parameters.properties.set( CompilerSystemProperties.values() .filterNot { it.alwaysDirectAccess } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/XcodeMessageReporting.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/XcodeMessageReporting.kt index 09b3b79628e..8c78211a402 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/XcodeMessageReporting.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/XcodeMessageReporting.kt @@ -11,8 +11,8 @@ import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_USE_XCODE_MESSAGE_STYLE import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin +import org.jetbrains.kotlin.gradle.plugin.internal.isConfigurationCacheRequested import org.jetbrains.kotlin.gradle.utils.getOrPutRootProjectProperty -import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable internal val Project.useXcodeMessageStyle: Boolean get() = getOrPutRootProjectProperty("$KOTLIN_NATIVE_USE_XCODE_MESSAGE_STYLE.extra") { @@ -32,7 +32,7 @@ internal fun Project.addBuildListenerForXcode() { return } - if (isConfigurationCacheAvailable(gradle)) { + if (isConfigurationCacheRequested) { // TODO https://youtrack.jetbrains.com/issue/KT-55832 // Configuration cache case will be supported later return diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt index ae1dbac8f4a..6abeb16d5f3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt @@ -20,10 +20,10 @@ import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.BuildEventsListenerRegistryHolder import org.jetbrains.kotlin.gradle.plugin.StatisticsBuildFlowManager +import org.jetbrains.kotlin.gradle.plugin.internal.isConfigurationCacheRequested import org.jetbrains.kotlin.gradle.plugin.internal.isProjectIsolationEnabled import org.jetbrains.kotlin.gradle.report.BuildReportType import org.jetbrains.kotlin.gradle.report.reportingSettings -import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import org.jetbrains.kotlin.statistics.metrics.IStatisticsValuesConsumer import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics @@ -46,13 +46,13 @@ internal abstract class BuildFlowService : BuildService !isConfigurationCacheAvailable(gradle) + GradleVersion.current().baseVersion < GradleVersion.version("7.4") -> !project.isConfigurationCacheRequested GradleVersion.current().baseVersion < GradleVersion.version("8.1") -> true //known issue. Cant reuse cache if file is changed in gradle_user_home dir: KT-58768 - else -> !isConfigurationCacheAvailable(gradle) + else -> !project.isConfigurationCacheRequested } } fun registerIfAbsent( @@ -64,7 +64,7 @@ internal abstract class BuildFlowService : BuildService } - val fusStatisticsAvailable = fusStatisticsAvailable(project.gradle) + val fusStatisticsAvailable = fusStatisticsAvailable(project) val buildScanReportEnabled = reportingSettings(project).buildReportOutputs.contains(BuildReportType.BUILD_SCAN) //Workaround for known issues for Gradle 8+: https://github.com/gradle/gradle/issues/24887: diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsService.kt index bd3625010b9..2aae82a7d77 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsService.kt @@ -36,13 +36,13 @@ import org.jetbrains.kotlin.gradle.report.BuildReportsService.Companion.getStart import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject -import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable import org.jetbrains.kotlin.incremental.ChangedFiles import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentLinkedQueue import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.plugin.internal.isConfigurationCacheRequested import java.lang.management.ManagementFactory internal interface UsesBuildMetricsService : Task { @@ -220,7 +220,7 @@ abstract class BuildMetricsService : BuildService { + private fun setupTags(project: Project): ArrayList { + val gradle = project.gradle val additionalTags = ArrayList() - if (isConfigurationCacheAvailable(gradle)) { + if (project.isConfigurationCacheRequested) { additionalTags.add(StatTag.CONFIGURATION_CACHE) } if (gradle.startParameter.isBuildCacheEnabled) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/performance/KotlinPerformancePlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/performance/KotlinPerformancePlugin.kt index 603e8f9df08..eb594b2b37e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/performance/KotlinPerformancePlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/performance/KotlinPerformancePlugin.kt @@ -13,10 +13,10 @@ import org.gradle.api.plugins.ExtraPropertiesExtension import org.gradle.api.tasks.TaskState import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.addExtension +import org.jetbrains.kotlin.gradle.plugin.internal.isConfigurationCacheRequested import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName import org.jetbrains.kotlin.gradle.targets.native.tasks.NativePerformanceReport import org.jetbrains.kotlin.gradle.tasks.registerTask -import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import java.util.concurrent.ConcurrentHashMap @@ -66,7 +66,7 @@ open class KotlinPerformancePlugin : Plugin { private fun configureTasks(project: Project, performanceExtension: PerformanceExtension) { // Add time listener. - if (!isConfigurationCacheAvailable(project.gradle)) { + if (!project.isConfigurationCacheRequested) { val timeListener = TaskTimerListener(project) project.gradle.addListener(timeListener) performanceExtension.trackedBinaries.forEach { binary -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/configurationCache.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/configurationCache.kt index 8f17119f1d5..f4d99313e77 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/configurationCache.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/configurationCache.kt @@ -8,27 +8,20 @@ package org.jetbrains.kotlin.gradle.utils import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.internal.StartParameterInternal -import org.gradle.api.invocation.Gradle import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.plugin.internal.configurationTimePropertiesAccessor +import org.jetbrains.kotlin.gradle.plugin.internal.isConfigurationCacheRequested import org.jetbrains.kotlin.gradle.plugin.internal.usedAtConfigurationTime -internal fun isConfigurationCacheAvailable(gradle: Gradle) = - try { - val startParameters = gradle.startParameter - startParameters.javaClass.getMethod("isConfigurationCache").invoke(startParameters) as? Boolean - } catch (_: Exception) { - null - } ?: false - internal fun Project.readSystemPropertyAtConfigurationTime(key: String): Provider { return providers.systemProperty(key).usedAtConfigurationTime(configurationTimePropertiesAccessor) } fun Task.notCompatibleWithConfigurationCacheCompat(reason: String) { val reportConfigurationCacheWarnings = try { + val requested = project.isConfigurationCacheRequested val startParameters = project.gradle.startParameter as? StartParameterInternal - startParameters?.run { isConfigurationCache && !isConfigurationCacheQuiet } ?: false + requested && (startParameters?.isConfigurationCacheQuiet ?: false) } catch (_: IncompatibleClassChangeError) { // for cases when gradle is way too old false }