void (@NotNull Editor editor, final int startOffset, int endOffset) { final FoldingModel foldingModel = editor.getFoldingModel(); final FoldRegion[] regions; if (foldingModel instanceof FoldingModelEx) { regions = ((FoldingModelEx)foldingModel).fetchTopLevel(); } else { regions = foldingModel.getAllFoldRegions(); } if (regions == null) { return; } int i = Arrays.binarySearch(regions, null, (o1, o2) -> { // Find the first region that ends after the given start offset if (o1 == null) { return startOffset - o2.getEndOffset(); } return o1.getEndOffset() - startOffset; }); if (i < 0) { i = -i - 1; } else { i++; // Don't expand fold region that ends at the start offset. } if (i >= regions.length) { return; } final List<FoldRegion> toExpand = new ArrayList<>(); for (; i < regions.length; i++) { final FoldRegion region = regions[i]; if (region.getStartOffset() >= endOffset) { break; } if (!region.isExpanded()) { toExpand.add(region); } } if (toExpand.isEmpty()) { return; } foldingModel.runBatchFoldingOperation(() -> { for (FoldRegion region : toExpand) { region.setExpanded(true); } }); }