fun getCommonAncestor()

in dnq/src/main/kotlin/kotlinx/dnq/XdModel.kt [195:208]


    fun <T : XdEntity> getCommonAncestor(typeA: XdEntityType<T>, typeB: XdEntityType<T>): XdEntityType<T>? {
        if (typeA == typeB) return typeA

        val nodeA = getOrThrow(typeA.entityType)
        val nodeB = getOrThrow(typeB.entityType)

        val parentsA = generateSequence(nodeA) { it.parentNode }.toSet()
        generateSequence(nodeB) { it.parentNode }.forEach { node ->
            @Suppress("UNCHECKED_CAST")
            if (node in parentsA) return node.entityType as XdEntityType<T>
        }

        return null
    }