From ef3a3d71b9c6c3807ca6d0b96025e7bae2272dbc Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Tue, 15 Mar 2022 14:51:50 +0100 Subject: [PATCH] [KPM] Remove duplicate KotlinGradleFragmentInternal.refinesClosure KT-51386 --- .../plugin/mpp/KotlinProjectStructureMetadata.kt | 1 - .../pm20/FragmentGranularMetadataResolverFactory.kt | 2 +- .../gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt | 10 ++++------ .../plugin/mpp/pm20/KotlinGradleFragmentInternal.kt | 5 ----- .../gradle/plugin/mpp/pm20/KotlinGradleModule.kt | 5 ++++- .../plugin/mpp/pm20/KotlinMetadataCompilationData.kt | 6 +++--- .../pm20/TransformKotlinGranularMetadataForFragment.kt | 4 ++-- .../plugin/mpp/pm20/fragmentsMetadataCompilation.kt | 4 ++-- .../targets/metadata/KpmMetadataTargetConfigurator.kt | 1 + .../kotlin/gradle/tasks/KotlinCompileCommon.kt | 4 ++-- 10 files changed, 19 insertions(+), 23 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinProjectStructureMetadata.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinProjectStructureMetadata.kt index 26b9bd8b54f..908b03ccd34 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinProjectStructureMetadata.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinProjectStructureMetadata.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentGranularMetadataResolverFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentGranularMetadataResolverFactory.kt index 0e7cda76f6e..9b8adc06642 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentGranularMetadataResolverFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentGranularMetadataResolverFactory.kt @@ -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) } }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt index 11aea78c6f6..79012906e89 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/FragmentSourcesProvider.kt @@ -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 @@ -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) } } -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentInternal.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentInternal.kt index fc560002896..591a0fe5e3a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentInternal.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentInternal.kt @@ -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 - get() = (this as KotlinModuleFragment).withRefinesClosure.map { it as KotlinGradleFragment }.toSet() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleModule.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleModule.kt index 713b8d08e22..8e9954c5d12 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleModule.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleModule.kt @@ -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 = - variants.filter { fragment in it.refinesClosure } \ No newline at end of file + (this as KotlinModule).variantsContainingFragment(fragment).onEach { it as KotlinGradleVariant } as Iterable diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt index f66c140e62a..70d1ca23612 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt @@ -62,7 +62,7 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData 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 internal fun KotlinGradleFragment.isNativeShared(): Boolean = - containingModule.variantsContainingFragment(this).run { + containingVariants.run { any() && all { it.platformType == KotlinPlatformType.native } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/TransformKotlinGranularMetadataForFragment.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/TransformKotlinGranularMetadataForFragment.kt index e292075a7b9..fb65cebf4fc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/TransformKotlinGranularMetadataForFragment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/TransformKotlinGranularMetadataForFragment.kt @@ -41,7 +41,7 @@ internal open class TransformKotlinGranularMetadataForFragment @Suppress("unused") // Gradle input @get:Input internal val inputFragmentsAndVariants: Map> 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>> 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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt index ae109900294..d6a74c81ffe 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt @@ -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().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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KpmMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KpmMetadataTargetConfigurator.kt index 0ef8843fa30..cbb1313a318 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KpmMetadataTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KpmMetadataTargetConfigurator.kt @@ -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(metadataTargetConfigurator) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt index b9084e1992f..854f6a8790d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt @@ -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