mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[rhizome] add and use a query for entity types
This fixes the following: ``` java.lang.IllegalStateException: entity does not exist for rhizomedb.EntityType at fleet.kernel.rete.QueriesKt$each$1$1.invoke(Queries.kt:114) at fleet.kernel.rete.QueriesKt$each$1$1.invoke(Queries.kt:112) at fleet.kernel.rete.QueriesKt$rawMap$2$1.invoke(Queries.kt:433) at fleet.kernel.rete.QueriesKt$rawMap$2$1.invoke(Queries.kt:432) at fleet.kernel.rete.QueriesKt.transform$lambda$1$0$0(Queries.kt:461) at fleet.kernel.rete.impl.LookupKt.lookupAttribute_bBVBO88$lambda$0$1(Lookup.kt:110) at fleet.kernel.rete.impl.ReteNetworkImplKt$subscriptionScope$1$1.collect(ReteNetworkImpl.kt:65) at fleet.kernel.rete.QueriesKt.transform$lambda$1$0(Queries.kt:461) at fleet.kernel.rete.impl.ReteNetworkImplKt$subscriptionScope$1$1.collect(ReteNetworkImpl.kt:65) at fleet.kernel.rete.impl.ReteNetworkImplKt.catching$lambda$0(ReteNetworkImpl.kt:456) at fleet.kernel.rete.impl.ReteNetworkImplKt$subscriptionScope$1$1.collect(ReteNetworkImpl.kt:65) at fleet.kernel.rete.impl.ReteNetworkImpl$queryScope$1.producer$lambda$0$0(ReteNetworkImpl.kt:280) at fleet.kernel.rete.impl.ReteNetworkImplKt$subscriptionScope$1$1.collect(ReteNetworkImpl.kt:65) at fleet.kernel.rete.impl.ReteNetworkImpl$queryScope$1.collect(ReteNetworkImpl.kt) at fleet.kernel.rete.impl.FlatMapKt.flatMap(FlatMap.kt:20) at fleet.kernel.rete.QueriesKt.flatMap$lambda$0$0(Queries.kt:183) at fleet.kernel.rete.impl.ReteNetworkImpl$queryScope$1.producer(ReteNetworkImpl.kt:290) at fleet.kernel.rete.impl.ObservableMatchKt.observable__emGRDg$lambda$0(ObservableMatch.kt:137) at fleet.kernel.rete.impl.ReteNetworkImpl.safeProducer(ReteNetworkImpl.kt:212) at fleet.kernel.rete.impl.ReteNetworkImpl$observeQuery$producer$1.invoke(ReteNetworkImpl.kt:320) at fleet.kernel.rete.impl.ReteNetworkImpl$observeQuery$producer$1.invoke(ReteNetworkImpl.kt:319) at com.jetbrains.rhizomedb.DbContextKt.asOf(DbContext.kt:135) at fleet.kernel.rete.impl.ReteNetworkImpl.observeQuery(ReteNetworkImpl.kt:319) at fleet.kernel.rete.impl.PosponedVarsKt.postponedVars$addTerminal(PosponedVars.kt:22) at fleet.kernel.rete.impl.PosponedVarsKt.access$postponedVars$addTerminal(PosponedVars.kt:1) at fleet.kernel.rete.impl.PosponedVarsKt$postponedVars$1.command(PosponedVars.kt:42) at fleet.kernel.rete.ReteKt$withRete$2$1$1$1$1$2$1$1.invokeSuspend(Rete.kt:119) at fleet.kernel.rete.ReteKt$withRete$2$1$1$1$1$2$1$1.invoke(Rete.kt) at fleet.kernel.rete.ReteKt$withRete$2$1$1$1$1$2$1$1.invoke(Rete.kt) at kotlinx.coroutines.selects.SelectImplementation$ClauseData.invokeBlock(Select.kt:846) at kotlinx.coroutines.selects.SelectImplementation.processResultAndInvokeBlockRecoveringException(Select.kt:729) at kotlinx.coroutines.selects.SelectImplementation.complete(Select.kt:722) at kotlinx.coroutines.selects.SelectImplementation.doSelectSuspend(Select.kt:456) at kotlinx.coroutines.selects.SelectImplementation.access$doSelectSuspend(Select.kt:251) at kotlinx.coroutines.selects.SelectImplementation$doSelectSuspend$1.invokeSuspend(Select.kt) ... 9 more ``` GitOrigin-RevId: ceb29353cc07d71281295a5b80a9d08da5a79d31
This commit is contained in:
committed by
intellij-monorepo-bot
parent
95a38b49ef
commit
7b685a61be
@@ -1,10 +1,8 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package fleet.kernel.rete
|
||||
|
||||
import com.jetbrains.rhizomedb.*
|
||||
import fleet.kernel.rete.impl.*
|
||||
import fleet.kernel.rete.impl.DummyQueryScope
|
||||
import fleet.kernel.rete.impl.distinct
|
||||
import fleet.util.async.firstNotNull
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.first
|
||||
@@ -116,6 +114,19 @@ fun <E : Entity> EntityType<E>.each(): SetQuery<E> = let { entityType ->
|
||||
.intern("each", entityType)
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a match for every [EntityType].
|
||||
*/
|
||||
fun EntityType.Companion.each(): SetQuery<EntityType<*>> = let { entityType ->
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
queryOf(entityType.eid)
|
||||
.lookupAttribute(Entity.Type.attr as Attribute<EID>)
|
||||
.mapNotNull { // entity type might not yet be registered
|
||||
entity(it) as EntityType<*>?
|
||||
}
|
||||
.intern("eachEntityType", entityType)
|
||||
}
|
||||
|
||||
/**
|
||||
* Query<Maybe, Unit> can be seen as predicate.
|
||||
* It yields Unit when it becomes true, and retracts it back when falsified.
|
||||
|
||||
Reference in New Issue
Block a user