@Override protected Boolean visitFTransition(FTransition transition) { final Set<FState> sources = statesStack.pop(); final Set<FState> targets = new HashSet<FState>(); final FGuard originalGuard = (FGuard) transition.getGuard(); final Integer size = this.getPolymorphicSize(transition); int suffix = 0; for (final FState source : sources) { if (transition.isPolymorphic()) { for (int i = 0; i < size; i++) { final FTransition newTransition = transition.getUnconnectedCopy(); newTransition.setSource(source); newTransition.setGuardEvaluator(getEvaluator(originalGuard, source)); final FState target = new FState(transition.getTarget().getName() + suffix++); newTransition.setTarget(target); targets.add(target); } } else { final FTransition newTransition = transition.getUnconnectedCopy(); newTransition.setGuardEvaluator(getEvaluator(originalGuard, source)); newTransition.setSource(source); if (transition.isSelfLoop()) { newTransition.setTarget(source); } else { final FState target = new FState(transition.getTarget().getName() + suffix++); newTransition.setTarget(target); targets.add(target); } } } statesStack.push(sources); statesStack.push(targets); return true; }