[Gradle][MPP] Replace KotlinSourceSet closure extensions w/ InternalKotlinSourceSet API

KT-52726
This commit is contained in:
Sebastian Sellmair
2022-09-06 14:38:10 +02:00
committed by Space
parent d19aea36e5
commit c6e9216663
8 changed files with 22 additions and 18 deletions
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.* import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.*
import org.jetbrains.kotlin.gradle.plugin.sources.android.kotlinAndroidSourceSetLayout import org.jetbrains.kotlin.gradle.plugin.sources.android.kotlinAndroidSourceSetLayout
import org.jetbrains.kotlin.gradle.plugin.sources.defaultSourceSetLanguageSettingsChecker import org.jetbrains.kotlin.gradle.plugin.sources.defaultSourceSetLanguageSettingsChecker
import org.jetbrains.kotlin.gradle.plugin.sources.dependsOnClosure
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
@@ -267,7 +267,7 @@ open class DefaultCompilationDetails<T : KotlinCommonOptions>(
override fun source(sourceSet: KotlinSourceSet) { override fun source(sourceSet: KotlinSourceSet) {
if (directlyIncludedKotlinSourceSets.add(sourceSet)) { if (directlyIncludedKotlinSourceSets.add(sourceSet)) {
target.project.whenEvaluated { target.project.whenEvaluated {
addExactSourceSetsEagerly(sourceSet.withDependsOnClosure) addExactSourceSetsEagerly(sourceSet.internal.withDependsOnClosure)
} }
} }
} }
@@ -388,7 +388,7 @@ internal open class SharedNativeCompilationDetails(
val friendSourceSets = getVisibleSourceSetsFromAssociateCompilations(project, defaultSourceSet).toMutableSet().apply { val friendSourceSets = getVisibleSourceSetsFromAssociateCompilations(project, defaultSourceSet).toMutableSet().apply {
// TODO: implement proper dependsOn/refines compiler args for Kotlin/Native and pass the dependsOn klibs separately; // TODO: implement proper dependsOn/refines compiler args for Kotlin/Native and pass the dependsOn klibs separately;
// But for now, those dependencies don't have any special semantics, so passing all them as friends works, too // But for now, those dependencies don't have any special semantics, so passing all them as friends works, too
addAll(defaultSourceSet.dependsOnClosure) addAll(defaultSourceSet.internal.dependsOnClosure)
} }
project.files(friendSourceSets.mapNotNull { project.getMetadataCompilationForSourceSet(it)?.output?.classesDirs }) project.files(friendSourceSets.mapNotNull { project.getMetadataCompilationForSourceSet(it)?.output?.classesDirs })
}) })
@@ -13,6 +13,7 @@ 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.sources.KotlinDependencyScope.* import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.*
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
import org.jetbrains.kotlin.gradle.targets.metadata.ALL_COMPILE_METADATA_CONFIGURATION_NAME import org.jetbrains.kotlin.gradle.targets.metadata.ALL_COMPILE_METADATA_CONFIGURATION_NAME
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
@@ -49,7 +50,7 @@ open class TransformKotlinGranularMetadata
} }
private val participatingSourceSets: Set<KotlinSourceSet> private val participatingSourceSets: Set<KotlinSourceSet>
get() = transformation.kotlinSourceSet.withDependsOnClosure.toMutableSet().apply { get() = transformation.kotlinSourceSet.internal.withDependsOnClosure.toMutableSet().apply {
if (any { it.name == KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME }) if (any { it.name == KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME })
add(project.kotlinExtension.sourceSets.getByName(KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME)) add(project.kotlinExtension.sourceSets.getByName(KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME))
} }
@@ -222,12 +222,16 @@ internal fun KotlinSourceSet.disambiguateName(simpleName: String): String {
internal fun createDefaultSourceDirectorySet(project: Project, name: String?): SourceDirectorySet = internal fun createDefaultSourceDirectorySet(project: Project, name: String?): SourceDirectorySet =
project.objects.sourceDirectorySet(name!!, name) project.objects.sourceDirectorySet(name!!, name)
@Deprecated("Use InternalKotlinSourceSet.dependsOnClosure instead") @Suppress("Unused") // Still part of public API
@Deprecated("Use InternalKotlinSourceSet.dependsOnClosure instead. Will be removed in Kotlin 1.9")
val KotlinSourceSet.dependsOnClosure: Set<KotlinSourceSet> get() = this.internal.dependsOnClosure val KotlinSourceSet.dependsOnClosure: Set<KotlinSourceSet> get() = this.internal.dependsOnClosure
@Deprecated("Use InternalKotlinSourceSet.withDependsOnClosure instead") @Suppress("Unused") // Still part of public API
@Deprecated("Use InternalKotlinSourceSet.withDependsOnClosure instead. Will be removed in Kotlin 1.9")
val KotlinSourceSet.withDependsOnClosure: Set<KotlinSourceSet> get() = this.internal.withDependsOnClosure val KotlinSourceSet.withDependsOnClosure: Set<KotlinSourceSet> get() = this.internal.withDependsOnClosure
@Suppress("Unused") // Still part of public API
@Deprecated("Use InternalKotlinSourceSet.withDependsOnClosure instead. Will be removed in Kotlin 1.9")
val Iterable<KotlinSourceSet>.dependsOnClosure: Set<KotlinSourceSet> val Iterable<KotlinSourceSet>.dependsOnClosure: Set<KotlinSourceSet>
get() = flatMap { it.internal.dependsOnClosure }.toSet() - this.toSet() get() = flatMap { it.internal.dependsOnClosure }.toSet() - this.toSet()
@@ -140,7 +140,7 @@ internal fun checkSourceSetVisibilityRequirements(
val inferredVisibility = val inferredVisibility =
getVisibleSourceSetsFromAssociateCompilations(compilationsBySourceSet[sourceSet].orEmpty()) getVisibleSourceSetsFromAssociateCompilations(compilationsBySourceSet[sourceSet].orEmpty())
val requiredButNotVisible = requiredVisibility - inferredVisibility - sourceSet.withDependsOnClosure val requiredButNotVisible = requiredVisibility - inferredVisibility - sourceSet.internal.withDependsOnClosure
if (requiredButNotVisible.isNotEmpty()) { if (requiredButNotVisible.isNotEmpty()) {
val compilations = compilationsBySourceSet.getValue(sourceSet) val compilations = compilationsBySourceSet.getValue(sourceSet)
@@ -263,7 +263,7 @@ class KotlinMetadataTargetConfigurator :
* See also: [buildKotlinProjectStructureMetadata], where these dependencies must be included into the source set exported deps. * See also: [buildKotlinProjectStructureMetadata], where these dependencies must be included into the source set exported deps.
*/ */
if (isSharedNativeCompilation) { if (isSharedNativeCompilation) {
sourceSet.withDependsOnClosure.forEach { hierarchySourceSet -> sourceSet.internal.withDependsOnClosure.forEach { hierarchySourceSet ->
apiElementsConfiguration.extendsFrom( apiElementsConfiguration.extendsFrom(
configurations.sourceSetDependencyConfigurationByScope( configurations.sourceSetDependencyConfigurationByScope(
hierarchySourceSet, hierarchySourceSet,
@@ -447,7 +447,7 @@ class KotlinMetadataTargetConfigurator :
val sourceSet = compilation.defaultSourceSet val sourceSet = compilation.defaultSourceSet
val dependsOnCompilationOutputs = lazy { val dependsOnCompilationOutputs = lazy {
sourceSet.withDependsOnClosure.mapNotNull { hierarchySourceSet -> sourceSet.internal.withDependsOnClosure.mapNotNull { hierarchySourceSet ->
val dependencyCompilation = project.getMetadataCompilationForSourceSet(hierarchySourceSet) val dependencyCompilation = project.getMetadataCompilationForSourceSet(hierarchySourceSet)
dependencyCompilation?.output?.classesDirs.takeIf { hierarchySourceSet != sourceSet } dependencyCompilation?.output?.classesDirs.takeIf { hierarchySourceSet != sourceSet }
} }
@@ -574,7 +574,7 @@ internal fun isSharedNativeSourceSet(project: Project, sourceSet: KotlinSourceSe
} }
internal fun dependsOnClosureWithInterCompilationDependencies(project: Project, sourceSet: KotlinSourceSet): Set<KotlinSourceSet> = internal fun dependsOnClosureWithInterCompilationDependencies(project: Project, sourceSet: KotlinSourceSet): Set<KotlinSourceSet> =
sourceSet.dependsOnClosure.toMutableSet().apply { sourceSet.internal.dependsOnClosure.toMutableSet().apply {
addAll(getVisibleSourceSetsFromAssociateCompilations(project, sourceSet)) addAll(getVisibleSourceSetsFromAssociateCompilations(project, sourceSet))
} }
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.Choos
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleIdentifiers import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleIdentifiers
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.sources.SourceSetMetadataStorageForIde import org.jetbrains.kotlin.gradle.plugin.sources.SourceSetMetadataStorageForIde
import org.jetbrains.kotlin.gradle.plugin.sources.dependsOnClosure
import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.dependsOn
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.tasks.withType
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCommonCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.AbstractKotlinFragmentMetadataCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.AbstractKotlinFragmentMetadataCompilationData
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinMetadataCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinMetadataCompilationData
import org.jetbrains.kotlin.gradle.plugin.sources.dependsOnClosure import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.tasks.KotlinCompileCommon import org.jetbrains.kotlin.gradle.tasks.KotlinCompileCommon
import java.io.File import java.io.File
@@ -38,7 +38,7 @@ internal class KotlinCompileCommonConfig(
is KotlinCompilation<*> -> { is KotlinCompilation<*> -> {
val defaultKotlinSourceSet: KotlinSourceSet = compilation.defaultSourceSet val defaultKotlinSourceSet: KotlinSourceSet = compilation.defaultSourceSet
val metadataTarget = compilation.owner as KotlinTarget val metadataTarget = compilation.owner as KotlinTarget
defaultKotlinSourceSet.dependsOnClosure defaultKotlinSourceSet.internal.dependsOnClosure
.mapNotNull { sourceSet -> metadataTarget.compilations.findByName(sourceSet.name)?.output?.classesDirs } .mapNotNull { sourceSet -> metadataTarget.compilations.findByName(sourceSet.name)?.output?.classesDirs }
.flatten() .flatten()
} }
@@ -11,8 +11,8 @@ package org.jetbrains.kotlin.gradle
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.testfixtures.ProjectBuilder import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.sources.dependsOnClosure
import org.jetbrains.kotlin.gradle.plugin.sources.findSourceSetsDependingOn import org.jetbrains.kotlin.gradle.plugin.sources.findSourceSetsDependingOn
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.junit.Test import org.junit.Test
import kotlin.test.BeforeTest import kotlin.test.BeforeTest
import kotlin.test.assertEquals import kotlin.test.assertEquals
@@ -72,19 +72,19 @@ class ResolveKotlinSourceSetsTest {
macosMain.dependsOn(nativeMain) macosMain.dependsOn(nativeMain)
assertEquals( assertEquals(
setOf(nativeMain, commonMain), linuxMain.dependsOnClosure setOf(nativeMain, commonMain), linuxMain.internal.dependsOnClosure
) )
assertEquals( assertEquals(
setOf(commonMain), nativeMain.dependsOnClosure setOf(commonMain), nativeMain.internal.dependsOnClosure
) )
assertEquals( assertEquals(
emptySet(), commonMain.dependsOnClosure emptySet(), commonMain.internal.dependsOnClosure
) )
assertEquals( assertEquals(
setOf(commonMain), jvmMain.dependsOnClosure setOf(commonMain), jvmMain.internal.dependsOnClosure
) )
} }
} }