[KPM] Remove duplicate KotlinGradleFragmentInternal.refinesClosure

KT-51386
This commit is contained in:
sebastian.sellmair
2022-03-15 14:51:50 +01:00
committed by Space
parent fc0b78e106
commit ef3a3d71b9
10 changed files with 19 additions and 23 deletions
@@ -16,7 +16,6 @@ import org.gradle.api.tasks.Nested
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.refinesClosure
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.withRefinesClosure
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope
@@ -10,7 +10,7 @@ internal class FragmentGranularMetadataResolverFactory {
fun getOrCreate(fragment: KotlinGradleFragment): FragmentGranularMetadataResolver = resolvers.getOrPut(fragment) {
FragmentGranularMetadataResolver(fragment, lazy {
fragment.refinesClosure.minus(fragment).map { refinesFragment ->
fragment.refinesClosure.map { refinesFragment ->
getOrCreate(refinesFragment)
}
})
@@ -6,10 +6,8 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.gradle.api.provider.Provider
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment
import java.io.File
typealias SourceRoots = Iterable<File>
@@ -33,7 +31,7 @@ open class FragmentSourcesProvider {
getSourcesFromFragmentsAsMap(module.fragments)
open fun getSourcesFromRefinesClosureAsMap(fragment: KotlinGradleFragment): SourceRootsProvidersByFragment =
getSourcesFromFragmentsAsMap(fragment.refinesClosure)
getSourcesFromFragmentsAsMap(fragment.withRefinesClosure)
open fun getSourcesFromRefinesClosure(fragment: KotlinGradleFragment): MultipleSourceRootsProvider =
fragment.project.provider { getSourcesFromRefinesClosureAsMap(fragment).values }
@@ -43,9 +41,9 @@ open class FragmentSourcesProvider {
val project = containingModule.project
getSourcesFromRefinesClosureAsMap(fragment)
return project.provider {
fragment.refinesClosure.filter {
fragment.withRefinesClosure.filter {
// Every fragment refined by some other fragment should be considered common, even if it is included in just one variant
containingModule.variantsContainingFragment(it).toSet() != setOf(it)
it.containingVariants != setOf(it)
}.map { project.provider { it.kotlinSourceRoots } }
}
}
@@ -59,4 +57,4 @@ open class LifecycleTasksManager(private val project: Project) {
}
project.tasks.named(LifecycleBasePlugin.BUILD_TASK_NAME).configure { it.dependsOn(classesTask) }
}
}
}
@@ -23,8 +23,6 @@ import org.jetbrains.kotlin.gradle.plugin.sources.FragmentConsistencyChecks
import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenEvaluated
import org.jetbrains.kotlin.project.model.KotlinModuleDependency
import org.jetbrains.kotlin.project.model.KotlinModuleFragment
import org.jetbrains.kotlin.project.model.withRefinesClosure
import javax.inject.Inject
open class KotlinGradleFragmentInternal @Inject constructor(
@@ -114,6 +112,3 @@ open class KotlinGradleFragmentInternal @Inject constructor(
).allChecks
)
}
val KotlinGradleFragment.refinesClosure: Set<KotlinGradleFragment>
get() = (this as KotlinModuleFragment).withRefinesClosure.map { it as KotlinGradleFragment }.toSet()
@@ -3,6 +3,8 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:Suppress("UNCHECKED_CAST")
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.gradle.api.ExtensiblePolymorphicDomainObjectContainer
@@ -10,6 +12,7 @@ import org.gradle.api.NamedDomainObjectSet
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.project.model.*
import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment
import javax.inject.Inject
open class KotlinGradleModuleInternal(
@@ -77,4 +80,4 @@ internal fun KotlinGradleModule.disambiguateName(simpleName: String) =
lowerCamelCaseName(moduleClassifier, simpleName)
internal fun KotlinGradleModule.variantsContainingFragment(fragment: KotlinModuleFragment): Iterable<KotlinGradleVariant> =
variants.filter { fragment in it.refinesClosure }
(this as KotlinModule).variantsContainingFragment(fragment).onEach { it as KotlinGradleVariant } as Iterable<KotlinGradleVariant>
@@ -62,7 +62,7 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
project = project,
fromFiles = resolvableMetadataConfiguration(fragment.containingModule),
parentCompiledMetadataFiles = lazy {
fragment.refinesClosure.minus(fragment).map {
fragment.refinesClosure.map {
val compilation = metadataCompilationRegistry.getForFragmentOrNull(it)
?: return@map project.files()
compilation.output.classesDirs
@@ -95,7 +95,7 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
override val friendPaths: Iterable<FileCollection>
get() = metadataCompilationRegistry.run {
fragment.refinesClosure.minus(fragment)
fragment.refinesClosure
.map {
val compilation = metadataCompilationRegistry.getForFragmentOrNull(it)
?: return@map project.files()
@@ -134,7 +134,7 @@ interface KotlinNativeFragmentMetadataCompilationData :
KotlinNativeCompilationData<KotlinCommonOptions>
internal fun KotlinGradleFragment.isNativeShared(): Boolean =
containingModule.variantsContainingFragment(this).run {
containingVariants.run {
any() && all { it.platformType == KotlinPlatformType.native }
}
@@ -41,7 +41,7 @@ internal open class TransformKotlinGranularMetadataForFragment
@Suppress("unused") // Gradle input
@get:Input
internal val inputFragmentsAndVariants: Map<String, Iterable<String>> by project.provider {
val participatingFragments = fragment.refinesClosure
val participatingFragments = fragment.withRefinesClosure
participatingFragments.associateWith { it.containingVariants }
.entries.associate { (fragment, variants) ->
fragment.name to variants.map { it.fragmentName }.sorted()
@@ -51,7 +51,7 @@ internal open class TransformKotlinGranularMetadataForFragment
@Suppress("unused") // Gradle input
@get:Input
internal val inputVariantDependencies: Map<String, Set<List<String?>>> by project.provider {
val participatingFragments = fragment.refinesClosure
val participatingFragments = fragment.withRefinesClosure
val participatingCompilations = participatingFragments.flatMap { it.containingVariants }
participatingCompilations.associate { variant ->
variant.fragmentName to variant.compileDependenciesConfiguration
@@ -251,7 +251,7 @@ private class MetadataCompilationTasksConfigurator(project: Project) : KotlinCom
}
private fun resolvedMetadataProviders(fragment: KotlinGradleFragment) =
fragment.refinesClosure.map {
fragment.withRefinesClosure.map {
FragmentResolvedMetadataProvider(
fragment.project.tasks.withType<TransformKotlinGranularMetadataForFragment>().named(transformFragmentMetadataTaskName(it))
)
@@ -269,7 +269,7 @@ private fun createExtractMetadataTask(
transformation
).configure { task ->
task.dependsOn(Callable {
fragment.refinesClosure.mapNotNull { refined ->
fragment.withRefinesClosure.mapNotNull { refined ->
if (refined !== fragment)
project.tasks.named(transformFragmentMetadataTaskName(refined))
else null
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmAwareTargetConfigurator
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.metadataCompilationRegistryByModuleId
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment
internal class KpmMetadataTargetConfigurator(private val metadataTargetConfigurator: KotlinMetadataTargetConfigurator) :
KpmAwareTargetConfigurator<KotlinMetadataTarget>(metadataTargetConfigurator) {
@@ -37,7 +37,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.KotlinCompilationData
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinMetadataCompilationData
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.refinesClosure
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.withRefinesClosure
import org.jetbrains.kotlin.gradle.plugin.sources.dependsOnClosure
import org.jetbrains.kotlin.gradle.utils.propertyWithConvention
import java.io.File
@@ -71,7 +71,7 @@ abstract class KotlinCompileCommon @Inject constructor(
is AbstractKotlinFragmentMetadataCompilationData -> {
val fragment = compilation.fragment
project.files(
fragment.refinesClosure.map {
fragment.withRefinesClosure.map {
val compilation = compilation.metadataCompilationRegistry.getForFragmentOrNull(it)
?: return@map project.files()
compilation.output.classesDirs