From c3fe4e7fb26c5771430cb17b7e116f8c7edc13e8 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 20 Dec 2021 22:13:44 +0400 Subject: [PATCH] KPM/Gradle: disable metadata compilations for JVM & JS shared fragments --- .../plugin/mpp/ProjectMetadataProviderImpl.kt | 3 ++- .../kotlin/gradle/plugin/mpp/kotlinTargets.kt | 5 +++- .../mpp/pm20/KotlinMetadataCompilationData.kt | 26 ++++++++++++++----- .../kpm/FragmentMappedKotlinSourceSet.kt | 1 - .../gradle/tasks/KotlinCompileCommon.kt | 4 ++- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ProjectMetadataProviderImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ProjectMetadataProviderImpl.kt index 1f3725aafe2..55461429da9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ProjectMetadataProviderImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ProjectMetadataProviderImpl.kt @@ -35,7 +35,8 @@ private class ProjectMetadataProviderImpl( val moduleId = moduleIdentifier val module = dependencyProject.kpmModules.single { it.moduleIdentifier == moduleId } val metadataCompilationRegistry = dependencyProject.metadataCompilationRegistryByModuleId.getValue(moduleId) - metadataCompilationRegistry.byFragment(module.fragments.getByName(sourceSetName)).output.classesDirs + metadataCompilationRegistry.getForFragmentOrNull(module.fragments.getByName(sourceSetName))?.output?.classesDirs + ?: dependencyProject.files() } projectExtension is KotlinMultiplatformExtension -> projectExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME).compilations diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt index 6baab360e7c..0acf355f71f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt @@ -29,6 +29,7 @@ import org.gradle.util.WrapUtil import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatCompilationResolverPlugin @@ -92,7 +93,9 @@ abstract class AbstractKotlinTarget( } override val components: Set by lazy { - buildAdhocComponentsFromKotlinVariants(kotlinComponents) + if (!project.hasKpmModel) { + buildAdhocComponentsFromKotlinVariants(kotlinComponents) + } else emptySet() } private fun buildAdhocComponentsFromKotlinVariants(kotlinVariants: Set): Set { 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 62f9d191ef7..a347bf23176 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 @@ -60,7 +60,13 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData internal fun KotlinGradleFragment.isNativeShared(): Boolean = - containingModule.variantsContainingFragment(this).all { it.platformType == KotlinPlatformType.native } + containingModule.variantsContainingFragment(this).run { + any() && all { it.platformType == KotlinPlatformType.native } + } internal fun KotlinGradleFragment.isNativeHostSpecific(): Boolean = this in getHostSpecificFragments(containingModule) @@ -186,8 +200,8 @@ internal class MetadataCompilationRegistry { withAllNativeCallbacks.forEach { it.invoke(compilationData) } } - fun byFragment(fragment: KotlinGradleFragment): KotlinMetadataCompilationData<*> = - listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).single { + fun getForFragmentOrNull(fragment: KotlinGradleFragment): KotlinMetadataCompilationData<*>? = + listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).singleOrNull { it.isActive } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/kpm/FragmentMappedKotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/kpm/FragmentMappedKotlinSourceSet.kt index c5b128df23f..f8b857ff2f4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/kpm/FragmentMappedKotlinSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/kpm/FragmentMappedKotlinSourceSet.kt @@ -44,7 +44,6 @@ class FragmentMappedKotlinSourceSet( override val languageSettings: LanguageSettingsBuilder = underlyingFragment.languageSettings - // FIXME: not supported yet override val resources: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name resources") override fun kotlin(configureClosure: Closure): SourceDirectorySet = 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 03c483bdbc3..056a586991b 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 @@ -73,7 +73,9 @@ abstract class KotlinCompileCommon @Inject constructor( val fragment = compilation.fragment project.files( fragment.refinesClosure.minus(fragment).map { - compilation.metadataCompilationRegistry.byFragment(it).output.classesDirs + val compilation = compilation.metadataCompilationRegistry.getForFragmentOrNull(it) + ?: return@map project.files() + compilation.output.classesDirs } ) }