Statifier.Interpreter.TransitionResolver (statifier v1.9.0)

View Source

Handles SCXML transition resolution and conflict resolution.

This module encapsulates the complex logic for finding enabled transitions and resolving conflicts according to SCXML specifications where child state transitions take priority over ancestor state transitions.

Key Responsibilities

  • Find enabled transitions for events and eventless (NULL) transitions
  • Evaluate transition conditions using the predicator framework
  • Resolve transition conflicts according to SCXML semantics
  • Handle event pattern matching for transition selection

SCXML Compliance

Implements W3C SCXML transition selection semantics:

  • Child state transitions override ancestor state transitions
  • Document order determines priority among equivalent transitions
  • Eventless transitions (NULL transitions) processed after event transitions
  • Condition evaluation with state chart context

Summary

Functions

Find enabled transitions for a given event.

Find eventless transitions (also called NULL transitions in SCXML spec).

Resolve transition conflicts according to SCXML semantics.

Check if a transition condition is enabled.

Functions

find_enabled_transitions(state_chart, event)

Find enabled transitions for a given event.

Returns a tuple with updated state chart (with logging) and transitions that match the event and have enabled conditions, filtered by SCXML conflict resolution rules.

Examples

{state_chart, transitions} = TransitionResolver.find_enabled_transitions(state_chart, event)

find_eventless_transitions(state_chart)

@spec find_eventless_transitions(Statifier.StateChart.t()) ::
  {Statifier.StateChart.t(), [Statifier.Transition.t()]}

Find eventless transitions (also called NULL transitions in SCXML spec).

Returns a tuple with updated state chart (with logging) and transitions without event attributes that have enabled conditions, filtered by SCXML conflict resolution rules.

Examples

{state_chart, transitions} = TransitionResolver.find_eventless_transitions(state_chart)

resolve_transition_conflicts(transitions, document)

@spec resolve_transition_conflicts([Statifier.Transition.t()], Statifier.Document.t()) ::
  [
    Statifier.Transition.t()
  ]

Resolve transition conflicts according to SCXML semantics.

Child state transitions take priority over ancestor state transitions. Returns the optimal transition set with conflicts resolved.

SCXML Specification

Per W3C SCXML specification, when multiple transitions are enabled:

  1. Child state transitions override ancestor state transitions
  2. Document order determines priority among equivalent transitions
  3. Only one transition per source state is selected

Examples

optimal_transitions = TransitionResolver.resolve_transition_conflicts(transitions, document)

transition_condition_enabled?(map, context)

@spec transition_condition_enabled?(
  Statifier.Transition.t(),
  Statifier.StateChart.t()
) :: boolean()

Check if a transition condition is enabled.

Evaluates transition conditions using the predicator framework with state chart context including current event and data model.

Examples

enabled? = TransitionResolver.transition_condition_enabled?(transition, state_chart)