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