[Gradle] Get rid of StartParameterInternal.isConfigurationCache calls

#KT-61457 Fixed
This commit is contained in:
Alexander.Likhachev
2023-08-25 18:15:22 +02:00
committed by Space Team
parent 51fe1fd3cc
commit 57294f91fe
6 changed files with 19 additions and 25 deletions
@@ -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<CompilerS
"${CompilerSystemPropertiesService::class.java.canonicalName}_${CompilerSystemPropertiesService::class.java.classLoader.hashCode()}",
CompilerSystemPropertiesService::class.java
) { service ->
if (isConfigurationCacheAvailable(project.gradle)) {
if (project.isConfigurationCacheRequested) {
service.parameters.properties.set(
CompilerSystemProperties.values()
.filterNot { it.alwaysDirectAccess }
@@ -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
@@ -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<BuildFlowService.Paramet
companion object {
private val serviceName = "${BuildFlowService::class.simpleName}_${BuildFlowService::class.java.classLoader.hashCode()}"
private fun fusStatisticsAvailable(gradle: Gradle): Boolean {
private fun fusStatisticsAvailable(project: Project): Boolean {
return when {
//known issue for Gradle with configurationCache: https://github.com/gradle/gradle/issues/20001
GradleVersion.current().baseVersion < GradleVersion.version("7.4") -> !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<BuildFlowService.Paramet
return it.service as Provider<BuildFlowService>
}
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:
@@ -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<BuildMetricsService.Parameters
}
it.parameters.projectDir.set(project.rootProject.layout.projectDirectory)
//init gradle tags for build scan and http reports
it.parameters.buildConfigurationTags.value(setupTags(project.gradle))
it.parameters.buildConfigurationTags.value(setupTags(project))
}.also {
subscribeForTaskEvents(project, it)
}
@@ -294,9 +294,10 @@ abstract class BuildMetricsService : BuildService<BuildMetricsService.Parameters
}
}
private fun setupTags(gradle: Gradle): ArrayList<StatTag> {
private fun setupTags(project: Project): ArrayList<StatTag> {
val gradle = project.gradle
val additionalTags = ArrayList<StatTag>()
if (isConfigurationCacheAvailable(gradle)) {
if (project.isConfigurationCacheRequested) {
additionalTags.add(StatTag.CONFIGURATION_CACHE)
}
if (gradle.startParameter.isBuildCacheEnabled) {
@@ -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<Project> {
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 ->
@@ -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<String> {
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
}