public StateMachine ToMachineModel() { var machine = new StateMachine(Name); var vertexLookup = new VertexLookup(); // First pass : state declarations foreach (var component in Components) { switch (component) { case StateDefinition stateDef: machine.AddChild(CreateState(machine, stateDef, vertexLookup)); break; default: // Ignore everything else in this pass break; } } // Second pass : internal and external transitions foreach (var component in Components) { switch (component) { case StateDefinition stateDef: HandleStateComponents(stateDef, vertexLookup); break; default: // Ignore everything else in this pass break; } } return(machine); }