@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); } }