void (final int indentLevel, @NotNull @NonNls final StringBuilder buffer) { appendText(getDocComment(), indentLevel, buffer, NEXT_LINE); appendText(getModifierListInternal(), indentLevel, buffer); buffer.append(isEnum() ? "enum " : isAnnotationType() ? "@interface " : isInterface() ? "interface " : isRecord() ? "record " : "class "); PsiRecordHeader header = getRecordHeader(); if (header != null) { appendText(getNameIdentifier(), indentLevel, buffer, ""); appendText(header, indentLevel, buffer, " "); } else { appendText(getNameIdentifier(), indentLevel, buffer, " "); } appendText(getTypeParameterList(), indentLevel, buffer, " "); appendText(getExtendsList(), indentLevel, buffer, " "); appendText(getImplementsList(), indentLevel, buffer, " "); appendText(getPermitsList(), indentLevel, buffer, " "); buffer.append('{'); int newIndentLevel = indentLevel + getIndentSize(); List<PsiField> fields = getOwnFields(); List<PsiMethod> methods = getOwnMethods(); List<PsiClass> classes = getOwnInnerClasses(); if (!fields.isEmpty()) { goNextLine(newIndentLevel, buffer); for (int i = 0; i < fields.size(); i++) { PsiField field = fields.get(i); appendText(field, newIndentLevel, buffer); if (field instanceof ClsEnumConstantImpl) { if (i < fields.size() - 1 && fields.get(i + 1) instanceof ClsEnumConstantImpl) { buffer.append(", "); } else { buffer.append(';'); if (i < fields.size() - 1) { buffer.append('\n'); goNextLine(newIndentLevel, buffer); } } } else if (i < fields.size() - 1) { goNextLine(newIndentLevel, buffer); } } } else if (isEnum() && methods.size() + classes.size() > 0) { goNextLine(newIndentLevel, buffer); buffer.append(";"); } if (!methods.isEmpty()) { if (isEnum() || !fields.isEmpty()) { buffer.append('\n'); } goNextLine(newIndentLevel, buffer); for (int i = 0; i < methods.size(); i++) { appendText(methods.get(i), newIndentLevel, buffer); if (i < methods.size() - 1) { buffer.append('\n'); goNextLine(newIndentLevel, buffer); } } } if (!classes.isEmpty()) { if (fields.size() + methods.size() > 0) { buffer.append('\n'); } goNextLine(newIndentLevel, buffer); for (int i = 0; i < classes.size(); i++) { appendText(classes.get(i), newIndentLevel, buffer); if (i < classes.size() - 1) { buffer.append('\n'); goNextLine(newIndentLevel, buffer); } } } goNextLine(indentLevel, buffer); buffer.append('}'); }