FIR: add bfs helper and use it

It's also used in Kotlin quickfixes in intellij repo
This commit is contained in:
Tianyu Geng
2021-10-25 11:48:01 -07:00
committed by Ilya Kirillov
parent 64a0d492b9
commit dbb0496d23
2 changed files with 25 additions and 8 deletions
@@ -46,6 +46,7 @@ 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,
@@ -176,14 +177,7 @@ internal class KtFirTypeProvider(
override fun getAllSuperTypes(type: KtType, shouldApproximate: Boolean): List<KtType> {
require(type is KtFirType)
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() }
return listOf(type.coneType).bfs { it.getDirectSuperTypes(shouldApproximate).iterator() }.mapTo(mutableListOf()) { it.asKtType() }
}
}