According to UML standard one can exit a parallel state using a transition from only a single orthogonal region, see transition "fail" in figure 14.9 in https://www.omg.org/spec/UML/2.5/PDF#page=362
Such transitions can also be found in the PSSM test cases, so it is not something esoteric.
When trying something like this in PlantUML I surprisingly get the following error:
The state XXX has been created in a concurrent state : it cannot be used here.
or
State within concurrent state cannot be linked out of this concurrent state (between CapsLockOn and Error)
Here a full example that fails, but accoring do UML standard it should indeed work:
@startuml
[*] --> Off
state Off {
}
state On {
[*] -> NumLockOff
NumLockOff --> NumLockOn : EvNumLockPressed
NumLockOn --> NumLockOff : EvNumLockPressed
--
[*] -> CapsLockOff
CapsLockOff --> CapsLockOn : EvCapsLockPressed
CapsLockOn --> CapsLockOff : EvCapsLockPressed
--
[*] -> ScrollLockOff
ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}
state Error {
}
Off -> On : Go
CapsLockOn -> Error : Fail
@enduml
Also this fails:
@startuml
[*] --> Off
state Off {
}
state On {
[*] -> NumLockOff
NumLockOff --> NumLockOn : EvNumLockPressed
NumLockOn --> NumLockOff : EvNumLockPressed
--
[*] -> CapsLockOff
CapsLockOff --> CapsLockOn : EvCapsLockPressed
CapsLockOn --> CapsLockOff : EvCapsLockPressed
CapsLockOn --> Error : Fail
--
[*] -> ScrollLockOff
ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}
state Error {
}
Off -> On : Go
@enduml
Would it be possible to fix this in order to align with the UML standard?
Many thanks in advance.
J.