void (@NotNull List<? super FoldingDescriptor> list, @NotNull PsiClass aClass, @NotNull Document document, @NotNull Set<? super PsiElement> processedComments, boolean quick) { PsiElement parent = aClass.getParent(); if (!(parent instanceof PsiJavaFile) || ((PsiJavaFile)parent).getClasses().length > 1) { addToFold(list, aClass, document, true, getCodeBlockPlaceholder(null), classRange(aClass), !(parent instanceof PsiFile) && JavaCodeFoldingSettings.getInstance().isCollapseInnerClasses()); } addAnnotationsToFold(list, aClass.getModifierList(), document); for (PsiElement child = aClass.getFirstChild(); child != null; child = child.getNextSibling()) { ProgressIndicatorProvider.checkCanceled(); if (child instanceof PsiMethod) { PsiMethod method = (PsiMethod)child; addFoldsForMethod(list, method, document, quick, processedComments); } else if (child instanceof PsiField) { PsiField field = (PsiField)child; addCommentsToFold(list, field, document, processedComments); addAnnotationsToFold(list, field.getModifierList(), document); PsiExpression initializer = field.getInitializer(); if (initializer != null) { addCodeBlockFolds(list, initializer, processedComments, document, quick); } else if (field instanceof PsiEnumConstant) { addCodeBlockFolds(list, field, processedComments, document, quick); } } else if (child instanceof PsiClassInitializer) { PsiClassInitializer initializer = (PsiClassInitializer)child; addToFold(list, child, document, true, getCodeBlockPlaceholder(initializer.getBody()), initializer.getBody().getTextRange(), JavaCodeFoldingSettings.getInstance().isCollapseMethods()); addCodeBlockFolds(list, child, processedComments, document, quick); } else if (child instanceof PsiClass) { addFoldsForClass(list, (PsiClass)child, document, processedComments, quick); } else if (child instanceof PsiComment) { addCommentToFold(list, (PsiComment)child, document, processedComments); } else if (child instanceof PsiRecordHeader) { addToFold(list, child, document, false, "(...)", child.getTextRange(), false); } } }