@Override
  protected void recursiveTokens(final Interval interval) {
    int endOffset = interval.getEndOffset();
    int startOffset = interval.getStartOffset();
    if (documentText.length() <= endOffset || documentText.length() <= startOffset) {
      return;
    } else if (endOffset == -1) {
      endOffset = documentText.length() - 1;
    }

    int distance = interval.getEndLine() - interval.getStartLine();
    if (distance >= foldingDistance) {
      char temp = documentText.charAt(startOffset);
      switch (temp) {
        case '{':
        case '[':
          if (preferencesService.getBoolean(
              ProductConstants.PRODUCT_ID_DESIGNER,
              PreferenceConstants.FOLD_STATEMENT_BLOCKS,
              true,
              null)) {
            positions.add(new Position(startOffset, endOffset - startOffset));
          }
          break;
        case '(':
          if (preferencesService.getBoolean(
              ProductConstants.PRODUCT_ID_DESIGNER,
              PreferenceConstants.FOLD_PARENTHESIS,
              true,
              null)) {
            positions.add(new Position(startOffset, endOffset - startOffset));
          }
          break;
        case '/':
          if (preferencesService.getBoolean(
              ProductConstants.PRODUCT_ID_DESIGNER,
              PreferenceConstants.FOLD_COMMENTS,
              true,
              null)) {
            positions.add(new Position(startOffset, endOffset - startOffset));
          }
          break;
        default:
          break;
      }
    }
    for (Interval subIntervall : interval.getSubIntervals()) {
      recursiveTokens(subIntervall);
    }
  }