removeConflictingTransitions method
- @visibleForTesting
- Iterable<
Transition< enabledTransitionsT> >
Selects for the highest targets in the tree (only needed when transitions come from a parallel state).
Implementation
@visibleForTesting
Iterable<Transition<T>> removeConflictingTransitions(
Iterable<Transition<T>> enabledTransitions) {
if (enabledTransitions.length <= 1) return enabledTransitions;
// We have multiple transitions, which will happen when triggering
// an event on a parallel state.
final filteredTransitions = <Transition<T>>{};
//toList sorts the transitions in the order of the states that selected them
for (var t1 in enabledTransitions.sorted) {
var t1Preempted = false;
final transitionsToRemove = <Transition<T>>{};
for (var t2 in filteredTransitions.sorted) {
if (computeExitSet([t1])
.intersection(computeExitSet([t2]))
.isNotEmpty) {
if (t1.source!.descendsFrom(t2.source!)) {
transitionsToRemove.add(t2);
} else {
t1Preempted = true;
break;
}
}
}
if (!t1Preempted) {
filteredTransitions.removeAll(transitionsToRemove);
}
filteredTransitions.add(t1);
}
return filteredTransitions.sorted;
}