From a83bdc977263988dd0b643a5c699062a288850e5 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Sat, 7 Jan 2023 16:51:58 +0100 Subject: [PATCH] [Gradle] Don't consume old MPP dependencies with external metadata artifact Old KGP versions published metadata artifact in separate maven module. Current KGP should no longer support such dependencies. --- .../mpp/GranularMetadataTransformation.kt | 25 ++++++++----------- .../plugin/mpp/SourceSetVisibilityProvider.kt | 5 ++-- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt index 2e935c46953..e3eaadef9f6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt @@ -95,13 +95,6 @@ internal class GranularMetadataTransformation( ) { val metadataDependencyResolutions: Iterable by lazy { doTransform() } - // Keep parents of each dependency, too. We need a dependency's parent when it's an MPP's metadata module dependency: - // in this case, the parent is the MPP's root module. - private data class ResolvedDependencyWithParent( - val dependency: ResolvedComponentResult, - val parent: ResolvedComponentResult? - ) - private val requestedDependencies: Iterable by lazy { kotlinSourceSet.internal.resolvableMetadataConfiguration.incoming.dependencies } @@ -122,7 +115,7 @@ internal class GranularMetadataTransformation( val allModuleDependencies = configurationToResolve.incoming.resolutionResult.allDependencies.filterIsInstance() - val resolvedDependencyQueue: Queue = ArrayDeque().apply { + val resolvedDependencyQueue: Queue = ArrayDeque().apply { val requestedModules: Set = allRequestedDependencies.mapTo(mutableSetOf()) { ModuleIds.fromDependency(it) } @@ -131,14 +124,14 @@ internal class GranularMetadataTransformation( resolutionResult.root.dependencies .filter { ModuleIds.fromComponentSelector(project, it.requested) in requestedModules } .filterIsInstance() - .map { ResolvedDependencyWithParent(it.selected, null) } + .map { it.selected } ) } val visitedDependencies = mutableSetOf() while (resolvedDependencyQueue.isNotEmpty()) { - val (resolvedDependency: ResolvedComponentResult, parent: ResolvedComponentResult?) = resolvedDependencyQueue.poll() + val resolvedDependency: ResolvedComponentResult = resolvedDependencyQueue.poll() if (!visitedDependencies.add(resolvedDependency)) { /* Already processed this dependency */ @@ -147,8 +140,7 @@ internal class GranularMetadataTransformation( val dependencyResult = processDependency( resolvedDependency, - parentResolutions[ModuleIds.fromComponent(project, resolvedDependency)].orEmpty(), - parent + parentResolutions[ModuleIds.fromComponent(project, resolvedDependency)].orEmpty() ) result.add(dependencyResult) @@ -164,7 +156,7 @@ internal class GranularMetadataTransformation( resolvedDependencyQueue.addAll( transitiveDependenciesToVisit.filter { it.selected !in visitedDependencies } - .map { ResolvedDependencyWithParent(it.selected, resolvedDependency) } + .map { it.selected } ) } @@ -199,7 +191,6 @@ internal class GranularMetadataTransformation( private fun processDependency( module: ResolvedComponentResult, parentResolutionsForModule: Iterable, - parent: ResolvedComponentResult? ): MetadataDependencyResolution { val mppDependencyMetadataExtractor = MppDependencyProjectStructureMetadataExtractor.create( project, module, configurationToResolve, @@ -211,10 +202,14 @@ internal class GranularMetadataTransformation( val projectStructureMetadata = mppDependencyMetadataExtractor?.getProjectStructureMetadata() ?: return MetadataDependencyResolution.KeepOriginalDependency(module) + if (!projectStructureMetadata.isPublishedAsRoot) { + error("Artifacts of dependency ${module.id.displayName} is built by old Kotlin Gradle Plugin and can't be consumed in this way") + } + val sourceSetVisibility = SourceSetVisibilityProvider(project).getVisibleSourceSets( kotlinSourceSet, - if (projectStructureMetadata.isPublishedAsRoot) module else parent, module, + module, projectStructureMetadata, resolvedToProject != null ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt index c7121035c35..d27496ff9cd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt @@ -49,14 +49,13 @@ internal class SourceSetVisibilityProvider( */ fun getVisibleSourceSets( visibleFrom: KotlinSourceSet, - resolvedRootMppDependency: ResolvedComponentResult?, - resolvedMetadataDependency: ResolvedComponentResult, + resolvedRootMppDependency: ResolvedComponentResult, dependencyProjectStructureMetadata: KotlinProjectStructureMetadata, resolvedToOtherProject: Boolean ): SourceSetVisibilityResult { val compilations = visibleFrom.internal.compilations - val component = resolvedRootMppDependency ?: resolvedMetadataDependency + val component = resolvedRootMppDependency val mppModuleIdentifier = component.toSingleKpmModuleIdentifier() val firstConfigurationByVariant = mutableMapOf()