[State] Transition from a nested state to its enclosing superstate does not touch the superstate border
Describe the bug
In a hierarchical state diagram, a transition from a nested (inner) state to its enclosing superstate does not terminate on the superstate's border. The arrow ends in empty space inside the composite, at an arbitrary interior point.
UML state machines require that a transition arrow touch the border of the target state. A child → super transition should therefore land on the composite's edge (re-entry of the superstate), not float inside it.
This happens with the default Graphviz layout. The same interior landing is visible with !pragma layout smetana.
To Reproduce
@startuml
[*] --> Super
state Super {
state Nested
Nested --> Super : to super
Nested --> Other
state Other {
[*] --> Leaf
state Leaf
}
}
@endumlExpected behavior
The to super arrow should start on Nested's border and end on Super's border.
Screenshots
Exported PNG from plantuml.com:
The to super arrowhead sits in the interior of Super (to the left of Other), not on Super's frame. It gets worse when diagram gets more complicated or there are several nested to super transitions.
Workaround
Docking the transition on an unnamed <<entryPoint>> of the superstate makes the arrow terminate on a circle. With a direction hint (-left-> / -right->) and Smetana, that circle can sit on a side of the composite. That is a workaround, not a fix: a plain Nested --> Super should already hit the composite border.
Source: plantuml/plantuml