Trying to make a connection deemed CANBEMADELEGAL by IModelingRules results in NPE
ERROR [2024-03-04 08:28:09,766] org.simantics.utils.ui.ErrorLogger: java.lang.NullPointerException: Cannot invoke "org.simantics.structural2.modelingRules.IAttachmentRelationMap.get(org.simantics.db.ReadGraph, org.simantics.structural2.modelingRules.CPTerminal)" because "judgment.attachmentRelations" is null
Cannot invoke "org.simantics.structural2.modelingRules.IAttachmentRelationMap.get(org.simantics.db.ReadGraph, org.simantics.structural2.modelingRules.CPTerminal)" because "judgment.attachmentRelations" is null
java.lang.NullPointerException: Cannot invoke "org.simantics.structural2.modelingRules.IAttachmentRelationMap.get(org.simantics.db.ReadGraph, org.simantics.structural2.modelingRules.CPTerminal)" because "judgment.attachmentRelations" is null
at org.simantics.diagram.participant.ConnectionBuilder.chooseAttachmentRelationForNode(ConnectionBuilder.java:785)
at org.simantics.diagram.participant.ConnectionBuilder.chooseAttachmentRelationForNode(ConnectionBuilder.java:766)
at org.simantics.diagram.participant.ConnectionBuilder.create(ConnectionBuilder.java:325)
at org.simantics.diagram.participant.ConnectTool2$3.perform(ConnectTool2.java:1005)
at fi.vtt.simantics.procore.internal.SessionImplSocket$1.run0(SessionImplSocket.java:468)
at org.simantics.db.impl.query.QueryProcessor$SessionTask.run(QueryProcessor.java:230)
at fi.vtt.simantics.procore.internal.SessionRequestManager$3.run0(SessionRequestManager.java:187)
... 2 common frames omitted
Wrapped by: org.simantics.db.exception.DatabaseException: java.lang.NullPointerException: Cannot invoke "org.simantics.structural2.modelingRules.IAttachmentRelationMap.get(org.simantics.db.ReadGraph, org.simantics.structural2.modelingRules.CPTerminal)" because "judgment.attachmentRelations" is null
at fi.vtt.simantics.procore.internal.WriteStateBase.finish(WriteStateBase.java:67)
at fi.vtt.simantics.procore.internal.WriteState.finish(WriteState.java:27)
at fi.vtt.simantics.procore.internal.SessionRequestManager$4.run0(SessionRequestManager.java:261)
at org.simantics.db.impl.query.QueryProcessor$SessionTask.run(QueryProcessor.java:230)
at org.simantics.db.impl.query.QueryThread.run(QueryThread.java:155)
The CANBEMADELEGAL
ConnectionJudgement
which has attachmentRelations == null
comes from here:
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 1116 in org.simantics.diagram.participant.ConnectTool2))
org.simantics.diagram.participant.ConnectTool2.canConnect(org.simantics.g2d.element.IElement, org.simantics.g2d.diagram.handler.Topology.Terminal) line: 1116
org.simantics.diagram.participant.ConnectTool2.processMouseMove(org.simantics.scenegraph.g2d.events.MouseEvent$MouseMovedEvent) line: 553
org.simantics.diagram.participant.ConnectTool2.handleEvent(org.simantics.scenegraph.g2d.events.MouseEvent) line: 519
jdk.internal.reflect.GeneratedMethodAccessor206.invoke(java.lang.Object, java.lang.Object[]) line: not available
jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 568
org.simantics.scenegraph.g2d.events.EventHandlerReflection$1.handleEvent(org.simantics.scenegraph.g2d.events.Event) line: 101
org.simantics.scenegraph.g2d.events.EventHandlerReflection$EventHandlerDefinition$1.handleEvent(org.simantics.scenegraph.g2d.events.Event) line: 144
org.simantics.scenegraph.g2d.events.EventHandlerStack.handleEvent(org.simantics.scenegraph.g2d.events.Event) line: 67
org.simantics.scenegraph.g2d.events.EventQueue.handleEvents() line: 110
org.simantics.g2d.canvas.impl.CanvasContext$1.run() line: 136
java.awt.event.InvocationEvent.dispatch() line: 318
java.awt.EventQueue.dispatchEventImpl(java.awt.AWTEvent, java.lang.Object) line: 771
java.awt.EventQueue$4.run() line: 722
java.awt.EventQueue$4.run() line: 716
java.security.AccessController.executePrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext, java.lang.Class<?>) line: 776
java.security.AccessController.doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext) line: 399
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.security.PrivilegedAction<T>, java.security.AccessControlContext, java.security.AccessControlContext) line: 86
java.awt.EventQueue.dispatchEvent(java.awt.AWTEvent) line: 741
java.awt.EventDispatchThread.pumpOneEventForFilters(int) line: 203
java.awt.EventDispatchThread.pumpEventsForFilter(int, java.awt.Conditional, java.awt.EventFilter) line: 124
java.awt.EventDispatchThread.pumpEventsForHierarchy(int, java.awt.Conditional, java.awt.Component) line: 113
java.awt.EventDispatchThread.pumpEvents(int, java.awt.Conditional) line: 109
java.awt.EventDispatchThread.pumpEvents(java.awt.Conditional) line: 101
java.awt.EventDispatchThread.run() line: 90
Edited by Tuukka Lehtonen