diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt index 77710d82a08..2f8adc682d6 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt @@ -46,7 +46,6 @@ import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.types.TypeApproximatorConfiguration import org.jetbrains.kotlin.types.model.CaptureStatus -import org.jetbrains.kotlin.util.bfs internal class KtFirTypeProvider( override val analysisSession: KtFirAnalysisSession, @@ -177,7 +176,14 @@ internal class KtFirTypeProvider( override fun getAllSuperTypes(type: KtType, shouldApproximate: Boolean): List { require(type is KtFirType) - return listOf(type.coneType).bfs { it.getDirectSuperTypes(shouldApproximate).iterator() }.mapTo(mutableListOf()) { it.asKtType() } + val queue = type.coneType.getDirectSuperTypes(shouldApproximate).toCollection(ArrayDeque()) + return buildSet { + while (queue.isNotEmpty()) { + val current = queue.removeFirst() + if (!add(current)) continue + queue.addAll(current.getDirectSuperTypes(shouldApproximate)) + } + }.map { it.asKtType() } } } diff --git a/core/compiler.common/src/org/jetbrains/kotlin/util/containerUtils.kt b/core/compiler.common/src/org/jetbrains/kotlin/util/containerUtils.kt deleted file mode 100644 index fc48124ed12..00000000000 --- a/core/compiler.common/src/org/jetbrains/kotlin/util/containerUtils.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.util - -/** - * Perform BFS on the given collection with neighbors created by the given function. - */ -fun Collection.bfs(getNeighbors: (T) -> Iterator): Sequence { - val queue = ArrayDeque(this) - val visited = mutableSetOf() - return sequence { - while (queue.isNotEmpty()) { - val current = queue.removeFirst() - if (current in visited) continue - visited.add(current) - yield(current) - getNeighbors(current).forEach(queue::add) - } - } -}