From 8b595cd804390c88e5b326d1ba9579e3e4b11949 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Wed, 8 Jun 2022 16:08:44 +0200 Subject: [PATCH] [Gradle][MPP] GranularMetadataTransformation: Avoid re-processing dependencies Do not process any dependency that was already processed previously. When filling up the 'resolvedDependencyQueue' there is already one filter present, checking that the resolved dependency was not already visited. However, this filter is insufficient, since the queue is just an ArrayDeque and not a set. It happened that many dependencies were enqueued multiple, multiple times. --- .../gradle/plugin/mpp/GranularMetadataTransformation.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 d32ce21f7ed..5c839f24b7a 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 @@ -162,7 +162,10 @@ internal class GranularMetadataTransformation( while (resolvedDependencyQueue.isNotEmpty()) { val (resolvedDependency: ResolvedComponentResult, parent: ResolvedComponentResult?) = resolvedDependencyQueue.poll() - visitedDependencies.add(resolvedDependency) + if (!visitedDependencies.add(resolvedDependency)) { + /* Already processed this dependency */ + continue + } val dependencyResult = processDependency( resolvedDependency,