@Override
  public void visitCaseSection(@NotNull GrCaseSection caseSection) {
    for (GrExpression value : caseSection.getExpressions()) {
      if (value != null) {
        value.accept(this);
      }
    }

    final GrStatement[] statements = caseSection.getStatements();

    //infer 'may be return' position
    int i;
    //noinspection StatementWithEmptyBody
    for (i = statements.length - 1; i >= 0 && statements[i] instanceof GrBreakStatement; i--) {
    }

    for (int j = 0; j < statements.length; j++) {
      GrStatement statement = statements[j];
      statement.accept(this);
      if (j == i) handlePossibleReturn(statement);
    }

    if (statements.length > 0) {
      handlePossibleYield(statements[statements.length - 1]);
    }

    if (myHead != null) {
      addPendingEdge(caseSection, myHead);
    }
    if (caseSection.getArrow() != null) {
      // arrow-style switch expressions are not fall-through
      var parent = caseSection.getParent();
      if (parent instanceof GrSwitchElement) {
        readdPendingEdge((GroovyPsiElement)parent);
      }
      interruptFlow();
    }
  }
@Override
  public void visitCaseSection(@NotNull GrCaseSection caseSection)