private void addFoldingRegions(
     Set<Position> regions, IDocumentElementNode[] nodes, IDocument document)
     throws BadLocationException {
   for (int i = 0; i < nodes.length; i++) {
     IDocumentElementNode element = nodes[i];
     int startLine = document.getLineOfOffset(element.getOffset());
     int endLine = document.getLineOfOffset(element.getOffset() + element.getLength());
     if (startLine < endLine) {
       int start = document.getLineOffset(startLine);
       int end = document.getLineOffset(endLine) + document.getLineLength(endLine);
       Position position = new Position(start, end - start);
       regions.add(position);
       fPositionToElement.put(position, element);
     }
     IDocumentElementNode[] children = element.getChildNodes();
     if (children != null) {
       addFoldingRegions(regions, children, document);
     }
   }
 }