void (@NotNull List<? super FoldingDescriptor> list, @NotNull PsiJavaFile file, @NotNull Document document) { TextRange range = fileHeaderRange(file); if (range != null && range.getLength() > 1 && document.getLineNumber(range.getEndOffset()) > document.getLineNumber(range.getStartOffset())) { PsiElement anchorElementToUse = file; PsiElement candidate = file.getFirstChild(); // We experienced the following problem situation: // 1. There is a collapsed class-level javadoc; // 2. User starts typing at class definition line (e.g. we had definition like 'public class Test' and user starts // typing 'abstract' between 'public' and 'class'); // 3. Collapsed class-level javadoc automatically expanded. That happened because PSI structure became invalid (because // class definition line at start looks like 'public class Test'); // So, our point is to preserve fold descriptor referencing javadoc PSI element. if (candidate != null && candidate.getTextRange().equals(range)) { ASTNode node = candidate.getNode(); if (node != null && node.getElementType() == JavaDocElementType.DOC_COMMENT) { anchorElementToUse = candidate; } } list.add(new FoldingDescriptor(anchorElementToUse.getNode(), range, null, "/.../", JavaCodeFoldingSettings.getInstance().isCollapseFileHeader(), Collections.emptySet())); } }