@Check(CheckType.FAST)
  public void checkUnusedExit(final Exit exit) {
    if (exit.getParentRegion().getComposite() instanceof org.yakindu.sct.model.sgraph.State
        && exit.getOutgoingTransitions().isEmpty()) {
      org.yakindu.sct.model.sgraph.State state =
          (org.yakindu.sct.model.sgraph.State) exit.getParentRegion().getComposite();

      if (!STextValidationModelUtils.isDefault(exit)) {
        boolean hasOutgoingTransition = false;
        Iterator<Transition> transitionIt = state.getOutgoingTransitions().iterator();
        while (transitionIt.hasNext() && !hasOutgoingTransition) {
          Transition transition = transitionIt.next();
          hasOutgoingTransition =
              STextValidationModelUtils.isDefaultExitTransition(transition)
                  ? true
                  : STextValidationModelUtils.isNamedExitTransition(transition, exit.getName());
        }
        if (!hasOutgoingTransition) {
          error(EXIT_UNUSED, exit, null, -1);
        }
      } else {
        boolean hasOutgoingTransition = false;
        Iterator<Transition> transitionIt = state.getOutgoingTransitions().iterator();
        while (transitionIt.hasNext() && !hasOutgoingTransition) {
          hasOutgoingTransition =
              STextValidationModelUtils.isDefaultExitTransition(transitionIt.next());
        }
        if (!hasOutgoingTransition) {
          error(EXIT_DEFAULT_UNUSED, exit, null, -1);
        }
      }
    }
  }
 /**
  * Exit nodes in top level regions are not supported.
  *
  * @param exit
  */
 @Check(CheckType.FAST)
 public void exitOnStatechart(Exit exit) {
   if (exit.getParentRegion().getComposite() instanceof Statechart) {
     error(ISSUE_EXIT_ON_STATECHART, exit, null, -1);
   }
 }