Minor, move lazyClosure out of TypeUtils.kt

This commit is contained in:
Alexander Udalov
2019-08-09 16:07:17 +02:00
parent cb8f70189d
commit c007f3efb3
3 changed files with 28 additions and 29 deletions
@@ -144,27 +144,6 @@ fun <T> Collection<T>.closure(preserveOrder: Boolean = false, f: (T) -> Collecti
return result
}
fun <T> Collection<T>.lazyClosure(f: (T) -> Collection<T>): Sequence<T> = sequence {
if (size == 0) return@sequence
var sizeBeforeIteration = 0
yieldAll(this@lazyClosure)
var yieldedCount = size
var elementsToCheck = this@lazyClosure
while (yieldedCount > sizeBeforeIteration) {
val toAdd = hashSetOf<T>()
elementsToCheck.forEach {
val neighbours = f(it)
yieldAll(neighbours)
yieldedCount += neighbours.size
toAdd.addAll(neighbours)
}
elementsToCheck = toAdd
sizeBeforeIteration = yieldedCount
}
}
fun boundClosure(types: Collection<KotlinType>): Collection<KotlinType> =
types.closure { type -> TypeUtils.getTypeParameterDescriptorOrNull(type)?.upperBounds ?: emptySet() }