SDI/src/commonMain/kotlin/dev/inmo/sdi/utils/TypesHelper.kt
2021-02-19 19:30:22 +06:00

24 lines
717 B
Kotlin

package dev.inmo.sdi.utils
import kotlin.reflect.KClass
import kotlin.reflect.KType
internal expect fun resolveKClassByPackageName(packageName: String): KClass<*>
internal expect val <T : Any> KClass<T>.supertypes: List<KType>
internal val KClass<*>.superclasses: Set<KClass<*>>
get() {
val subclasses = mutableSetOf<KClass<*>>()
val leftToVisit = supertypes.mapNotNull { it.classifier as? KClass<*> }.toMutableList()
while (leftToVisit.isNotEmpty()) {
val top = leftToVisit.removeAt(0)
if (subclasses.add(top)) {
leftToVisit.addAll(
top.superclasses
)
}
}
return subclasses
}