[Gradle][Minor] Deprecate 'KotlinCompilation.associateWith' property...

... in favor of associateCompilations and allAssociateCompilations

^KT-60937 Verification Pending
This commit is contained in:
Sebastian Sellmair
2023-08-04 16:05:49 +02:00
committed by Space Team
parent 8ce820d944
commit 6c6200a9c5
13 changed files with 36 additions and 26 deletions
@@ -707,8 +707,10 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinCompila
public abstract fun attributes (Lorg/gradle/api/Action;)V public abstract fun attributes (Lorg/gradle/api/Action;)V
public abstract fun defaultSourceSet (Lkotlin/jvm/functions/Function1;)V public abstract fun defaultSourceSet (Lkotlin/jvm/functions/Function1;)V
public abstract fun defaultSourceSet (Lorg/gradle/api/Action;)V public abstract fun defaultSourceSet (Lorg/gradle/api/Action;)V
public abstract fun getAllAssociatedCompilations ()Ljava/util/Set;
public abstract fun getAllKotlinSourceSets ()Ljava/util/Set; public abstract fun getAllKotlinSourceSets ()Ljava/util/Set;
public abstract fun getAssociateWith ()Ljava/util/List; public abstract fun getAssociateWith ()Ljava/util/List;
public abstract fun getAssociatedCompilations ()Ljava/util/Set;
public abstract fun getCompilationName ()Ljava/lang/String; public abstract fun getCompilationName ()Ljava/lang/String;
public abstract fun getCompileAllTaskName ()Ljava/lang/String; public abstract fun getCompileAllTaskName ()Ljava/lang/String;
public abstract fun getCompileDependencyConfigurationName ()Ljava/lang/String; public abstract fun getCompileDependencyConfigurationName ()Ljava/lang/String;
@@ -744,6 +746,7 @@ public final class org/jetbrains/kotlin/gradle/plugin/KotlinCompilation$DefaultI
public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;Lkotlin/jvm/functions/Function1;)V public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;Lkotlin/jvm/functions/Function1;)V
public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;Lorg/gradle/api/Action;)V public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;Lorg/gradle/api/Action;)V
public static fun defaultSourceSet (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;Lorg/gradle/api/Action;)V public static fun defaultSourceSet (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;Lorg/gradle/api/Action;)V
public static fun getAssociateWith (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Ljava/util/List;
public static fun getDefaultSourceSetName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Ljava/lang/String; public static fun getDefaultSourceSetName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Ljava/lang/String;
public static fun getDisambiguatedName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Ljava/lang/String; public static fun getDisambiguatedName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Ljava/lang/String;
public static fun getName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Ljava/lang/String; public static fun getName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Ljava/lang/String;
@@ -774,6 +777,7 @@ public final class org/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnabl
public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;Lkotlin/jvm/functions/Function1;)V public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;Lkotlin/jvm/functions/Function1;)V
public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;Lorg/gradle/api/Action;)V public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;Lorg/gradle/api/Action;)V
public static fun defaultSourceSet (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;Lorg/gradle/api/Action;)V public static fun defaultSourceSet (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;Lorg/gradle/api/Action;)V
public static fun getAssociateWith (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;)Ljava/util/List;
public static fun getDefaultSourceSetName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;)Ljava/lang/String; public static fun getDefaultSourceSetName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;)Ljava/lang/String;
public static fun getDisambiguatedName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;)Ljava/lang/String; public static fun getDisambiguatedName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;)Ljava/lang/String;
public static fun getName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;)Ljava/lang/String; public static fun getName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationToRunnableFiles;)Ljava/lang/String;
@@ -790,6 +794,7 @@ public final class org/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResou
public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;Lkotlin/jvm/functions/Function1;)V public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;Lkotlin/jvm/functions/Function1;)V
public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;Lorg/gradle/api/Action;)V public static fun attributes (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;Lorg/gradle/api/Action;)V
public static fun defaultSourceSet (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;Lorg/gradle/api/Action;)V public static fun defaultSourceSet (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;Lorg/gradle/api/Action;)V
public static fun getAssociateWith (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;)Ljava/util/List;
public static fun getDefaultSourceSetName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;)Ljava/lang/String; public static fun getDefaultSourceSetName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;)Ljava/lang/String;
public static fun getDisambiguatedName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;)Ljava/lang/String; public static fun getDisambiguatedName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;)Ljava/lang/String;
public static fun getName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;)Ljava/lang/String; public static fun getName (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilationWithResources;)Ljava/lang/String;
@@ -14,6 +14,7 @@ import org.gradle.api.attributes.HasAttributes
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptionsDeprecated import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptionsDeprecated
import org.jetbrains.kotlin.gradle.dsl.KotlinCompileDeprecated import org.jetbrains.kotlin.gradle.dsl.KotlinCompileDeprecated
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
@@ -136,7 +137,23 @@ interface KotlinCompilation<out T : KotlinCommonOptionsDeprecated> : Named,
fun associateWith(other: KotlinCompilation<*>) fun associateWith(other: KotlinCompilation<*>)
val associateWith: List<KotlinCompilation<*>> @Deprecated("Use 'associatedCompilations' instead", ReplaceWith("associatedCompilations.toList()"))
val associateWith: List<KotlinCompilation<*>> get() = associatedCompilations.toList()
/**
* All compilations previously associated using [associateWith]
*
* e.g. 'test' compilations will return 'setOf(main)' by default
* @since 1.9.20
*/
val associatedCompilations: Set<KotlinCompilation<*>>
/**
* Full transitive closure of [associatedCompilations]
* @since 1.9.20
*/
@ExperimentalKotlinGradlePluginApi
val allAssociatedCompilations: Set<KotlinCompilation<*>>
override fun getName(): String = compilationName override fun getName(): String = compilationName
@@ -208,7 +208,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
targets.flatMap { it.compilations }.forEach { compilation -> targets.flatMap { it.compilations }.forEach { compilation ->
val variant = fragmentByName(compilation.defaultSourceSetName) val variant = fragmentByName(compilation.defaultSourceSetName)
compilation.associateWith.forEach { associate -> compilation.associatedCompilations.forEach { associate ->
val associateVariant = fragmentByName(associate.defaultSourceSetName) val associateVariant = fragmentByName(associate.defaultSourceSetName)
variant.declaredModuleDependencies.add(KpmModuleDependency(associateVariant.containingModule.moduleIdentifier)) variant.declaredModuleDependencies.add(KpmModuleDependency(associateVariant.containingModule.moduleIdentifier))
} }
@@ -21,8 +21,8 @@ internal interface InternalKotlinCompilation<out T : KotlinCommonOptions> : Kotl
override val kotlinSourceSets: ObservableSet<KotlinSourceSet> override val kotlinSourceSets: ObservableSet<KotlinSourceSet>
override val allKotlinSourceSets: ObservableSet<KotlinSourceSet> override val allKotlinSourceSets: ObservableSet<KotlinSourceSet>
val associatedCompilations: ObservableSet<KotlinCompilation<*>> override val associatedCompilations: ObservableSet<KotlinCompilation<*>>
val allAssociatedCompilations: ObservableSet<KotlinCompilation<*>> override val allAssociatedCompilations: ObservableSet<KotlinCompilation<*>>
val configurations: KotlinCompilationConfigurationsContainer val configurations: KotlinCompilationConfigurationsContainer
val friendPaths: Iterable<FileCollection> val friendPaths: Iterable<FileCollection>
@@ -10,7 +10,6 @@ import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.api.tasks.bundling.AbstractArchiveTask
import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool
import org.jetbrains.kotlin.gradle.utils.filesProvider import org.jetbrains.kotlin.gradle.utils.filesProvider
@@ -25,7 +24,7 @@ internal class DefaultKotlinCompilationFriendPathsResolver(
override fun resolveFriendPaths(compilation: InternalKotlinCompilation<*>): Iterable<FileCollection> { override fun resolveFriendPaths(compilation: InternalKotlinCompilation<*>): Iterable<FileCollection> {
return mutableListOf<FileCollection>().apply { return mutableListOf<FileCollection>().apply {
compilation.associateWithClosure.forEach { compilation.allAssociatedCompilations.forEach {
add(it.output.classesDirs) add(it.output.classesDirs)
// Adding classes that could be produced to non-default destination for JVM target // Adding classes that could be produced to non-default destination for JVM target
// Check KotlinSourceSetProcessor for details // Check KotlinSourceSetProcessor for details
@@ -69,7 +68,7 @@ internal class DefaultKotlinCompilationFriendPathsResolver(
} }
private fun resolveFriendArtifactsTask(compilation: InternalKotlinCompilation<*>): TaskProvider<AbstractArchiveTask>? { private fun resolveFriendArtifactsTask(compilation: InternalKotlinCompilation<*>): TaskProvider<AbstractArchiveTask>? {
if (compilation.associateWithClosure.none { it.isMain() }) return null if (compilation.allAssociatedCompilations.none { it.isMain() }) return null
val archiveTasks = compilation.project.tasks.withType(AbstractArchiveTask::class.java) val archiveTasks = compilation.project.tasks.withType(AbstractArchiveTask::class.java)
if (compilation.target.artifactsTaskName !in archiveTasks.names) return null if (compilation.target.artifactsTaskName !in archiveTasks.names) return null
return archiveTasks.named(compilation.target.artifactsTaskName) return archiveTasks.named(compilation.target.artifactsTaskName)
@@ -194,9 +194,6 @@ internal class KotlinCompilationImpl constructor(
override val allAssociatedCompilations: ObservableSet<KotlinCompilation<*>> override val allAssociatedCompilations: ObservableSet<KotlinCompilation<*>>
get() = allAssociatedCompilationsImpl get() = allAssociatedCompilationsImpl
override val associateWith: List<KotlinCompilation<*>>
get() = associatedCompilationsImpl.toList()
override fun associateWith(other: KotlinCompilation<*>) { override fun associateWith(other: KotlinCompilation<*>) {
require(other.target == target) { "Only associations between compilations of a single target are supported" } require(other.target == target) { "Only associations between compilations of a single target are supported" }
if (!associatedCompilationsImpl.add(other)) return if (!associatedCompilationsImpl.add(other)) return
@@ -71,9 +71,6 @@ internal fun addSourcesToKotlinCompileTask(
} }
} }
internal val KotlinCompilation<*>.associateWithClosure: Iterable<KotlinCompilation<*>>
get() = this.closure { it.associateWith }
internal fun KotlinCompilation<*>.disambiguateName(simpleName: String): String { internal fun KotlinCompilation<*>.disambiguateName(simpleName: String): String {
return lowerCamelCaseName( return lowerCamelCaseName(
target.disambiguationClassifier, target.disambiguationClassifier,
@@ -6,14 +6,11 @@
package org.jetbrains.kotlin.gradle.plugin.sources package org.jetbrains.kotlin.gradle.plugin.sources
import org.gradle.api.GradleException import org.gradle.api.GradleException
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.associateWithClosure
fun getSourceSetsFromAssociatedCompilations(fromCompilation: KotlinCompilation<*>): Map<KotlinCompilation<*>, Set<KotlinSourceSet>> = fun getSourceSetsFromAssociatedCompilations(fromCompilation: KotlinCompilation<*>): Map<KotlinCompilation<*>, Set<KotlinSourceSet>> =
fromCompilation.associateWithClosure.associate { it to it.allKotlinSourceSets } fromCompilation.allAssociatedCompilations.associate { it to it.allKotlinSourceSets }
fun getVisibleSourceSetsFromAssociateCompilations( fun getVisibleSourceSetsFromAssociateCompilations(
sourceSet: KotlinSourceSet sourceSet: KotlinSourceSet
@@ -93,7 +90,7 @@ class UnsatisfiedSourceSetVisibilityException(
else "\n" else "\n"
) )
compilation.associateWith.forEach { appendCompilationRecursively(it, depth + 1) } compilation.associatedCompilations.toList().forEach { appendCompilationRecursively(it, depth + 1) }
if (!isAssociatedCompilation) { if (!isAssociatedCompilation) {
val missingRequiredSourceSets = requiredButNotVisible.filter { missingSourceSet -> val missingRequiredSourceSets = requiredButNotVisible.filter { missingSourceSet ->
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.associateWithClosure
import org.jetbrains.kotlin.gradle.plugin.sources.internal import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropIdentifier.Scope import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropIdentifier.Scope
import org.jetbrains.kotlin.tooling.core.UnsafeApi import org.jetbrains.kotlin.tooling.core.UnsafeApi
@@ -58,7 +57,7 @@ internal fun CInteropCommonizerDependent.Factory.from(
This relationship should not be declared, but we try to be lenient towards it here. This relationship should not be declared, but we try to be lenient towards it here.
*/ */
val filteredCompilations = compilations.filter { compilation -> val filteredCompilations = compilations.filter { compilation ->
compilation.associateWithClosure.none { associateCompilation -> associateCompilation in compilations } compilation.allAssociatedCompilations.none { associatedCompilation -> associatedCompilation in compilations }
}.ifEmpty { return null }.toSet() }.ifEmpty { return null }.toSet()
val scopes: Set<Scope> = filteredCompilations val scopes: Set<Scope> = filteredCompilations
@@ -92,7 +91,7 @@ internal suspend fun CInteropCommonizerDependent.Factory.fromAssociateCompilatio
target = sourceSet.commonizerTarget.await() as? SharedCommonizerTarget ?: return null, target = sourceSet.commonizerTarget.await() as? SharedCommonizerTarget ?: return null,
compilations = sourceSet.internal.compilations compilations = sourceSet.internal.compilations
.filterIsInstance<KotlinNativeCompilation>() .filterIsInstance<KotlinNativeCompilation>()
.flatMap { compilation -> compilation.associateWithClosure } .flatMap { compilation -> compilation.allAssociatedCompilations }
.filterIsInstance<KotlinNativeCompilation>() .filterIsInstance<KotlinNativeCompilation>()
.toSet() .toSet()
) )
@@ -76,7 +76,7 @@ internal fun Project.getPlatformCinteropDependenciesOrEmpty(
/* Participating in multiple compilations? -> can't propagate -> should be commonized */ /* Participating in multiple compilations? -> can't propagate -> should be commonized */
val compilation = compilations.singleOrNull() as? KotlinNativeCompilation ?: return@files emptySet<File>() val compilation = compilations.singleOrNull() as? KotlinNativeCompilation ?: return@files emptySet<File>()
(compilation.associateWith + compilation) (compilation.associatedCompilations + compilation)
.filterIsInstance<KotlinNativeCompilation>() .filterIsInstance<KotlinNativeCompilation>()
.filter(compilationFilter) .filter(compilationFilter)
.map { relevantCompilation -> getAllCInteropOutputFiles(relevantCompilation) } .map { relevantCompilation -> getAllCInteropOutputFiles(relevantCompilation) }
@@ -45,7 +45,7 @@ open class NativePerformanceReport : DefaultTask() {
// Get compile task and associated with it other compile tasks. // Get compile task and associated with it other compile tasks.
private fun getAllExecutedTasks(compilation: KotlinCompilation<*>): List<Task> { private fun getAllExecutedTasks(compilation: KotlinCompilation<*>): List<Task> {
val tasks = mutableListOf(compilation.compileKotlinTask as Task) val tasks = mutableListOf(compilation.compileKotlinTask as Task)
compilation.associateWith.forEach { compilation.associatedCompilations.toList().forEach {
tasks += getAllExecutedTasks(it) tasks += getAllExecutedTasks(it)
} }
return tasks return tasks
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPro
import org.jetbrains.kotlin.gradle.plugin.internal.BuildIdService import org.jetbrains.kotlin.gradle.plugin.internal.BuildIdService
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.associateWithClosure
import org.jetbrains.kotlin.gradle.plugin.mpp.internal import org.jetbrains.kotlin.gradle.plugin.mpp.internal
import org.jetbrains.kotlin.gradle.report.BuildMetricsService import org.jetbrains.kotlin.gradle.report.BuildMetricsService
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
@@ -127,7 +126,7 @@ internal abstract class AbstractKotlinCompileConfig<TASK : AbstractKotlinCompile
task.friendPaths.from({ compilationInfo.friendPaths }) task.friendPaths.from({ compilationInfo.friendPaths })
compilationInfo.tcsOrNull?.compilation?.let { compilation -> compilationInfo.tcsOrNull?.compilation?.let { compilation ->
task.friendSourceSets task.friendSourceSets
.value(providers.provider { compilation.associateWithClosure.map { it.name } }) .value(providers.provider { compilation.allAssociatedCompilations.map { it.name } })
.disallowChanges() .disallowChanges()
task.pluginClasspath.from( task.pluginClasspath.from(
compilation.internal.configurations.pluginConfiguration compilation.internal.configurations.pluginConfiguration
@@ -107,7 +107,7 @@ class ExternalKotlinTargetApiTests {
} }
auxCompilation.associateWith(mainCompilation) auxCompilation.associateWith(mainCompilation)
assertEquals(setOf(mainCompilation), auxCompilation.associateWith.toSet()) assertEquals(setOf(mainCompilation), auxCompilation.associatedCompilations.toSet())
} }
@Test @Test