Fix legacy code from diagram monitor loading that can cause unnecessary AssertionErrors
Dump from a user's workspace log:
!ENTRY org.simantics.utils.ui 4 0 2024-03-07 12:32:27.660
!MESSAGE java.lang.AssertionError
!STACK 0
org.simantics.db.exception.DatabaseException: java.lang.AssertionError
at org.simantics.db.impl.query.ReadEntry.computeForEach(ReadEntry.java:133)
at org.simantics.db.impl.query.QueryCache.runnerReadEntry(QueryCache.java:697)
at org.simantics.db.impl.graph.ReadGraphImpl.syncRequest(ReadGraphImpl.java:1961)
at org.simantics.modeling.ui.diagram.monitor.MonitorClassFactory2.load(MonitorClassFactory2.java:167)
at org.simantics.diagram.adapter.SyncElementFactory$2.perform(SyncElementFactory.java:52)
at org.simantics.diagram.adapter.SyncElementFactory$2.perform(SyncElementFactory.java:1)
at org.simantics.db.impl.query.ReadEntry.computeForEach(ReadEntry.java:121)
at org.simantics.db.impl.query.QueryCache.runnerReadEntry(QueryCache.java:697)
at org.simantics.db.impl.graph.ReadGraphImpl$24.run0(ReadGraphImpl.java:5190)
at org.simantics.db.impl.query.QueryProcessor$SessionTask.run(QueryProcessor.java:233)
at org.simantics.db.impl.query.QueryProcessor.performPending(QueryProcessor.java:177)
at org.simantics.db.impl.graph.ReadGraphImpl.performPending(ReadGraphImpl.java:6462)
at org.simantics.db.impl.graph.AsyncBarrierImpl.waitBarrier(AsyncBarrierImpl.java:181)
at org.simantics.db.impl.BlockingAsyncProcedure.get(BlockingAsyncProcedure.java:87)
at org.simantics.db.impl.BlockingAsyncProcedure.performSync(BlockingAsyncProcedure.java:170)
at org.simantics.db.impl.query.AsyncReadEntry.computeForEach(AsyncReadEntry.java:165)
at org.simantics.db.impl.query.QueryCache.runnerAsyncReadEntry(QueryCache.java:777)
at org.simantics.db.impl.graph.ReadGraphImpl.syncRequest(ReadGraphImpl.java:2062)
at org.simantics.db.impl.graph.ReadGraphImpl.syncRequest(ReadGraphImpl.java:2042)
at org.simantics.db.impl.graph.ReadGraphImpl.syncRequest(ReadGraphImpl.java:2054)
at org.simantics.diagram.adapter.GraphToDiagramSynchronizer$GraphToDiagramUpdater$4.run(GraphToDiagramSynchronizer.java:1897)
at org.simantics.db.common.request.ReadRequest.perform(ReadRequest.java:21)
at org.simantics.db.impl.query.ReadEntry.computeForEach(ReadEntry.java:121)
at org.simantics.db.impl.query.QueryCache.runnerReadEntry(QueryCache.java:669)
at org.simantics.db.impl.graph.ReadGraphImpl$24.run0(ReadGraphImpl.java:5190)
at org.simantics.db.impl.query.QueryProcessor$SessionTask.run(QueryProcessor.java:233)
at org.simantics.db.impl.query.QueryProcessor.performPending(QueryProcessor.java:177)
at org.simantics.db.impl.graph.ReadGraphImpl.performPending(ReadGraphImpl.java:6462)
at org.simantics.db.impl.graph.AsyncBarrierImpl.waitBarrier(AsyncBarrierImpl.java:181)
at org.simantics.db.impl.BlockingAsyncProcedure.get(BlockingAsyncProcedure.java:87)
at org.simantics.db.impl.BlockingAsyncProcedure.performSync(BlockingAsyncProcedure.java:170)
at org.simantics.db.impl.query.AsyncReadEntry.computeForEach(AsyncReadEntry.java:165)
at org.simantics.db.impl.query.QueryCache.runnerAsyncReadEntry(QueryCache.java:760)
at org.simantics.db.impl.graph.ReadGraphImpl.syncRequest(ReadGraphImpl.java:2062)
at org.simantics.db.impl.graph.ReadGraphImpl.syncRequest(ReadGraphImpl.java:2035)
at org.simantics.diagram.adapter.GraphToDiagramSynchronizer$GraphToDiagramUpdater.process(GraphToDiagramSynchronizer.java:2405)
at org.simantics.diagram.adapter.GraphToDiagramSynchronizer$8.graphUpdate(GraphToDiagramSynchronizer.java:2830)
at org.simantics.diagram.adapter.GraphToDiagramSynchronizer.processGraphUpdates(GraphToDiagramSynchronizer.java:3477)
at org.simantics.diagram.adapter.GraphToDiagramSynchronizer.loadDiagram(GraphToDiagramSynchronizer.java:1332)
at org.simantics.diagram.query.DiagramLoadQuery.perform(DiagramLoadQuery.java:52)
at org.simantics.diagram.query.DiagramLoadQuery.perform(DiagramLoadQuery.java:1)
at org.simantics.modeling.ui.diagramEditor.DiagramViewer.lambda$2(DiagramViewer.java:657)
at fi.vtt.simantics.procore.internal.SessionImplSocket$6.run0(SessionImplSocket.java:1522)
at org.simantics.db.impl.query.QueryProcessor$SessionTask.run(QueryProcessor.java:233)
at fi.vtt.simantics.procore.internal.SessionRequestManager$1.run0(SessionRequestManager.java:127)
at org.simantics.db.impl.query.QueryProcessor$SessionTask.run(QueryProcessor.java:233)
at org.simantics.db.impl.query.QueryThread.run(QueryThread.java:238)
Caused by: java.lang.AssertionError
at org.simantics.db.impl.graph.ReadGraphImpl.getPossibleURI(ReadGraphImpl.java:266)
at org.simantics.modeling.ui.diagram.monitor.ResolveMonitorVariable.perform(ResolveMonitorVariable.java:70)
at org.simantics.modeling.ui.diagram.monitor.ResolveMonitorVariable.perform(ResolveMonitorVariable.java:1)
at org.simantics.db.impl.query.ReadEntry.computeForEach(ReadEntry.java:121)
... 46 more
and
org.simantics.db.exception.DatabaseException: java.lang.AssertionError
at org.simantics.db.impl.query.ReadEntry.computeForEach(ReadEntry.java:133)
at org.simantics.db.impl.query.QueryCache.runnerReadEntry(QueryCache.java:697)
at org.simantics.db.impl.graph.ReadGraphImpl.syncRequest(ReadGraphImpl.java:1961)
at org.simantics.modeling.ui.diagram.monitor.MonitorClassFactory2.load(MonitorClassFactory2.java:167)
at org.simantics.diagram.adapter.SyncElementFactory$2.perform(SyncElementFactory.java:52)
at org.simantics.diagram.adapter.SyncElementFactory$2.perform(SyncElementFactory.java:1)
at org.simantics.db.impl.query.ReadEntry.computeForEach(ReadEntry.java:121)
at org.simantics.db.impl.query.QueryCache.runnerReadEntry(QueryCache.java:697)
at org.simantics.db.impl.graph.ReadGraphImpl$24.run0(ReadGraphImpl.java:5190)
at org.simantics.db.impl.query.QueryProcessor$SessionTask.run(QueryProcessor.java:233)
at org.simantics.db.impl.query.QueryProcessor.performPending(QueryProcessor.java:177)
at org.simantics.db.impl.graph.ReadGraphImpl.performPending(ReadGraphImpl.java:6462)
at org.simantics.db.impl.graph.AsyncBarrierImpl.waitBarrier(AsyncBarrierImpl.java:181)
at org.simantics.db.impl.BlockingAsyncProcedure.get(BlockingAsyncProcedure.java:87)
at org.simantics.db.impl.BlockingAsyncProcedure.performSync(BlockingAsyncProcedure.java:170)
at org.simantics.db.impl.query.AsyncReadEntry$1.recompute(AsyncReadEntry.java:96)
at org.simantics.db.impl.query.QueryProcessor.compareTo(QueryProcessor.java:1372)
at org.simantics.db.impl.query.QueryListening.fireListeners_(QueryListening.java:268)
at org.simantics.db.impl.query.QueryListening.fireListeners(QueryListening.java:227)
at fi.vtt.simantics.procore.internal.State.commitWriteTransaction(State.java:344)
at fi.vtt.simantics.procore.internal.SessionRequestManager$4.run0(SessionRequestManager.java:236)
at org.simantics.db.impl.query.QueryProcessor$SessionTask.run(QueryProcessor.java:233)
at org.simantics.db.impl.query.QueryThread.run(QueryThread.java:238)
Caused by: java.lang.AssertionError
at org.simantics.db.impl.graph.ReadGraphImpl.getPossibleURI(ReadGraphImpl.java:266)
at org.simantics.modeling.ui.diagram.monitor.ResolveMonitorVariable.perform(ResolveMonitorVariable.java:70)
at org.simantics.modeling.ui.diagram.monitor.ResolveMonitorVariable.perform(ResolveMonitorVariable.java:1)
at org.simantics.db.impl.query.ReadEntry.computeForEach(ReadEntry.java:121)
... 22 more
The Variable processing code here it very dated and can easily be made both safer and simpler.
Edited by Tuukka Lehtonen