diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/LazyResolvedConfiguration.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/LazyResolvedConfiguration.kt index de748b4f8cc..60023bf1e0d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/LazyResolvedConfiguration.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/LazyResolvedConfiguration.kt @@ -10,6 +10,7 @@ import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ResolveException import org.gradle.api.artifacts.result.* import org.gradle.api.file.FileCollection +import org.jetbrains.kotlin.tooling.core.withClosure /** * Represents a Gradle Configuration that was resolved after configuration time. @@ -41,12 +42,16 @@ private constructor( private val artifactsByComponentId by TransientLazy { artifacts.groupBy { it.id.componentIdentifier } } val allDependencies: List get() { - fun DependencyResult.allDependenciesRecursive(): List = - if (this is ResolvedDependencyResult) { + val visited = mutableSetOf() + fun DependencyResult.allDependenciesRecursive(): List { + if (this in visited) return emptyList() + visited += this + return if (this is ResolvedDependencyResult) { listOf(this) + selected.dependencies.flatMap { it.allDependenciesRecursive() } } else { listOf(this) } + } return root.dependencies.flatMap { it.allDependenciesRecursive() } }