I'm evaluating BOUML for a project so I created a demo project, primarily to generate state machine source code in C++. I got it working fairly quickly, but I have a problem regarding transitions with guard constraints. Do all transitions require triggers, or does BOUML support null transitions with guard constraints and no trigger? I've used other modeling tools that generated code that reevaluated all "null" transitions (no trigger) against a guard constraint when the activity executed. When I try this myself, the generated code doesn't evaluate the guard until a trigger is evaluated. Any trigger. So my sample application did not perform the transition I expected, but when I called a trigger that should have been an illegal transition, then it evaluated the guard constraint and transitioned.
For example:
StateA -> trigA -> StateB
StateB -> guard_condition == 1 -> StateC
When in StateB with guard_condition == 0 ...
1. trigA() /* Does nothing, as expected.
2. guard_condition = 1.
3. doActivity() /* Does nothing. */
4. trigA() /* Should do nothing, but this causes the machine to evaluate guard_condition == 1, and transitions to StateC.
Are null transitions (no trigger, guard conditions) supported? If so, what am I doing wrong?