List<LineInfo> (@NotNull ChangeIndentContext context, int targetLine) { List<LineInfo> result = new ArrayList<>(); int targetLineIndent = getLineIndent(context, targetLine); final int soleIndent = getSoleIndent(context); if (soleIndent > 0) { result.add(new LineInfo(targetLine, soleIndent, false)); } else { result.add(new LineInfo(targetLine, targetLineIndent, false)); } int indentUsedLastTime = Integer.MAX_VALUE; for (int i = targetLine - 1; i >= 0 && indentUsedLastTime > targetLineIndent; i--) { if (DocumentUtil.isLineEmpty(context.document, i)) { continue; } int indent = getLineIndent(context, i); if (indent < targetLineIndent) { break; } if (indent >= indentUsedLastTime) { continue; } PsiElement element = context.file.findElementAt(context.document.getLineStartOffset(i) + indent); if (element == null) { continue; } ASTNode node = element.getNode(); result.add(new LineInfo(i, indent, COMPOUND_STATEMENT_TYPES.contains(node.getElementType()))); indentUsedLastTime = indent; } return result; }