void (final List<? super FoldingDescriptor> descriptors, GrImportStatement[] imports) { if (imports.length < 2) return; PsiElement first = imports[0]; while (first != null) { PsiElement marker = first; PsiElement next = first.getNextSibling(); while (next instanceof GrImportStatement || next instanceof LeafPsiElement) { if (next instanceof GrImportStatement) marker = next; next = next.getNextSibling(); } if (marker != first) { int start = first.getTextRange().getStartOffset(); int end = marker.getTextRange().getEndOffset(); int tail = "import ".length(); if (start + tail < end && !JavaFoldingBuilderBase.hasErrorElementsNearby(first.getContainingFile(), start, end)) { FoldingDescriptor descriptor = new FoldingDescriptor(first.getNode(), new TextRange(start + tail, end), null, "...", JavaCodeFoldingSettings.getInstance().isCollapseImports(), Collections.emptySet()); // imports are often added/removed automatically, so we enable autoupdate of folded region for foldings even if it's collapsed descriptor.setCanBeRemovedWhenCollapsed(true); descriptors.add(descriptor); } } while (!(next instanceof GrImportStatement) && next != null) next = next.getNextSibling(); first = next; } }