Esempio n. 1
0
  @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;
  }