override fun getListener()

in dnq/src/main/kotlin/kotlinx/dnq/listener/ClassBasedXdListenersSerialization.kt [38:49]


    override fun getListener(invocation: ListenerInvocation, changesMultiplexer: TransientChangesMultiplexer, session: TransientStoreSession): IEntityListener<*>? {
        val typeId = invocation.entityId.typeId
        val entityType = session.store.persistentStore.getEntityType(typeId)
        var typeHierarchy: XdHierarchyNode? = XdModel[entityType]
                ?: throw IllegalStateException("Can't find XdEntityType for $entityType")
        var listener: IEntityListener<*>? = null
        while (typeHierarchy != null && listener == null) {
            listener = changesMultiplexer.findListener(typeHierarchy, invocation.listenerKey)
            typeHierarchy = typeHierarchy.parentNode
        }
        return listener
    }