From 278229d2face00449393d0b28081f13852f8cc57 Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Mon, 16 Jan 2023 19:32:30 +0100 Subject: [PATCH] [Gradle] Inverse `usesService` declaration KT-52149 Fixed --- .../CompilerSystemPropertiesService.kt | 26 +++++-- .../GradleKotlinCompilerRunner.kt | 2 +- .../compilerRunner/nativeToolRunners.kt | 2 +- .../incremental/incrementalModuleInfo.kt | 24 ++++++- .../jetbrains/kotlin/gradle/internal/idea.kt | 3 +- .../kotlin/gradle/internal/kapt/KaptTask.kt | 2 +- .../model/builder/KotlinModelBuilder.kt | 2 +- .../gradle/plugin/AbstractKotlinPlugin.kt | 5 +- .../plugin/KotlinMultiplatformPlugin.kt | 2 +- .../gradle/plugin/KotlinPluginWrapper.kt | 1 + .../gradle/plugin/KotlinSourceSetProcessor.kt | 2 +- .../plugin/VariantImplementationFactories.kt | 28 ++++++-- .../ConfigurationTimePropertiesAccessor.kt | 7 +- .../gradle/plugin/mpp/pm20/util/Utils.kt | 9 +-- .../gradle/report/BuildMetricsService.kt | 20 +++++- .../gradle/report/BuildReportsService.kt | 23 ++++++- .../internal/ScriptingGradleSubplugin.kt | 1 - .../internal/LibraryFilterCachingService.kt | 51 ++++++++++++++ .../targets/js/webpack/KotlinWebpack.kt | 7 +- .../targets/jvm/KotlinJvmCompilation.kt | 2 +- .../gradle/targets/jvm/KotlinJvmTarget.kt | 2 +- .../targets/jvm/KotlinWithJavaTarget.kt | 3 +- .../gradle/targets/jvm/tasks/KotlinJvmTest.kt | 5 +- .../native/KonanPropertiesBuildService.kt | 23 +++++-- .../native/KotlinNativeTargetConfigurator.kt | 2 +- .../internal/PlatformLibrariesGenerator.kt | 2 +- .../targets/native/tasks/KotlinNativeLink.kt | 6 +- .../targets/native/tasks/KotlinNativeTasks.kt | 2 +- .../kotlin/gradle/tasks/KotlinTest.kt | 5 +- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 69 ++++--------------- .../AbstractKotlinCompileConfig.kt | 25 +++++-- .../configuration/Kotlin2JsCompileConfig.kt | 11 +-- .../testing/internal/KotlinTestReport.kt | 4 +- .../testing/internal/KotlinTestsRegistry.kt | 3 +- .../testing/internal/TestReportService.kt | 21 +++++- .../kotlin/gradle/utils/configurationCache.kt | 2 +- .../runProjectConfigurationHealthCheck.kt | 2 +- .../jetbrains/kotlin/gradle/util/variants.kt | 1 + .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + 43 files changed, 271 insertions(+), 141 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/internal/LibraryFilterCachingService.kt 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 699131714f9..0772a807bb5 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 @@ -5,16 +5,26 @@ package org.jetbrains.kotlin.compilerRunner -import org.gradle.api.invocation.Gradle +import org.gradle.api.Project +import org.gradle.api.Task import org.gradle.api.provider.MapProperty +import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.services.BuildService 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.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 + val systemPropertiesService: Property +} + internal abstract class CompilerSystemPropertiesService : BuildService, AutoCloseable { internal interface Parameters : BuildServiceParameters { val properties: MapProperty> @@ -53,20 +63,26 @@ internal abstract class CompilerSystemPropertiesService : BuildService = gradle.sharedServices.registerIfAbsent( + fun registerIfAbsent(project: Project): Provider = project.gradle.sharedServices.registerIfAbsent( "${CompilerSystemPropertiesService::class.java.canonicalName}_${CompilerSystemPropertiesService::class.java.classLoader.hashCode()}", CompilerSystemPropertiesService::class.java ) { service -> - if (isConfigurationCacheAvailable(gradle)) { + if (isConfigurationCacheAvailable(project.gradle)) { service.parameters.properties.set( CompilerSystemProperties.values() .filterNot { it.alwaysDirectAccess } .associate { - it.property to gradle.rootProject.providers.systemProperty(it.property) - .usedAtConfigurationTime(gradle.configurationTimePropertiesAccessor) + it.property to project.providers.systemProperty(it.property) + .usedAtConfigurationTime(project.configurationTimePropertiesAccessor) }.toMap() ) } + }.also { serviceProvider -> + SingleActionPerProject.run(project, UsesCompilerSystemPropertiesService::class.java.name) { + project.tasks.withType().configureEach { task -> + task.usesService(serviceProvider) + } + } } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index 1e3d8bd1450..e2fca4a23c7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -382,7 +382,7 @@ internal open class GradleCompilerRunner( project: Project, sourceSetName: String ): File? { - val sourceSets = project.gradle.variantImplementationFactory() + val sourceSets = project.variantImplementationFactory() .getInstance(project) .sourceSetsIfAvailable ?: return null val sourceSet = sourceSets.findByName(sourceSetName) ?: return null diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt index 540054c0f12..c502d067684 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt @@ -45,7 +45,7 @@ internal fun Project.getKonanCacheKind(target: KonanTarget): NativeCacheKind { return when { targetCacheKind != null -> targetCacheKind commonCacheKind != null -> commonCacheKind - else -> KonanPropertiesBuildService.registerIfAbsent(gradle).get().defaultCacheKindForTarget(target) + else -> KonanPropertiesBuildService.registerIfAbsent(this).get().defaultCacheKindForTarget(target) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/incremental/incrementalModuleInfo.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/incremental/incrementalModuleInfo.kt index fb8fdc47f10..7b818a7c09b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/incremental/incrementalModuleInfo.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/incremental/incrementalModuleInfo.kt @@ -5,9 +5,15 @@ package org.jetbrains.kotlin.gradle.incremental +import org.gradle.api.Project +import org.gradle.api.Task import org.gradle.api.provider.Property +import org.gradle.api.provider.Provider import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters +import org.gradle.api.tasks.Internal +import org.jetbrains.kotlin.gradle.tasks.withType +import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject import org.jetbrains.kotlin.incremental.IncrementalModuleInfo /** @@ -18,6 +24,11 @@ interface IncrementalModuleInfoProvider { val info: IncrementalModuleInfo } +internal interface UsesIncrementalModuleInfoBuildService : Task { + @get:Internal + val incrementalModuleInfoProvider: Property +} + /** A build service used to provide [IncrementalModuleInfo] instance for all tasks. */ abstract class IncrementalModuleInfoBuildService : BuildService, IncrementalModuleInfoProvider { @@ -30,9 +41,20 @@ abstract class IncrementalModuleInfoBuildService : BuildService): Provider = + project.gradle.sharedServices.registerIfAbsent(getServiceName(), IncrementalModuleInfoBuildService::class.java) { + it.parameters.info.set(modulesInfo) + }.also { serviceProvider -> + SingleActionPerProject.run(project, UsesIncrementalModuleInfoBuildService::class.java.name) { + project.tasks.withType().configureEach { task -> + task.usesService(serviceProvider) + } + } + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/idea.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/idea.kt index 8005eef3cc3..e27070a288c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/idea.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/idea.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.gradle.plugin.internal.IdeaSyncDetector import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory internal val Project.isInIdeaSync - get() = gradle - .variantImplementationFactory() + get() = variantImplementationFactory() .getInstance(this) .isInIdeaSync \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt index 2439630d5f8..6ffad6c316e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt @@ -268,7 +268,7 @@ abstract class KaptTask @Inject constructor( return project .providers .gradleProperty(KAPT_VERBOSE_OPTION_NAME) - .usedAtConfigurationTime(project.gradle.configurationTimePropertiesAccessor) + .usedAtConfigurationTime(project.configurationTimePropertiesAccessor) .map { it.toString().toBoolean() } .orElse(false) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/model/builder/KotlinModelBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/model/builder/KotlinModelBuilder.kt index d9f4a5f29ce..f07ed4bd423 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/model/builder/KotlinModelBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/model/builder/KotlinModelBuilder.kt @@ -76,7 +76,7 @@ class KotlinModelBuilder(private val kotlinPluginVersion: String, private val an private fun Project.pathOrName() = if (path == ":") name else path private fun AbstractKotlinCompile<*>.createSourceSet(project: Project, projectType: KotlinProject.ProjectType): SourceSet? { - val javaSourceSet = project.gradle + val javaSourceSet = project .variantImplementationFactory() .getInstance(project) .sourceSetsIfAvailable diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/AbstractKotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/AbstractKotlinPlugin.kt index 981f2b770e9..eb0cd54c077 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/AbstractKotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/AbstractKotlinPlugin.kt @@ -96,7 +96,7 @@ internal abstract class AbstractKotlinPlugin( ) inspectTask.classesListFile.disallowChanges() - val sourceSetClassesDir = project.gradle + val sourceSetClassesDir = project .variantImplementationFactory() .getInstance(project) .sourceSetsIfAvailable @@ -134,7 +134,7 @@ internal abstract class AbstractKotlinPlugin( } } - project.gradle + project .variantImplementationFactory() .getInstance() .applyConfiguration(project, target, shouldRewritePoms) @@ -163,7 +163,6 @@ internal abstract class AbstractKotlinPlugin( ) { val project = kotlinTarget.project val javaSourceSets = project - .gradle .variantImplementationFactory() .getInstance(project) .sourceSets diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt index 83311757283..783477cd7f9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt @@ -117,7 +117,7 @@ open class KotlinPlatformImplementationPluginBase(platformName: String) : Kotlin addCommonSourceSetToPlatformSourceSet(commonSourceSet, platformProject) // Workaround for older versions of Kotlin/Native overriding the old signature - commonProject.gradle.variantImplementationFactory() + commonProject.variantImplementationFactory() .getInstance(commonProject) .sourceSetsIfAvailable ?.findByName(commonSourceSet.name) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 00d097275d4..aca614bfc84 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -127,6 +127,7 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin { } private fun Project.registerDefaultVariantImplementations() { + @Suppress("DEPRECATION_ERROR") val factories = VariantImplementationFactories.get(project.gradle) factories.putIfAbsent( MavenPluginConfigurator.MavenPluginConfiguratorVariantFactory::class, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinSourceSetProcessor.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinSourceSetProcessor.kt index 50d415e63b5..3a7bb3767d7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinSourceSetProcessor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinSourceSetProcessor.kt @@ -42,7 +42,7 @@ internal abstract class KotlinSourceSetProcessor>( get() = when (val compilation = compilationInfo.safeAs()?.origin) { is KotlinWithJavaCompilation<*, *> -> compilation.javaSourceSet is KotlinJvmCompilation -> if (compilation.target.withJavaEnabled) { - project.gradle.variantImplementationFactory() + project.variantImplementationFactory() .getInstance(project) .sourceSets .maybeCreate(compilation.name) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/VariantImplementationFactories.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/VariantImplementationFactories.kt index b1bd67ff7d8..523fb6253ca 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/VariantImplementationFactories.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/VariantImplementationFactories.kt @@ -5,14 +5,19 @@ package org.jetbrains.kotlin.gradle.plugin +import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.invocation.Gradle import org.gradle.api.provider.Provider import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters +import org.jetbrains.kotlin.gradle.tasks.withType +import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject import java.util.concurrent.ConcurrentHashMap import kotlin.reflect.KClass +internal interface UsesVariantImplementationFactories : Task + /** * Provides a way for Gradle plugin variants to register specific implementation factories, * that could be used inside common code. @@ -44,7 +49,7 @@ abstract class VariantImplementationFactories : BuildService { // Use class loader hashcode in case there are multiple class loaders in the same build @@ -55,18 +60,27 @@ abstract class VariantImplementationFactories : BuildService + SingleActionPerProject.run(project, UsesVariantImplementationFactories::class.java.name) { + project.tasks.withType().configureEach { task -> + task.usesService(serviceProvider) + } + } + } + + @Deprecated("Should be used with `Project` instance to be able to declare usages in tasks", level = DeprecationLevel.ERROR) fun get(gradle: Gradle): VariantImplementationFactories = getProvider(gradle).get() + + fun get(project: Project): VariantImplementationFactories = getProvider(project).get() } } -internal inline fun Gradle.variantImplementationFactory(): T = +internal inline fun Project.variantImplementationFactory(): T = VariantImplementationFactories.get(this)[T::class] -internal fun Task.declareVariantImplementationFactoryUsage() { - usesService(VariantImplementationFactories.getProvider(project.gradle)) -} - internal inline fun < reified T : VariantImplementationFactories.VariantImplementationFactory - > Gradle.variantImplementationFactoryProvider(): Provider = + > Project.variantImplementationFactoryProvider(): Provider = VariantImplementationFactories.getProvider(this).map { it[T::class] } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationTimePropertiesAccessor.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationTimePropertiesAccessor.kt index 12afd5021e4..99ef8776db5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationTimePropertiesAccessor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationTimePropertiesAccessor.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.gradle.plugin.internal -import org.gradle.api.invocation.Gradle +import org.gradle.api.Project import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory @@ -35,9 +35,8 @@ internal class DefaultConfigurationTimePropertiesAccessor : ConfigurationTimePro override fun Provider.usedAtConfigurationTime(): Provider = this } -internal val Gradle.configurationTimePropertiesAccessor - get() = gradle - .variantImplementationFactory() +internal val Project.configurationTimePropertiesAccessor + get() = variantImplementationFactory() .getInstance() internal fun Provider.usedAtConfigurationTime(accessor: ConfigurationTimePropertiesAccessor) = with(accessor) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/util/Utils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/util/Utils.kt index 56255ae7fb3..7e99ed936a6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/util/Utils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/util/Utils.kt @@ -26,8 +26,7 @@ fun Project.currentBuildId(): BuildIdentifier = * The base name to use for archive files. */ val Project.archivesName - get() = gradle - .variantImplementationFactory() + get() = variantImplementationFactory() .getInstance(this) .archivesName @@ -37,8 +36,7 @@ val Project.archivesName * @return The directory. Never returns null. */ val Project.distsDirectory - get() = gradle - .variantImplementationFactory() + get() = variantImplementationFactory() .getInstance(this) .distsDirectory @@ -48,7 +46,6 @@ val Project.distsDirectory * @return The directory. Never returns null. */ val Project.libsDirectory - get() = gradle - .variantImplementationFactory() + get() = variantImplementationFactory() .getInstance(this) .libsDirectory 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 5457cdf78ad..4873e765e6e 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 @@ -6,10 +6,13 @@ package org.jetbrains.kotlin.gradle.report import org.gradle.api.Project +import org.gradle.api.Task import org.gradle.api.logging.Logging +import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters +import org.gradle.api.tasks.Internal import org.gradle.tooling.events.FailureResult import org.gradle.tooling.events.FinishEvent import org.gradle.tooling.events.OperationCompletionListener @@ -24,12 +27,18 @@ import org.jetbrains.kotlin.build.report.metrics.BuildTime import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord -import org.jetbrains.kotlin.gradle.utils.isProjectIsolationEnabled +import org.jetbrains.kotlin.gradle.tasks.withType +import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentLinkedQueue +internal interface UsesBuildMetricsService : Task { + @get:Internal + val buildMetricsService: Property +} + abstract class BuildMetricsService : BuildService, OperationCompletionListener { private val log = Logging.getLogger(this.javaClass) @@ -127,7 +136,7 @@ abstract class BuildMetricsService : BuildService, private val serviceClass = BuildMetricsService::class.java private val serviceName = "${serviceClass.name}_${serviceClass.classLoader.hashCode()}" - fun registerIfAbsent(project: Project): Provider? { + private fun registerIfAbsentImpl(project: Project): Provider? { // Return early if the service was already registered to avoid the overhead of reading the reporting settings below project.gradle.sharedServices.registrations.findByName(serviceName)?.let { @Suppress("UNCHECKED_CAST") @@ -143,6 +152,13 @@ abstract class BuildMetricsService : BuildService, return project.gradle.sharedServices.registerIfAbsent(serviceName, serviceClass) {}!! } + fun registerIfAbsent(project: Project) = registerIfAbsentImpl(project)?.also { serviceProvider -> + SingleActionPerProject.run(project, UsesBuildMetricsService::class.java.name) { + project.tasks.withType().configureEach { task -> + task.usesService(serviceProvider) + } + } + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildReportsService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildReportsService.kt index c3ccdebafc7..61d18cf6328 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildReportsService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildReportsService.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.gradle.report import org.gradle.api.Project +import org.gradle.api.Task import org.gradle.api.file.DirectoryProperty import org.gradle.api.invocation.Gradle import org.gradle.api.logging.Logging @@ -14,6 +15,7 @@ import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters +import org.gradle.api.tasks.Internal import org.gradle.tooling.events.FinishEvent import org.gradle.tooling.events.OperationCompletionListener import org.gradle.tooling.events.task.TaskFinishEvent @@ -25,6 +27,8 @@ import org.jetbrains.kotlin.gradle.plugin.stat.CompileStatisticsData import org.jetbrains.kotlin.gradle.plugin.stat.GradleBuildStartParameters import org.jetbrains.kotlin.gradle.plugin.stat.StatTag import org.jetbrains.kotlin.gradle.report.data.BuildExecutionData +import org.jetbrains.kotlin.gradle.tasks.withType +import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject import org.jetbrains.kotlin.gradle.utils.formatSize import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable import org.jetbrains.kotlin.utils.addToStdlib.measureTimeMillisWithResult @@ -37,6 +41,11 @@ import java.util.concurrent.Executors import java.util.concurrent.TimeUnit import kotlin.system.measureTimeMillis +internal interface UsesBuildReportsService : Task { + @get:Internal + val buildReportsService: Property +} + abstract class BuildReportsService : BuildService, AutoCloseable, OperationCompletionListener { private val log = Logging.getLogger(this.javaClass) @@ -301,7 +310,10 @@ abstract class BuildReportsService : BuildService): Provider? { + private fun registerIfAbsentImpl( + project: Project, + buildMetricsService: Provider + ): Provider? { val serviceClass = BuildReportsService::class.java val serviceName = "${serviceClass.name}_${serviceClass.classLoader.hashCode()}" @@ -346,6 +358,15 @@ abstract class BuildReportsService : BuildService) = + registerIfAbsentImpl(project, buildMetricsService)?.also { serviceProvider -> + SingleActionPerProject.run(project, UsesBuildReportsService::class.java.name) { + project.tasks.withType().configureEach { task -> + task.usesService(serviceProvider) + } + } + } + private fun setupTags(gradle: Gradle): ArrayList { val additionalTags = ArrayList() if (isConfigurationCacheAvailable(gradle)) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt index d6164017ac4..458896b81d0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt @@ -56,7 +56,6 @@ class ScriptingGradleSubplugin : Plugin { project.afterEvaluate { val javaSourceSets = project - .gradle .variantImplementationFactory() .getInstance(project) .sourceSetsIfAvailable diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/internal/LibraryFilterCachingService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/internal/LibraryFilterCachingService.kt new file mode 100644 index 00000000000..84e9b6f9f26 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/internal/LibraryFilterCachingService.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.targets.js.internal + +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.provider.Property +import org.gradle.api.provider.Provider +import org.gradle.api.services.BuildService +import org.gradle.api.services.BuildServiceParameters +import org.gradle.api.tasks.Internal +import org.jetbrains.kotlin.gradle.tasks.withType +import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject +import java.io.File +import java.util.concurrent.ConcurrentHashMap + +internal interface UsesLibraryFilterCachingService : Task { + @get:Internal + val libraryFilterCacheService: Property +} + +internal abstract class LibraryFilterCachingService : BuildService, AutoCloseable { + internal data class LibraryFilterCacheKey(val dependency: File, val irEnabled: Boolean, val preIrDisabled: Boolean) + + private val cache = ConcurrentHashMap() + + fun getOrCompute(key: LibraryFilterCacheKey, compute: (File) -> Boolean) = cache.computeIfAbsent(key) { + compute(it.dependency) + } + + override fun close() { + cache.clear() + } + + companion object { + fun registerIfAbsent(project: Project): Provider = + project.rootProject.gradle.sharedServices.registerIfAbsent( + "${LibraryFilterCachingService::class.java.canonicalName}_${LibraryFilterCachingService::class.java.classLoader.hashCode()}", + LibraryFilterCachingService::class.java + ) {}.also { serviceProvider -> + SingleActionPerProject.run(project, UsesLibraryFilterCachingService::class.java.name) { + project.tasks.withType().configureEach { task -> + task.usesService(serviceProvider) + } + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index 894ed351795..e1ff292ef45 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -30,7 +30,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory -import org.jetbrains.kotlin.gradle.report.BuildMetricsService +import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWebpackRulesContainer import org.jetbrains.kotlin.gradle.targets.js.dsl.WebpackRulesDsl @@ -53,7 +53,7 @@ constructor( @Transient override val compilation: KotlinJsCompilation, private val objects: ObjectFactory -) : DefaultTask(), RequiresNpmDependencies, WebpackRulesDsl { +) : DefaultTask(), RequiresNpmDependencies, WebpackRulesDsl, UsesBuildMetricsService { @Transient private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) private val versions = nodeJs.versions @@ -69,9 +69,6 @@ constructor( open val execHandleFactory: ExecHandleFactory get() = injected - @get:Internal - internal abstract val buildMetricsService: Property - private val metrics: Property = project.objects .property(BuildMetricsReporterImpl()) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilation.kt index e14ff63ac21..a4c33fb323e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilation.kt @@ -45,7 +45,7 @@ open class KotlinJvmCompilation @Inject internal constructor( val compileJavaTaskProvider: TaskProvider? get() = if (target.withJavaEnabled) { val project = target.project - val javaSourceSets = project.gradle.variantImplementationFactory() + val javaSourceSets = project.variantImplementationFactory() .getInstance(project) .sourceSets val javaSourceSet = javaSourceSets.getByName(compilationName) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt index 888b1e00f28..40df67067da 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt @@ -58,7 +58,7 @@ abstract class KotlinJvmTarget @Inject constructor( withJavaEnabled = true project.plugins.apply(JavaPlugin::class.java) - val javaSourceSets = project.gradle.variantImplementationFactory() + val javaSourceSets = project.variantImplementationFactory() .getInstance(project) .sourceSets AbstractKotlinPlugin.setUpJavaSourceSets(this, duplicateJavaSourceSetsAsKotlinSourceSets = false) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaTarget.kt index b854dcc4bd5..26fa706e6b4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaTarget.kt @@ -66,7 +66,6 @@ abstract class KotlinWithJavaTarget() + get() = variantImplementationFactory() .getInstance(project) .sourceSets \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/tasks/KotlinJvmTest.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/tasks/KotlinJvmTest.kt index 150ea1beb97..d00c411fd60 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/tasks/KotlinJvmTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/tasks/KotlinJvmTest.kt @@ -10,16 +10,17 @@ import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.testing.Test +import org.jetbrains.kotlin.gradle.plugin.UsesVariantImplementationFactories import org.jetbrains.kotlin.gradle.plugin.internal.MppTestReportHelper import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory @CacheableTask -open class KotlinJvmTest : Test() { +open class KotlinJvmTest : Test(), UsesVariantImplementationFactories { @Input @Optional var targetName: String? = null - private val testReporter = project.gradle + private val testReporter = project .variantImplementationFactory() .getInstance() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KonanPropertiesBuildService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KonanPropertiesBuildService.kt index d52e01c275a..e35ae0915dc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KonanPropertiesBuildService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KonanPropertiesBuildService.kt @@ -5,19 +5,28 @@ package org.jetbrains.kotlin.gradle.targets.native -import org.gradle.api.invocation.Gradle +import org.gradle.api.Project +import org.gradle.api.Task import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters +import org.gradle.api.tasks.Internal import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind +import org.jetbrains.kotlin.gradle.tasks.withType +import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject import org.jetbrains.kotlin.konan.properties.resolvablePropertyList import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget import java.util.* +internal interface UsesKonanPropertiesBuildService : Task { + @get:Internal + val konanPropertiesService: Property +} + abstract class KonanPropertiesBuildService : BuildService { internal interface Parameters : BuildServiceParameters { @@ -58,9 +67,15 @@ abstract class KonanPropertiesBuildService : BuildService = - gradle.sharedServices.registerIfAbsent(serviceName, KonanPropertiesBuildService::class.java) { service -> - service.parameters.konanHome.set(gradle.rootProject.konanHome) + fun registerIfAbsent(project: Project): Provider = + project.gradle.sharedServices.registerIfAbsent(serviceName, KonanPropertiesBuildService::class.java) { service -> + service.parameters.konanHome.set(project.rootProject.konanHome) + }.also { serviceProvider -> + SingleActionPerProject.run(project, UsesKonanPropertiesBuildService::class.java.name) { + project.tasks.withType().configureEach { task -> + task.usesService(serviceProvider) + } + } } private val serviceName: String diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 0cce26e40c1..abeeae496cb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -60,6 +60,7 @@ open class KotlinNativeTargetConfigurator : AbstractKotl // which leads to not able run project.afterEvaluate because of wrong context // this afterEvaluate comes from NativeCompilerOptions val compilationCompilerOptions = binary.compilation.compilerOptions + val konanPropertiesBuildService = KonanPropertiesBuildService.registerIfAbsent(project) val result = registerTask( binary.linkTaskName, listOf(binary) ) { @@ -67,7 +68,6 @@ open class KotlinNativeTargetConfigurator : AbstractKotl it.group = BasePlugin.BUILD_GROUP it.description = "Links ${binary.outputKind.description} '${binary.name}' for a target '${target.name}'." it.enabled = binary.konanTarget.enabledOnCurrentHost - val konanPropertiesBuildService = KonanPropertiesBuildService.registerIfAbsent(project.gradle) it.konanPropertiesService.set(konanPropertiesBuildService) it.usesService(konanPropertiesBuildService) it.toolOptions.freeCompilerArgs.convention( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/PlatformLibrariesGenerator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/PlatformLibrariesGenerator.kt index 2f8861cbdfa..69819af880f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/PlatformLibrariesGenerator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/PlatformLibrariesGenerator.kt @@ -37,7 +37,7 @@ internal class PlatformLibrariesGenerator(val project: Project, val konanTarget: File(distribution.platformDefs(konanTarget)).absoluteFile private val konanPropertiesService: KonanPropertiesBuildService - get() = KonanPropertiesBuildService.registerIfAbsent(project.gradle).get() + get() = KonanPropertiesBuildService.registerIfAbsent(project).get() private val konanCacheKind: NativeCacheKind by lazy { project.getKonanCacheKind(konanTarget) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt index 1b91831f74c..577b6356ccd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName import org.jetbrains.kotlin.gradle.plugin.mpp.* -import org.jetbrains.kotlin.gradle.targets.native.KonanPropertiesBuildService +import org.jetbrains.kotlin.gradle.targets.native.UsesKonanPropertiesBuildService import org.jetbrains.kotlin.gradle.targets.native.tasks.CompilerPluginData import org.jetbrains.kotlin.gradle.targets.native.tasks.buildKotlinNativeBinaryLinkerArgs import org.jetbrains.kotlin.gradle.utils.* @@ -48,6 +48,7 @@ constructor( private val objectFactory: ObjectFactory, private val execOperations: ExecOperations ) : AbstractKotlinCompileTool(objectFactory), + UsesKonanPropertiesBuildService, KotlinToolTask { @Deprecated("Visibility will be lifted to private in the future releases") @get:Internal @@ -241,9 +242,6 @@ constructor( } } - @get:Internal - internal abstract val konanPropertiesService: Property - @Suppress("DEPRECATION") @get:Classpath protected val friendModule: FileCollection = objectFactory.fileCollection().from({ compilation.friendPaths }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 7a7960d56ee..eb91bf8f9e6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -519,7 +519,7 @@ internal class ExternalDependenciesBuilder( intermediateLibraryName?.let { KResolvedDependencyId(it) } ?: KResolvedDependencyId.DEFAULT_SOURCE_CODE_MODULE_ID private val konanPropertiesService: KonanPropertiesBuildService - get() = KonanPropertiesBuildService.registerIfAbsent(project.gradle).get() + get() = KonanPropertiesBuildService.registerIfAbsent(project).get() fun buildCompilerArgs(): List { val compilerVersion = Distribution.getCompilerVersion(konanPropertiesService.compilerVersion, project.konanHome) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTest.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTest.kt index 8daf9e46078..661bdff455a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTest.kt @@ -15,12 +15,13 @@ import org.gradle.process.internal.ExecHandleFactory import org.jetbrains.kotlin.gradle.internal.testing.KotlinTestRunnerListener import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutor import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider +import org.jetbrains.kotlin.gradle.plugin.UsesVariantImplementationFactories import org.jetbrains.kotlin.gradle.plugin.internal.MppTestReportHelper import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory import org.jetbrains.kotlin.gradle.utils.injected import javax.inject.Inject -abstract class KotlinTest : AbstractTestTask() { +abstract class KotlinTest : AbstractTestTask(), UsesVariantImplementationFactories { @Input @Optional var targetName: String? = null @@ -64,7 +65,7 @@ abstract class KotlinTest : AbstractTestTask() { PropertiesProvider(project).ignoreTcsmOverflow } - private val testReporter = project.gradle + private val testReporter = project .variantImplementationFactory() .getInstance() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 626ba5094f7..d87d4624adf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -52,10 +52,9 @@ import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService -import org.jetbrains.kotlin.gradle.report.BuildMetricsService -import org.jetbrains.kotlin.gradle.report.BuildReportMode -import org.jetbrains.kotlin.gradle.report.BuildReportsService -import org.jetbrains.kotlin.gradle.report.ReportingSettings +import org.jetbrains.kotlin.gradle.report.* +import org.jetbrains.kotlin.gradle.targets.js.internal.LibraryFilterCachingService +import org.jetbrains.kotlin.gradle.targets.js.internal.UsesLibraryFilterCachingService import org.jetbrains.kotlin.gradle.tasks.internal.KotlinJvmOptionsCompat import org.jetbrains.kotlin.gradle.targets.js.ir.* import org.jetbrains.kotlin.gradle.targets.js.ir.DISABLE_PRE_IR @@ -188,7 +187,8 @@ abstract class GradleCompileTaskProvider @Inject constructor( projectLayout: ProjectLayout, gradle: Gradle, task: Task, - project: Project + project: Project, + incrementalModuleInfoProvider: Provider ) { @get:Internal @@ -217,26 +217,8 @@ abstract class GradleCompileTaskProvider @Inject constructor( .property(project.rootProject.name.normalizeForFlagFile()) @get:Internal - val buildModulesInfo: Provider = objectFactory.property( - /** - * See https://youtrack.jetbrains.com/issue/KT-46820. Build service that holds the incremental info may - * be instantiated during execution phase and there could be multiple threads trying to do that. Because the - * underlying mechanism does not support multi-threaded access, we need to add external synchronization. - */ - synchronized(gradle.sharedServices) { - gradle.sharedServices.registerIfAbsent( - IncrementalModuleInfoBuildService.getServiceName(), IncrementalModuleInfoBuildService::class.java - ) { - it.parameters.info.set( - objectFactory.providerWithLazyConvention { - GradleCompilerRunner.buildModulesInfo(gradle) - } - ) - }.also { - task.usesService(it) - } - } - ) + val buildModulesInfo: Provider = objectFactory + .property(incrementalModuleInfoProvider) @get:Internal val errorsFile: Provider = objectFactory @@ -250,6 +232,11 @@ abstract class AbstractKotlinCompile @Inject constr workerExecutor: WorkerExecutor ) : AbstractKotlinCompileTool(objectFactory), CompileUsingKotlinDaemonWithNormalization, + UsesBuildMetricsService, + UsesBuildReportsService, + UsesIncrementalModuleInfoBuildService, + UsesCompilerSystemPropertiesService, + UsesVariantImplementationFactories, BaseKotlinCompile { init { @@ -292,12 +279,6 @@ abstract class AbstractKotlinCompile @Inject constr @get:Input abstract val ownModuleName: Property - @get:Internal - internal abstract val buildMetricsService: Property - - @get:Internal - internal abstract val buildReportsService: Property - @get:Internal val startParameters = BuildReportsService.getStartParameters(project) @@ -346,7 +327,7 @@ abstract class AbstractKotlinCompile @Inject constr @get:Internal protected val gradleCompileTaskProvider: Provider = objectFactory .property( - objectFactory.newInstance(project.gradle, this, project) + objectFactory.newInstance(project.gradle, this, project, incrementalModuleInfoProvider) ) @get:Internal @@ -381,10 +362,6 @@ abstract class AbstractKotlinCompile @Inject constr } ) - private val systemPropertiesService = CompilerSystemPropertiesService.registerIfAbsent(project.gradle).also { - usesService(it) - } - @get:Internal internal abstract val preciseCompilationResultsBackup: Property @@ -936,6 +913,7 @@ abstract class Kotlin2JsCompile @Inject constructor( workerExecutor: WorkerExecutor ) : AbstractKotlinCompile(objectFactory, workerExecutor), KotlinCompilationTask, + UsesLibraryFilterCachingService, KotlinJsCompile { init { @@ -943,20 +921,6 @@ abstract class Kotlin2JsCompile @Inject constructor( compilerOptions.verbose.convention(logger.isDebugEnabled) } - internal abstract class LibraryFilterCachingService : BuildService, AutoCloseable { - internal data class LibraryFilterCacheKey(val dependency: File, val irEnabled: Boolean, val preIrDisabled: Boolean) - - private val cache = ConcurrentHashMap() - - fun getOrCompute(key: LibraryFilterCacheKey, compute: (File) -> Boolean) = cache.computeIfAbsent(key) { - compute(it.dependency) - } - - override fun close() { - cache.clear() - } - } - override val kotlinOptions: KotlinJsOptions = KotlinJsOptionsCompat( { this }, compilerOptions @@ -1115,9 +1079,6 @@ abstract class Kotlin2JsCompile @Inject constructor( JsLibraryUtils::isKotlinJavascriptLibrary } - @get:Internal - internal abstract val libraryCache: Property - @get:Input internal val jsLegacyNoWarn: Provider = objectFactory.property( PropertiesProvider(project).jsCompilerNoWarn @@ -1126,7 +1087,7 @@ abstract class Kotlin2JsCompile @Inject constructor( @get:Internal protected val libraryFilter: (File) -> Boolean get() = { file -> - libraryCache.get().getOrCompute(file.asLibraryFilterCacheKey, libraryFilterBody) + libraryFilterCacheService.get().getOrCompute(file.asLibraryFilterCacheKey, libraryFilterBody) } override val incrementalProps: List diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt index 5fd35584b96..0064354453e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt @@ -12,8 +12,12 @@ import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Provider import org.gradle.api.provider.ProviderFactory import org.gradle.api.tasks.TaskProvider +import org.jetbrains.kotlin.compilerRunner.CompilerSystemPropertiesService +import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension import org.jetbrains.kotlin.gradle.dsl.topLevelExtension +import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoBuildService +import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoProvider import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.associateWithClosure @@ -23,6 +27,7 @@ import org.jetbrains.kotlin.gradle.report.BuildMetricsService import org.jetbrains.kotlin.gradle.report.BuildReportsService import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.KOTLIN_BUILD_DIR_NAME +import org.jetbrains.kotlin.gradle.utils.providerWithLazyConvention import org.jetbrains.kotlin.project.model.LanguageSettings /** @@ -48,6 +53,13 @@ internal abstract class AbstractKotlinCompileConfig val propertiesProvider = project.kotlinPropertiesProvider @@ -59,14 +71,14 @@ internal abstract class AbstractKotlinCompileConfig - task.buildMetricsService.value(metricsService) - task.usesService(metricsService) - BuildReportsService.registerIfAbsent(project, metricsService)?.also { reportsService -> - task.buildReportsService.value(reportsService) - task.usesService(reportsService) + buildMetricsService?.also { metricsService -> + task.buildMetricsService.value(metricsService).disallowChanges() + buildReportsService?.also { reportsService -> + task.buildReportsService.value(reportsService).disallowChanges() } } + task.systemPropertiesService.value(compilerSystemPropertiesService).disallowChanges() + task.incrementalModuleInfoProvider.value(incrementalModuleInfoProvider).disallowChanges() propertiesProvider.kotlinDaemonJvmArgs?.let { kotlinDaemonJvmArgs -> task.kotlinDaemonJvmArguments.set(providers.provider { @@ -112,7 +124,6 @@ internal abstract class AbstractKotlinCompileConfig( ) : AbstractKotlinCompileConfig(compilation) { init { - val libraryCacheService = project.rootProject.gradle.sharedServices.registerIfAbsent( - "${Kotlin2JsCompile.LibraryFilterCachingService::class.java.canonicalName}_${Kotlin2JsCompile.LibraryFilterCachingService::class.java.classLoader.hashCode()}", - Kotlin2JsCompile.LibraryFilterCachingService::class.java - ) {} + val libraryFilterCachingService = LibraryFilterCachingService.registerIfAbsent(project) configureTask { task -> task.incremental = propertiesProvider.incrementalJs ?: true @@ -68,9 +65,7 @@ internal open class BaseKotlin2JsCompileConfig( ) ) - task.libraryCache.value(libraryCacheService).chainedDisallowChanges().also { - task.usesService(libraryCacheService) - } + task.libraryFilterCacheService.value(libraryFilterCachingService).disallowChanges() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt index 4ac7bb75a48..42f5d639962 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt @@ -44,7 +44,7 @@ import org.jetbrains.kotlin.gradle.utils.toUri * In this case, only topmost aggregate test task will override reporting, * event if child tasks will be executed. */ -abstract class KotlinTestReport : TestReport() { +abstract class KotlinTestReport : TestReport(), UsesTestReportService { @Transient @Internal val testTasks = mutableListOf() @@ -70,8 +70,6 @@ abstract class KotlinTestReport : TestReport() { @Input var ignoreFailures: Boolean = false - @get:Internal - internal abstract val testReportServiceProvider: Property private val testReportService get() = testReportServiceProvider.get() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt index 7d5d4b59038..9d01b2d46b3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt @@ -87,7 +87,7 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = " aggregate.description = description aggregate.group = JavaBasePlugin.VERIFICATION_GROUP - val compatibilityHelper = project.gradle + val compatibilityHelper = project .variantImplementationFactory() .getInstance(project.objects) @@ -99,7 +99,6 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = " aggregate.extensions.extraProperties.set("idea.internal.test", true) } aggregate.htmlReportFile.value(compatibilityHelper.getDestinationDirectory(aggregate).file("index.html")).disallowChanges() - aggregate.usesService(testReportService) aggregate.testReportServiceProvider.value(testReportService).finalizeValueOnRead() aggregate.testReportCompatibilityHelper.value(compatibilityHelper).finalizeValueOnRead() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/TestReportService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/TestReportService.kt index 7385bd0d5f4..483f63cfd75 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/TestReportService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/TestReportService.kt @@ -6,16 +6,26 @@ package org.jetbrains.kotlin.gradle.testing.internal import org.gradle.api.Project +import org.gradle.api.Task import org.gradle.api.file.RegularFileProperty import org.gradle.api.logging.Logging +import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.services.BuildService import org.gradle.api.services.BuildServiceParameters +import org.gradle.api.tasks.Internal +import org.jetbrains.kotlin.gradle.tasks.withType +import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject import java.io.* import java.util.concurrent.ConcurrentHashMap internal typealias TaskError = Pair +internal interface UsesTestReportService : Task { + @get:Internal + val testReportServiceProvider: Property +} + /** * A build service required for correct test failures detection in [KotlinTestReport] as it requires cross-task interaction. */ @@ -101,14 +111,19 @@ internal abstract class TestReportService : BuildService { - return project.gradle.sharedServices + fun registerIfAbsent(project: Project): Provider = + project.gradle.sharedServices .registerIfAbsent( "${TestReportService::class.java.canonicalName}_${project.path}", TestReportService::class.java ) { spec -> spec.parameters.testTasksStateFile.set(project.buildDir.resolve("test-results/kotlin-test-tasks-state.bin")) + }.also { serviceProvider -> + SingleActionPerProject.run(project, UsesTestReportService::class.java.name) { + project.tasks.withType().configureEach { task -> + task.usesService(serviceProvider) + } + } } - } } } \ No newline at end of file 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 eb187327ebd..ecbaf2f7041 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 @@ -29,7 +29,7 @@ internal fun isConfigurationCacheAvailable(gradle: Gradle) = } ?: false internal fun Project.readSystemPropertyAtConfigurationTime(key: String): Provider { - return providers.systemProperty(key).usedAtConfigurationTime(gradle.configurationTimePropertiesAccessor) + return providers.systemProperty(key).usedAtConfigurationTime(configurationTimePropertiesAccessor) } internal fun unavailableValueError(propertyName: String): Nothing = diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt index b39d20ed7a4..9d0453b17fb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt @@ -82,7 +82,7 @@ private fun Project.syncExceptionsAreNotEmpty(): Boolean { private val Project.providerModeSystemPropertyValue: Provider get() = providers .systemProperty(KotlinDslModelsParameters.PROVIDER_MODE_SYSTEM_PROPERTY_NAME) - .usedAtConfigurationTime(gradle.configurationTimePropertiesAccessor) + .usedAtConfigurationTime(configurationTimePropertiesAccessor) private fun Project.inLenientMode() = providerModeSystemPropertyValue.orNull == KotlinDslModelsParameters.CLASSPATH_MODE_SYSTEM_PROPERTY_VALUE diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/variants.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/variants.kt index 9f771af4792..784c531e3c2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/variants.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/variants.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.gradle.plugin.internal.DefaultConfigurationTimePrope * This helper function is for simple tests that are testing granular logic without applying Kotlin plugin */ fun Gradle.registerConfigurationTimePropertiesAccessorForTests() { + @Suppress("DEPRECATION_ERROR") VariantImplementationFactories.get(gradle).putIfAbsent( ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory::class, DefaultConfigurationTimePropertiesAccessorVariantFactory() diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index f0928753f86..5982f98a931 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -136,6 +136,7 @@ open class KotlinPlatformCommonPlugin : KotlinPlatformPluginBase("common") { } private fun Project.registerVariantImplementations() { + @Suppress("DEPRECATION_ERROR") val factories = VariantImplementationFactories.get(gradle) factories[JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class] = JavaSourceSetsAccessorG70.JavaSourceSetAccessorVariantFactoryG70() diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index 474cef35bb7..f6585aece1d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -141,6 +141,7 @@ open class KotlinPlatformCommonPlugin : KotlinPlatformPluginBase("common") { } private fun Project.registerVariantImplementations() { + @Suppress("DEPRECATION_ERROR") val factories = VariantImplementationFactories.get(gradle) factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] = IdeaSyncDetectorG71.IdeaSyncDetectorVariantFactoryG71() diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index 4ca4a55b9dc..d091a7b658c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -139,6 +139,7 @@ open class KotlinPlatformCommonPlugin : KotlinPlatformPluginBase("common") { } private fun Project.registerVariantImplementations() { + @Suppress("DEPRECATION_ERROR") val factories = VariantImplementationFactories.get(gradle) factories[MppTestReportHelper.MppTestReportHelperVariantFactory::class] = MppTestReportHelperG74.MppTestReportHelperVariantFactoryG74() diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index cdac8150919..69ff075ed9e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -140,6 +140,7 @@ open class KotlinPlatformCommonPlugin : KotlinPlatformPluginBase("common") { } private fun Project.registerVariantImplementations() { + @Suppress("DEPRECATION_ERROR") val factories = VariantImplementationFactories.get(gradle) factories[MppTestReportHelper.MppTestReportHelperVariantFactory::class] = MppTestReportHelperG75.MppTestReportHelperVariantFactoryG75() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index db2a719af39..e14aeea58b4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -140,6 +140,7 @@ open class KotlinPlatformCommonPlugin : KotlinPlatformPluginBase("common") { } private fun Project.registerVariantImplementations() { + @Suppress("DEPRECATION_ERROR") val factories = VariantImplementationFactories.get(gradle) factories[MavenPluginConfigurator.MavenPluginConfiguratorVariantFactory::class] = MavenPluginConfiguratorG6.Gradle6MavenPluginConfiguratorVariantFactory()